linux/fs/gfs2/aops.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0-only
   2/*
   3 * Copyright (C) Sistina Software, Inc.  1997-2003 All rights reserved.
   4 * Copyright (C) 2004-2008 Red Hat, Inc.  All rights reserved.
   5 */
   6
   7#include <linux/sched.h>
   8#include <linux/slab.h>
   9#include <linux/spinlock.h>
  10#include <linux/completion.h>
  11#include <linux/buffer_head.h>
  12#include <linux/pagemap.h>
  13#include <linux/pagevec.h>
  14#include <linux/mpage.h>
  15#include <linux/fs.h>
  16#include <linux/writeback.h>
  17#include <linux/swap.h>
  18#include <linux/gfs2_ondisk.h>
  19#include <linux/backing-dev.h>
  20#include <linux/uio.h>
  21#include <trace/events/writeback.h>
  22#include <linux/sched/signal.h>
  23
  24#include "gfs2.h"
  25#include "incore.h"
  26#include "bmap.h"
  27#include "glock.h"
  28#include "inode.h"
  29#include "log.h"
  30#include "meta_io.h"
  31#include "quota.h"
  32#include "trans.h"
  33#include "rgrp.h"
  34#include "super.h"
  35#include "util.h"
  36#include "glops.h"
  37#include "aops.h"
  38
  39
  40void gfs2_page_add_databufs(struct gfs2_inode *ip, struct page *page,
  41                            unsigned int from, unsigned int len)
  42{
  43        struct buffer_head *head = page_buffers(page);
  44        unsigned int bsize = head->b_size;
  45        struct buffer_head *bh;
  46        unsigned int to = from + len;
  47        unsigned int start, end;
  48
  49        for (bh = head, start = 0; bh != head || !start;
  50             bh = bh->b_this_page, start = end) {
  51                end = start + bsize;
  52                if (end <= from)
  53                        continue;
  54                if (start >= to)
  55                        break;
  56                set_buffer_uptodate(bh);
  57                gfs2_trans_add_data(ip->i_gl, bh);
  58        }
  59}
  60
  61/**
  62 * gfs2_get_block_noalloc - Fills in a buffer head with details about a block
  63 * @inode: The inode
  64 * @lblock: The block number to look up
  65 * @bh_result: The buffer head to return the result in
  66 * @create: Non-zero if we may add block to the file
  67 *
  68 * Returns: errno
  69 */
  70
  71static int gfs2_get_block_noalloc(struct inode *inode, sector_t lblock,
  72                                  struct buffer_head *bh_result, int create)
  73{
  74        int error;
  75
  76        error = gfs2_block_map(inode, lblock, bh_result, 0);
  77        if (error)
  78                return error;
  79        if (!buffer_mapped(bh_result))
  80                return -EIO;
  81        return 0;
  82}
  83
  84/**
  85 * gfs2_writepage - Write page for writeback mappings
  86 * @page: The page
  87 * @wbc: The writeback control
  88 */
  89static int gfs2_writepage(struct page *page, struct writeback_control *wbc)
  90{
  91        struct inode *inode = page->mapping->host;
  92        struct gfs2_inode *ip = GFS2_I(inode);
  93        struct gfs2_sbd *sdp = GFS2_SB(inode);
  94        loff_t i_size = i_size_read(inode);
  95        pgoff_t end_index = i_size >> PAGE_SHIFT;
  96        unsigned offset;
  97
  98        if (gfs2_assert_withdraw(sdp, gfs2_glock_is_held_excl(ip->i_gl)))
  99                goto out;
 100        if (current->journal_info)
 101                goto redirty;
 102        /* Is the page fully outside i_size? (truncate in progress) */
 103        offset = i_size & (PAGE_SIZE-1);
 104        if (page->index > end_index || (page->index == end_index && !offset)) {
 105                page->mapping->a_ops->invalidatepage(page, 0, PAGE_SIZE);
 106                goto out;
 107        }
 108
 109        return nobh_writepage(page, gfs2_get_block_noalloc, wbc);
 110
 111redirty:
 112        redirty_page_for_writepage(wbc, page);
 113out:
 114        unlock_page(page);
 115        return 0;
 116}
 117
 118/* This is the same as calling block_write_full_page, but it also
 119 * writes pages outside of i_size
 120 */
 121static int gfs2_write_full_page(struct page *page, get_block_t *get_block,
 122                                struct writeback_control *wbc)
 123{
 124        struct inode * const inode = page->mapping->host;
 125        loff_t i_size = i_size_read(inode);
 126        const pgoff_t end_index = i_size >> PAGE_SHIFT;
 127        unsigned offset;
 128
 129        /*
 130         * The page straddles i_size.  It must be zeroed out on each and every
 131         * writepage invocation because it may be mmapped.  "A file is mapped
 132         * in multiples of the page size.  For a file that is not a multiple of
 133         * the  page size, the remaining memory is zeroed when mapped, and
 134         * writes to that region are not written out to the file."
 135         */
 136        offset = i_size & (PAGE_SIZE-1);
 137        if (page->index == end_index && offset)
 138                zero_user_segment(page, offset, PAGE_SIZE);
 139
 140        return __block_write_full_page(inode, page, get_block, wbc,
 141                                       end_buffer_async_write);
 142}
 143
 144/**
 145 * __gfs2_jdata_writepage - The core of jdata writepage
 146 * @page: The page to write
 147 * @wbc: The writeback control
 148 *
 149 * This is shared between writepage and writepages and implements the
 150 * core of the writepage operation. If a transaction is required then
 151 * PageChecked will have been set and the transaction will have
 152 * already been started before this is called.
 153 */
 154
 155static int __gfs2_jdata_writepage(struct page *page, struct writeback_control *wbc)
 156{
 157        struct inode *inode = page->mapping->host;
 158        struct gfs2_inode *ip = GFS2_I(inode);
 159        struct gfs2_sbd *sdp = GFS2_SB(inode);
 160
 161        if (PageChecked(page)) {
 162                ClearPageChecked(page);
 163                if (!page_has_buffers(page)) {
 164                        create_empty_buffers(page, inode->i_sb->s_blocksize,
 165                                             BIT(BH_Dirty)|BIT(BH_Uptodate));
 166                }
 167                gfs2_page_add_databufs(ip, page, 0, sdp->sd_vfs->s_blocksize);
 168        }
 169        return gfs2_write_full_page(page, gfs2_get_block_noalloc, wbc);
 170}
 171
 172/**
 173 * gfs2_jdata_writepage - Write complete page
 174 * @page: Page to write
 175 * @wbc: The writeback control
 176 *
 177 * Returns: errno
 178 *
 179 */
 180
 181static int gfs2_jdata_writepage(struct page *page, struct writeback_control *wbc)
 182{
 183        struct inode *inode = page->mapping->host;
 184        struct gfs2_inode *ip = GFS2_I(inode);
 185        struct gfs2_sbd *sdp = GFS2_SB(inode);
 186        int ret;
 187
 188        if (gfs2_assert_withdraw(sdp, gfs2_glock_is_held_excl(ip->i_gl)))
 189                goto out;
 190        if (PageChecked(page) || current->journal_info)
 191                goto out_ignore;
 192        ret = __gfs2_jdata_writepage(page, wbc);
 193        return ret;
 194
 195out_ignore:
 196        redirty_page_for_writepage(wbc, page);
 197out:
 198        unlock_page(page);
 199        return 0;
 200}
 201
 202/**
 203 * gfs2_writepages - Write a bunch of dirty pages back to disk
 204 * @mapping: The mapping to write
 205 * @wbc: Write-back control
 206 *
 207 * Used for both ordered and writeback modes.
 208 */
 209static int gfs2_writepages(struct address_space *mapping,
 210                           struct writeback_control *wbc)
 211{
 212        struct gfs2_sbd *sdp = gfs2_mapping2sbd(mapping);
 213        int ret = mpage_writepages(mapping, wbc, gfs2_get_block_noalloc);
 214
 215        /*
 216         * Even if we didn't write any pages here, we might still be holding
 217         * dirty pages in the ail. We forcibly flush the ail because we don't
 218         * want balance_dirty_pages() to loop indefinitely trying to write out
 219         * pages held in the ail that it can't find.
 220         */
 221        if (ret == 0)
 222                set_bit(SDF_FORCE_AIL_FLUSH, &sdp->sd_flags);
 223
 224        return ret;
 225}
 226
 227/**
 228 * gfs2_write_jdata_pagevec - Write back a pagevec's worth of pages
 229 * @mapping: The mapping
 230 * @wbc: The writeback control
 231 * @pvec: The vector of pages
 232 * @nr_pages: The number of pages to write
 233 * @done_index: Page index
 234 *
 235 * Returns: non-zero if loop should terminate, zero otherwise
 236 */
 237
 238static int gfs2_write_jdata_pagevec(struct address_space *mapping,
 239                                    struct writeback_control *wbc,
 240                                    struct pagevec *pvec,
 241                                    int nr_pages,
 242                                    pgoff_t *done_index)
 243{
 244        struct inode *inode = mapping->host;
 245        struct gfs2_sbd *sdp = GFS2_SB(inode);
 246        unsigned nrblocks = nr_pages * (PAGE_SIZE/inode->i_sb->s_blocksize);
 247        int i;
 248        int ret;
 249
 250        ret = gfs2_trans_begin(sdp, nrblocks, nrblocks);
 251        if (ret < 0)
 252                return ret;
 253
 254        for(i = 0; i < nr_pages; i++) {
 255                struct page *page = pvec->pages[i];
 256
 257                *done_index = page->index;
 258
 259                lock_page(page);
 260
 261                if (unlikely(page->mapping != mapping)) {
 262continue_unlock:
 263                        unlock_page(page);
 264                        continue;
 265                }
 266
 267                if (!PageDirty(page)) {
 268                        /* someone wrote it for us */
 269                        goto continue_unlock;
 270                }
 271
 272                if (PageWriteback(page)) {
 273                        if (wbc->sync_mode != WB_SYNC_NONE)
 274                                wait_on_page_writeback(page);
 275                        else
 276                                goto continue_unlock;
 277                }
 278
 279                BUG_ON(PageWriteback(page));
 280                if (!clear_page_dirty_for_io(page))
 281                        goto continue_unlock;
 282
 283                trace_wbc_writepage(wbc, inode_to_bdi(inode));
 284
 285                ret = __gfs2_jdata_writepage(page, wbc);
 286                if (unlikely(ret)) {
 287                        if (ret == AOP_WRITEPAGE_ACTIVATE) {
 288                                unlock_page(page);
 289                                ret = 0;
 290                        } else {
 291
 292                                /*
 293                                 * done_index is set past this page,
 294                                 * so media errors will not choke
 295                                 * background writeout for the entire
 296                                 * file. This has consequences for
 297                                 * range_cyclic semantics (ie. it may
 298                                 * not be suitable for data integrity
 299                                 * writeout).
 300                                 */
 301                                *done_index = page->index + 1;
 302                                ret = 1;
 303                                break;
 304                        }
 305                }
 306
 307                /*
 308                 * We stop writing back only if we are not doing
 309                 * integrity sync. In case of integrity sync we have to
 310                 * keep going until we have written all the pages
 311                 * we tagged for writeback prior to entering this loop.
 312                 */
 313                if (--wbc->nr_to_write <= 0 && wbc->sync_mode == WB_SYNC_NONE) {
 314                        ret = 1;
 315                        break;
 316                }
 317
 318        }
 319        gfs2_trans_end(sdp);
 320        return ret;
 321}
 322
 323/**
 324 * gfs2_write_cache_jdata - Like write_cache_pages but different
 325 * @mapping: The mapping to write
 326 * @wbc: The writeback control
 327 *
 328 * The reason that we use our own function here is that we need to
 329 * start transactions before we grab page locks. This allows us
 330 * to get the ordering right.
 331 */
 332
 333static int gfs2_write_cache_jdata(struct address_space *mapping,
 334                                  struct writeback_control *wbc)
 335{
 336        int ret = 0;
 337        int done = 0;
 338        struct pagevec pvec;
 339        int nr_pages;
 340        pgoff_t uninitialized_var(writeback_index);
 341        pgoff_t index;
 342        pgoff_t end;
 343        pgoff_t done_index;
 344        int cycled;
 345        int range_whole = 0;
 346        xa_mark_t tag;
 347
 348        pagevec_init(&pvec);
 349        if (wbc->range_cyclic) {
 350                writeback_index = mapping->writeback_index; /* prev offset */
 351                index = writeback_index;
 352                if (index == 0)
 353                        cycled = 1;
 354                else
 355                        cycled = 0;
 356                end = -1;
 357        } else {
 358                index = wbc->range_start >> PAGE_SHIFT;
 359                end = wbc->range_end >> PAGE_SHIFT;
 360                if (wbc->range_start == 0 && wbc->range_end == LLONG_MAX)
 361                        range_whole = 1;
 362                cycled = 1; /* ignore range_cyclic tests */
 363        }
 364        if (wbc->sync_mode == WB_SYNC_ALL || wbc->tagged_writepages)
 365                tag = PAGECACHE_TAG_TOWRITE;
 366        else
 367                tag = PAGECACHE_TAG_DIRTY;
 368
 369retry:
 370        if (wbc->sync_mode == WB_SYNC_ALL || wbc->tagged_writepages)
 371                tag_pages_for_writeback(mapping, index, end);
 372        done_index = index;
 373        while (!done && (index <= end)) {
 374                nr_pages = pagevec_lookup_range_tag(&pvec, mapping, &index, end,
 375                                tag);
 376                if (nr_pages == 0)
 377                        break;
 378
 379                ret = gfs2_write_jdata_pagevec(mapping, wbc, &pvec, nr_pages, &done_index);
 380                if (ret)
 381                        done = 1;
 382                if (ret > 0)
 383                        ret = 0;
 384                pagevec_release(&pvec);
 385                cond_resched();
 386        }
 387
 388        if (!cycled && !done) {
 389                /*
 390                 * range_cyclic:
 391                 * We hit the last page and there is more work to be done: wrap
 392                 * back to the start of the file
 393                 */
 394                cycled = 1;
 395                index = 0;
 396                end = writeback_index - 1;
 397                goto retry;
 398        }
 399
 400        if (wbc->range_cyclic || (range_whole && wbc->nr_to_write > 0))
 401                mapping->writeback_index = done_index;
 402
 403        return ret;
 404}
 405
 406
 407/**
 408 * gfs2_jdata_writepages - Write a bunch of dirty pages back to disk
 409 * @mapping: The mapping to write
 410 * @wbc: The writeback control
 411 * 
 412 */
 413
 414static int gfs2_jdata_writepages(struct address_space *mapping,
 415                                 struct writeback_control *wbc)
 416{
 417        struct gfs2_inode *ip = GFS2_I(mapping->host);
 418        struct gfs2_sbd *sdp = GFS2_SB(mapping->host);
 419        int ret;
 420
 421        ret = gfs2_write_cache_jdata(mapping, wbc);
 422        if (ret == 0 && wbc->sync_mode == WB_SYNC_ALL) {
 423                gfs2_log_flush(sdp, ip->i_gl, GFS2_LOG_HEAD_FLUSH_NORMAL |
 424                               GFS2_LFC_JDATA_WPAGES);
 425                ret = gfs2_write_cache_jdata(mapping, wbc);
 426        }
 427        return ret;
 428}
 429
 430/**
 431 * stuffed_readpage - Fill in a Linux page with stuffed file data
 432 * @ip: the inode
 433 * @page: the page
 434 *
 435 * Returns: errno
 436 */
 437static int stuffed_readpage(struct gfs2_inode *ip, struct page *page)
 438{
 439        struct buffer_head *dibh;
 440        u64 dsize = i_size_read(&ip->i_inode);
 441        void *kaddr;
 442        int error;
 443
 444        /*
 445         * Due to the order of unstuffing files and ->fault(), we can be
 446         * asked for a zero page in the case of a stuffed file being extended,
 447         * so we need to supply one here. It doesn't happen often.
 448         */
 449        if (unlikely(page->index)) {
 450                zero_user(page, 0, PAGE_SIZE);
 451                SetPageUptodate(page);
 452                return 0;
 453        }
 454
 455        error = gfs2_meta_inode_buffer(ip, &dibh);
 456        if (error)
 457                return error;
 458
 459        kaddr = kmap_atomic(page);
 460        if (dsize > gfs2_max_stuffed_size(ip))
 461                dsize = gfs2_max_stuffed_size(ip);
 462        memcpy(kaddr, dibh->b_data + sizeof(struct gfs2_dinode), dsize);
 463        memset(kaddr + dsize, 0, PAGE_SIZE - dsize);
 464        kunmap_atomic(kaddr);
 465        flush_dcache_page(page);
 466        brelse(dibh);
 467        SetPageUptodate(page);
 468
 469        return 0;
 470}
 471
 472
 473/**
 474 * __gfs2_readpage - readpage
 475 * @file: The file to read a page for
 476 * @page: The page to read
 477 *
 478 * This is the core of gfs2's readpage. It's used by the internal file
 479 * reading code as in that case we already hold the glock. Also it's
 480 * called by gfs2_readpage() once the required lock has been granted.
 481 */
 482
 483static int __gfs2_readpage(void *file, struct page *page)
 484{
 485        struct gfs2_inode *ip = GFS2_I(page->mapping->host);
 486        struct gfs2_sbd *sdp = GFS2_SB(page->mapping->host);
 487
 488        int error;
 489
 490        if (i_blocksize(page->mapping->host) == PAGE_SIZE &&
 491            !page_has_buffers(page)) {
 492                error = iomap_readpage(page, &gfs2_iomap_ops);
 493        } else if (gfs2_is_stuffed(ip)) {
 494                error = stuffed_readpage(ip, page);
 495                unlock_page(page);
 496        } else {
 497                error = mpage_readpage(page, gfs2_block_map);
 498        }
 499
 500        if (unlikely(test_bit(SDF_WITHDRAWN, &sdp->sd_flags)))
 501                return -EIO;
 502
 503        return error;
 504}
 505
 506/**
 507 * gfs2_readpage - read a page of a file
 508 * @file: The file to read
 509 * @page: The page of the file
 510 *
 511 * This deals with the locking required. We have to unlock and
 512 * relock the page in order to get the locking in the right
 513 * order.
 514 */
 515
 516static int gfs2_readpage(struct file *file, struct page *page)
 517{
 518        struct address_space *mapping = page->mapping;
 519        struct gfs2_inode *ip = GFS2_I(mapping->host);
 520        struct gfs2_holder gh;
 521        int error;
 522
 523        unlock_page(page);
 524        gfs2_holder_init(ip->i_gl, LM_ST_SHARED, 0, &gh);
 525        error = gfs2_glock_nq(&gh);
 526        if (unlikely(error))
 527                goto out;
 528        error = AOP_TRUNCATED_PAGE;
 529        lock_page(page);
 530        if (page->mapping == mapping && !PageUptodate(page))
 531                error = __gfs2_readpage(file, page);
 532        else
 533                unlock_page(page);
 534        gfs2_glock_dq(&gh);
 535out:
 536        gfs2_holder_uninit(&gh);
 537        if (error && error != AOP_TRUNCATED_PAGE)
 538                lock_page(page);
 539        return error;
 540}
 541
 542/**
 543 * gfs2_internal_read - read an internal file
 544 * @ip: The gfs2 inode
 545 * @buf: The buffer to fill
 546 * @pos: The file position
 547 * @size: The amount to read
 548 *
 549 */
 550
 551int gfs2_internal_read(struct gfs2_inode *ip, char *buf, loff_t *pos,
 552                       unsigned size)
 553{
 554        struct address_space *mapping = ip->i_inode.i_mapping;
 555        unsigned long index = *pos / PAGE_SIZE;
 556        unsigned offset = *pos & (PAGE_SIZE - 1);
 557        unsigned copied = 0;
 558        unsigned amt;
 559        struct page *page;
 560        void *p;
 561
 562        do {
 563                amt = size - copied;
 564                if (offset + size > PAGE_SIZE)
 565                        amt = PAGE_SIZE - offset;
 566                page = read_cache_page(mapping, index, __gfs2_readpage, NULL);
 567                if (IS_ERR(page))
 568                        return PTR_ERR(page);
 569                p = kmap_atomic(page);
 570                memcpy(buf + copied, p + offset, amt);
 571                kunmap_atomic(p);
 572                put_page(page);
 573                copied += amt;
 574                index++;
 575                offset = 0;
 576        } while(copied < size);
 577        (*pos) += size;
 578        return size;
 579}
 580
 581/**
 582 * gfs2_readpages - Read a bunch of pages at once
 583 * @file: The file to read from
 584 * @mapping: Address space info
 585 * @pages: List of pages to read
 586 * @nr_pages: Number of pages to read
 587 *
 588 * Some notes:
 589 * 1. This is only for readahead, so we can simply ignore any things
 590 *    which are slightly inconvenient (such as locking conflicts between
 591 *    the page lock and the glock) and return having done no I/O. Its
 592 *    obviously not something we'd want to do on too regular a basis.
 593 *    Any I/O we ignore at this time will be done via readpage later.
 594 * 2. We don't handle stuffed files here we let readpage do the honours.
 595 * 3. mpage_readpages() does most of the heavy lifting in the common case.
 596 * 4. gfs2_block_map() is relied upon to set BH_Boundary in the right places.
 597 */
 598
 599static int gfs2_readpages(struct file *file, struct address_space *mapping,
 600                          struct list_head *pages, unsigned nr_pages)
 601{
 602        struct inode *inode = mapping->host;
 603        struct gfs2_inode *ip = GFS2_I(inode);
 604        struct gfs2_sbd *sdp = GFS2_SB(inode);
 605        struct gfs2_holder gh;
 606        int ret;
 607
 608        gfs2_holder_init(ip->i_gl, LM_ST_SHARED, 0, &gh);
 609        ret = gfs2_glock_nq(&gh);
 610        if (unlikely(ret))
 611                goto out_uninit;
 612        if (!gfs2_is_stuffed(ip))
 613                ret = mpage_readpages(mapping, pages, nr_pages, gfs2_block_map);
 614        gfs2_glock_dq(&gh);
 615out_uninit:
 616        gfs2_holder_uninit(&gh);
 617        if (unlikely(test_bit(SDF_WITHDRAWN, &sdp->sd_flags)))
 618                ret = -EIO;
 619        return ret;
 620}
 621
 622/**
 623 * adjust_fs_space - Adjusts the free space available due to gfs2_grow
 624 * @inode: the rindex inode
 625 */
 626void adjust_fs_space(struct inode *inode)
 627{
 628        struct gfs2_sbd *sdp = GFS2_SB(inode);
 629        struct gfs2_inode *m_ip = GFS2_I(sdp->sd_statfs_inode);
 630        struct gfs2_inode *l_ip = GFS2_I(sdp->sd_sc_inode);
 631        struct gfs2_statfs_change_host *m_sc = &sdp->sd_statfs_master;
 632        struct gfs2_statfs_change_host *l_sc = &sdp->sd_statfs_local;
 633        struct buffer_head *m_bh, *l_bh;
 634        u64 fs_total, new_free;
 635
 636        if (gfs2_trans_begin(sdp, 2 * RES_STATFS, 0) != 0)
 637                return;
 638
 639        /* Total up the file system space, according to the latest rindex. */
 640        fs_total = gfs2_ri_total(sdp);
 641        if (gfs2_meta_inode_buffer(m_ip, &m_bh) != 0)
 642                goto out;
 643
 644        spin_lock(&sdp->sd_statfs_spin);
 645        gfs2_statfs_change_in(m_sc, m_bh->b_data +
 646                              sizeof(struct gfs2_dinode));
 647        if (fs_total > (m_sc->sc_total + l_sc->sc_total))
 648                new_free = fs_total - (m_sc->sc_total + l_sc->sc_total);
 649        else
 650                new_free = 0;
 651        spin_unlock(&sdp->sd_statfs_spin);
 652        fs_warn(sdp, "File system extended by %llu blocks.\n",
 653                (unsigned long long)new_free);
 654        gfs2_statfs_change(sdp, new_free, new_free, 0);
 655
 656        if (gfs2_meta_inode_buffer(l_ip, &l_bh) != 0)
 657                goto out2;
 658        update_statfs(sdp, m_bh, l_bh);
 659        brelse(l_bh);
 660out2:
 661        brelse(m_bh);
 662out:
 663        sdp->sd_rindex_uptodate = 0;
 664        gfs2_trans_end(sdp);
 665}
 666
 667/**
 668 * jdata_set_page_dirty - Page dirtying function
 669 * @page: The page to dirty
 670 *
 671 * Returns: 1 if it dirtyed the page, or 0 otherwise
 672 */
 673 
 674static int jdata_set_page_dirty(struct page *page)
 675{
 676        SetPageChecked(page);
 677        return __set_page_dirty_buffers(page);
 678}
 679
 680/**
 681 * gfs2_bmap - Block map function
 682 * @mapping: Address space info
 683 * @lblock: The block to map
 684 *
 685 * Returns: The disk address for the block or 0 on hole or error
 686 */
 687
 688static sector_t gfs2_bmap(struct address_space *mapping, sector_t lblock)
 689{
 690        struct gfs2_inode *ip = GFS2_I(mapping->host);
 691        struct gfs2_holder i_gh;
 692        sector_t dblock = 0;
 693        int error;
 694
 695        error = gfs2_glock_nq_init(ip->i_gl, LM_ST_SHARED, LM_FLAG_ANY, &i_gh);
 696        if (error)
 697                return 0;
 698
 699        if (!gfs2_is_stuffed(ip))
 700                dblock = iomap_bmap(mapping, lblock, &gfs2_iomap_ops);
 701
 702        gfs2_glock_dq_uninit(&i_gh);
 703
 704        return dblock;
 705}
 706
 707static void gfs2_discard(struct gfs2_sbd *sdp, struct buffer_head *bh)
 708{
 709        struct gfs2_bufdata *bd;
 710
 711        lock_buffer(bh);
 712        gfs2_log_lock(sdp);
 713        clear_buffer_dirty(bh);
 714        bd = bh->b_private;
 715        if (bd) {
 716                if (!list_empty(&bd->bd_list) && !buffer_pinned(bh))
 717                        list_del_init(&bd->bd_list);
 718                else
 719                        gfs2_remove_from_journal(bh, REMOVE_JDATA);
 720        }
 721        bh->b_bdev = NULL;
 722        clear_buffer_mapped(bh);
 723        clear_buffer_req(bh);
 724        clear_buffer_new(bh);
 725        gfs2_log_unlock(sdp);
 726        unlock_buffer(bh);
 727}
 728
 729static void gfs2_invalidatepage(struct page *page, unsigned int offset,
 730                                unsigned int length)
 731{
 732        struct gfs2_sbd *sdp = GFS2_SB(page->mapping->host);
 733        unsigned int stop = offset + length;
 734        int partial_page = (offset || length < PAGE_SIZE);
 735        struct buffer_head *bh, *head;
 736        unsigned long pos = 0;
 737
 738        BUG_ON(!PageLocked(page));
 739        if (!partial_page)
 740                ClearPageChecked(page);
 741        if (!page_has_buffers(page))
 742                goto out;
 743
 744        bh = head = page_buffers(page);
 745        do {
 746                if (pos + bh->b_size > stop)
 747                        return;
 748
 749                if (offset <= pos)
 750                        gfs2_discard(sdp, bh);
 751                pos += bh->b_size;
 752                bh = bh->b_this_page;
 753        } while (bh != head);
 754out:
 755        if (!partial_page)
 756                try_to_release_page(page, 0);
 757}
 758
 759/**
 760 * gfs2_releasepage - free the metadata associated with a page
 761 * @page: the page that's being released
 762 * @gfp_mask: passed from Linux VFS, ignored by us
 763 *
 764 * Calls try_to_free_buffers() to free the buffers and put the page if the
 765 * buffers can be released.
 766 *
 767 * Returns: 1 if the page was put or else 0
 768 */
 769
 770int gfs2_releasepage(struct page *page, gfp_t gfp_mask)
 771{
 772        struct address_space *mapping = page->mapping;
 773        struct gfs2_sbd *sdp = gfs2_mapping2sbd(mapping);
 774        struct buffer_head *bh, *head;
 775        struct gfs2_bufdata *bd;
 776
 777        if (!page_has_buffers(page))
 778                return 0;
 779
 780        /*
 781         * From xfs_vm_releasepage: mm accommodates an old ext3 case where
 782         * clean pages might not have had the dirty bit cleared.  Thus, it can
 783         * send actual dirty pages to ->releasepage() via shrink_active_list().
 784         *
 785         * As a workaround, we skip pages that contain dirty buffers below.
 786         * Once ->releasepage isn't called on dirty pages anymore, we can warn
 787         * on dirty buffers like we used to here again.
 788         */
 789
 790        gfs2_log_lock(sdp);
 791        spin_lock(&sdp->sd_ail_lock);
 792        head = bh = page_buffers(page);
 793        do {
 794                if (atomic_read(&bh->b_count))
 795                        goto cannot_release;
 796                bd = bh->b_private;
 797                if (bd && bd->bd_tr)
 798                        goto cannot_release;
 799                if (buffer_dirty(bh) || WARN_ON(buffer_pinned(bh)))
 800                        goto cannot_release;
 801                bh = bh->b_this_page;
 802        } while(bh != head);
 803        spin_unlock(&sdp->sd_ail_lock);
 804
 805        head = bh = page_buffers(page);
 806        do {
 807                bd = bh->b_private;
 808                if (bd) {
 809                        gfs2_assert_warn(sdp, bd->bd_bh == bh);
 810                        if (!list_empty(&bd->bd_list))
 811                                list_del_init(&bd->bd_list);
 812                        bd->bd_bh = NULL;
 813                        bh->b_private = NULL;
 814                        kmem_cache_free(gfs2_bufdata_cachep, bd);
 815                }
 816
 817                bh = bh->b_this_page;
 818        } while (bh != head);
 819        gfs2_log_unlock(sdp);
 820
 821        return try_to_free_buffers(page);
 822
 823cannot_release:
 824        spin_unlock(&sdp->sd_ail_lock);
 825        gfs2_log_unlock(sdp);
 826        return 0;
 827}
 828
 829static const struct address_space_operations gfs2_aops = {
 830        .writepage = gfs2_writepage,
 831        .writepages = gfs2_writepages,
 832        .readpage = gfs2_readpage,
 833        .readpages = gfs2_readpages,
 834        .bmap = gfs2_bmap,
 835        .invalidatepage = gfs2_invalidatepage,
 836        .releasepage = gfs2_releasepage,
 837        .direct_IO = noop_direct_IO,
 838        .migratepage = buffer_migrate_page,
 839        .is_partially_uptodate = block_is_partially_uptodate,
 840        .error_remove_page = generic_error_remove_page,
 841};
 842
 843static const struct address_space_operations gfs2_jdata_aops = {
 844        .writepage = gfs2_jdata_writepage,
 845        .writepages = gfs2_jdata_writepages,
 846        .readpage = gfs2_readpage,
 847        .readpages = gfs2_readpages,
 848        .set_page_dirty = jdata_set_page_dirty,
 849        .bmap = gfs2_bmap,
 850        .invalidatepage = gfs2_invalidatepage,
 851        .releasepage = gfs2_releasepage,
 852        .is_partially_uptodate = block_is_partially_uptodate,
 853        .error_remove_page = generic_error_remove_page,
 854};
 855
 856void gfs2_set_aops(struct inode *inode)
 857{
 858        if (gfs2_is_jdata(GFS2_I(inode)))
 859                inode->i_mapping->a_ops = &gfs2_jdata_aops;
 860        else
 861                inode->i_mapping->a_ops = &gfs2_aops;
 862}
 863