root/fs/gfs2/aops.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. gfs2_page_add_databufs
  2. gfs2_get_block_noalloc
  3. gfs2_writepage
  4. gfs2_write_full_page
  5. __gfs2_jdata_writepage
  6. gfs2_jdata_writepage
  7. gfs2_writepages
  8. gfs2_write_jdata_pagevec
  9. gfs2_write_cache_jdata
  10. gfs2_jdata_writepages
  11. stuffed_readpage
  12. __gfs2_readpage
  13. gfs2_readpage
  14. gfs2_internal_read
  15. gfs2_readpages
  16. adjust_fs_space
  17. jdata_set_page_dirty
  18. gfs2_bmap
  19. gfs2_discard
  20. gfs2_invalidatepage
  21. gfs2_releasepage
  22. gfs2_set_aops

   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 
  40 void 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 
  71 static 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  */
  89 static 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 
 111 redirty:
 112         redirty_page_for_writepage(wbc, page);
 113 out:
 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  */
 121 static 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 
 155 static 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 
 181 static 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 
 195 out_ignore:
 196         redirty_page_for_writepage(wbc, page);
 197 out:
 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  */
 209 static 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 
 238 static 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_blkbits);
 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)) {
 262 continue_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 
 333 static 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 
 369 retry:
 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 
 414 static 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  */
 437 static 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 
 483 static 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 
 516 static 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);
 535 out:
 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 
 551 int 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_SHIFT;
 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 
 599 static 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);
 615 out_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  */
 626 void 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);
 660 out2:
 661         brelse(m_bh);
 662 out:
 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  
 674 static 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 
 688 static 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 
 707 static 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 
 729 static 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);
 754 out:
 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 
 770 int 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 
 823 cannot_release:
 824         spin_unlock(&sdp->sd_ail_lock);
 825         gfs2_log_unlock(sdp);
 826         return 0;
 827 }
 828 
 829 static 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 
 843 static 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 
 856 void 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 }

/* [<][>][^][v][top][bottom][index][help] */