1 /* 2 * Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved. 3 * Copyright (C) 2004-2008 Red Hat, Inc. All rights reserved. 4 * 5 * This copyrighted material is made available to anyone wishing to use, 6 * modify, copy, or redistribute it subject to the terms and conditions 7 * of the GNU General Public License version 2. 8 */ 9 10 #include <linux/sched.h> 11 #include <linux/slab.h> 12 #include <linux/spinlock.h> 13 #include <linux/completion.h> 14 #include <linux/buffer_head.h> 15 #include <linux/pagemap.h> 16 #include <linux/pagevec.h> 17 #include <linux/mpage.h> 18 #include <linux/fs.h> 19 #include <linux/writeback.h> 20 #include <linux/swap.h> 21 #include <linux/gfs2_ondisk.h> 22 #include <linux/backing-dev.h> 23 #include <linux/aio.h> 24 #include <trace/events/writeback.h> 25 26 #include "gfs2.h" 27 #include "incore.h" 28 #include "bmap.h" 29 #include "glock.h" 30 #include "inode.h" 31 #include "log.h" 32 #include "meta_io.h" 33 #include "quota.h" 34 #include "trans.h" 35 #include "rgrp.h" 36 #include "super.h" 37 #include "util.h" 38 #include "glops.h" 39 40 41 static void gfs2_page_add_databufs(struct gfs2_inode *ip, struct page *page, 42 unsigned int from, unsigned int to) 43 { 44 struct buffer_head *head = page_buffers(page); 45 unsigned int bsize = head->b_size; 46 struct buffer_head *bh; 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 || start >= to) 53 continue; 54 if (gfs2_is_jdata(ip)) 55 set_buffer_uptodate(bh); 56 gfs2_trans_add_data(ip->i_gl, bh); 57 } 58 } 59 60 /** 61 * gfs2_get_block_noalloc - Fills in a buffer head with details about a block 62 * @inode: The inode 63 * @lblock: The block number to look up 64 * @bh_result: The buffer head to return the result in 65 * @create: Non-zero if we may add block to the file 66 * 67 * Returns: errno 68 */ 69 70 static int gfs2_get_block_noalloc(struct inode *inode, sector_t lblock, 71 struct buffer_head *bh_result, int create) 72 { 73 int error; 74 75 error = gfs2_block_map(inode, lblock, bh_result, 0); 76 if (error) 77 return error; 78 if (!buffer_mapped(bh_result)) 79 return -EIO; 80 return 0; 81 } 82 83 static int gfs2_get_block_direct(struct inode *inode, sector_t lblock, 84 struct buffer_head *bh_result, int create) 85 { 86 return gfs2_block_map(inode, lblock, bh_result, 0); 87 } 88 89 /** 90 * gfs2_writepage_common - Common bits of writepage 91 * @page: The page to be written 92 * @wbc: The writeback control 93 * 94 * Returns: 1 if writepage is ok, otherwise an error code or zero if no error. 95 */ 96 97 static int gfs2_writepage_common(struct page *page, 98 struct writeback_control *wbc) 99 { 100 struct inode *inode = page->mapping->host; 101 struct gfs2_inode *ip = GFS2_I(inode); 102 struct gfs2_sbd *sdp = GFS2_SB(inode); 103 loff_t i_size = i_size_read(inode); 104 pgoff_t end_index = i_size >> PAGE_CACHE_SHIFT; 105 unsigned offset; 106 107 if (gfs2_assert_withdraw(sdp, gfs2_glock_is_held_excl(ip->i_gl))) 108 goto out; 109 if (current->journal_info) 110 goto redirty; 111 /* Is the page fully outside i_size? (truncate in progress) */ 112 offset = i_size & (PAGE_CACHE_SIZE-1); 113 if (page->index > end_index || (page->index == end_index && !offset)) { 114 page->mapping->a_ops->invalidatepage(page, 0, PAGE_CACHE_SIZE); 115 goto out; 116 } 117 return 1; 118 redirty: 119 redirty_page_for_writepage(wbc, page); 120 out: 121 unlock_page(page); 122 return 0; 123 } 124 125 /** 126 * gfs2_writepage - Write page for writeback mappings 127 * @page: The page 128 * @wbc: The writeback control 129 * 130 */ 131 132 static int gfs2_writepage(struct page *page, struct writeback_control *wbc) 133 { 134 int ret; 135 136 ret = gfs2_writepage_common(page, wbc); 137 if (ret <= 0) 138 return ret; 139 140 return nobh_writepage(page, gfs2_get_block_noalloc, wbc); 141 } 142 143 /** 144 * __gfs2_jdata_writepage - The core of jdata writepage 145 * @page: The page to write 146 * @wbc: The writeback control 147 * 148 * This is shared between writepage and writepages and implements the 149 * core of the writepage operation. If a transaction is required then 150 * PageChecked will have been set and the transaction will have 151 * already been started before this is called. 152 */ 153 154 static int __gfs2_jdata_writepage(struct page *page, struct writeback_control *wbc) 155 { 156 struct inode *inode = page->mapping->host; 157 struct gfs2_inode *ip = GFS2_I(inode); 158 struct gfs2_sbd *sdp = GFS2_SB(inode); 159 160 if (PageChecked(page)) { 161 ClearPageChecked(page); 162 if (!page_has_buffers(page)) { 163 create_empty_buffers(page, inode->i_sb->s_blocksize, 164 (1 << BH_Dirty)|(1 << BH_Uptodate)); 165 } 166 gfs2_page_add_databufs(ip, page, 0, sdp->sd_vfs->s_blocksize-1); 167 } 168 return block_write_full_page(page, gfs2_get_block_noalloc, wbc); 169 } 170 171 /** 172 * gfs2_jdata_writepage - Write complete page 173 * @page: Page to write 174 * 175 * Returns: errno 176 * 177 */ 178 179 static int gfs2_jdata_writepage(struct page *page, struct writeback_control *wbc) 180 { 181 struct inode *inode = page->mapping->host; 182 struct gfs2_sbd *sdp = GFS2_SB(inode); 183 int ret; 184 int done_trans = 0; 185 186 if (PageChecked(page)) { 187 if (wbc->sync_mode != WB_SYNC_ALL) 188 goto out_ignore; 189 ret = gfs2_trans_begin(sdp, RES_DINODE + 1, 0); 190 if (ret) 191 goto out_ignore; 192 done_trans = 1; 193 } 194 ret = gfs2_writepage_common(page, wbc); 195 if (ret > 0) 196 ret = __gfs2_jdata_writepage(page, wbc); 197 if (done_trans) 198 gfs2_trans_end(sdp); 199 return ret; 200 201 out_ignore: 202 redirty_page_for_writepage(wbc, page); 203 unlock_page(page); 204 return 0; 205 } 206 207 /** 208 * gfs2_writepages - Write a bunch of dirty pages back to disk 209 * @mapping: The mapping to write 210 * @wbc: Write-back control 211 * 212 * Used for both ordered and writeback modes. 213 */ 214 static int gfs2_writepages(struct address_space *mapping, 215 struct writeback_control *wbc) 216 { 217 return mpage_writepages(mapping, wbc, gfs2_get_block_noalloc); 218 } 219 220 /** 221 * gfs2_write_jdata_pagevec - Write back a pagevec's worth of pages 222 * @mapping: The mapping 223 * @wbc: The writeback control 224 * @writepage: The writepage function to call for each page 225 * @pvec: The vector of pages 226 * @nr_pages: The number of pages to write 227 * 228 * Returns: non-zero if loop should terminate, zero otherwise 229 */ 230 231 static int gfs2_write_jdata_pagevec(struct address_space *mapping, 232 struct writeback_control *wbc, 233 struct pagevec *pvec, 234 int nr_pages, pgoff_t end, 235 pgoff_t *done_index) 236 { 237 struct inode *inode = mapping->host; 238 struct gfs2_sbd *sdp = GFS2_SB(inode); 239 unsigned nrblocks = nr_pages * (PAGE_CACHE_SIZE/inode->i_sb->s_blocksize); 240 int i; 241 int ret; 242 243 ret = gfs2_trans_begin(sdp, nrblocks, nrblocks); 244 if (ret < 0) 245 return ret; 246 247 for(i = 0; i < nr_pages; i++) { 248 struct page *page = pvec->pages[i]; 249 250 /* 251 * At this point, the page may be truncated or 252 * invalidated (changing page->mapping to NULL), or 253 * even swizzled back from swapper_space to tmpfs file 254 * mapping. However, page->index will not change 255 * because we have a reference on the page. 256 */ 257 if (page->index > end) { 258 /* 259 * can't be range_cyclic (1st pass) because 260 * end == -1 in that case. 261 */ 262 ret = 1; 263 break; 264 } 265 266 *done_index = page->index; 267 268 lock_page(page); 269 270 if (unlikely(page->mapping != mapping)) { 271 continue_unlock: 272 unlock_page(page); 273 continue; 274 } 275 276 if (!PageDirty(page)) { 277 /* someone wrote it for us */ 278 goto continue_unlock; 279 } 280 281 if (PageWriteback(page)) { 282 if (wbc->sync_mode != WB_SYNC_NONE) 283 wait_on_page_writeback(page); 284 else 285 goto continue_unlock; 286 } 287 288 BUG_ON(PageWriteback(page)); 289 if (!clear_page_dirty_for_io(page)) 290 goto continue_unlock; 291 292 trace_wbc_writepage(wbc, mapping->backing_dev_info); 293 294 ret = __gfs2_jdata_writepage(page, wbc); 295 if (unlikely(ret)) { 296 if (ret == AOP_WRITEPAGE_ACTIVATE) { 297 unlock_page(page); 298 ret = 0; 299 } else { 300 301 /* 302 * done_index is set past this page, 303 * so media errors will not choke 304 * background writeout for the entire 305 * file. This has consequences for 306 * range_cyclic semantics (ie. it may 307 * not be suitable for data integrity 308 * writeout). 309 */ 310 *done_index = page->index + 1; 311 ret = 1; 312 break; 313 } 314 } 315 316 /* 317 * We stop writing back only if we are not doing 318 * integrity sync. In case of integrity sync we have to 319 * keep going until we have written all the pages 320 * we tagged for writeback prior to entering this loop. 321 */ 322 if (--wbc->nr_to_write <= 0 && wbc->sync_mode == WB_SYNC_NONE) { 323 ret = 1; 324 break; 325 } 326 327 } 328 gfs2_trans_end(sdp); 329 return ret; 330 } 331 332 /** 333 * gfs2_write_cache_jdata - Like write_cache_pages but different 334 * @mapping: The mapping to write 335 * @wbc: The writeback control 336 * @writepage: The writepage function to call 337 * @data: The data to pass to writepage 338 * 339 * The reason that we use our own function here is that we need to 340 * start transactions before we grab page locks. This allows us 341 * to get the ordering right. 342 */ 343 344 static int gfs2_write_cache_jdata(struct address_space *mapping, 345 struct writeback_control *wbc) 346 { 347 int ret = 0; 348 int done = 0; 349 struct pagevec pvec; 350 int nr_pages; 351 pgoff_t uninitialized_var(writeback_index); 352 pgoff_t index; 353 pgoff_t end; 354 pgoff_t done_index; 355 int cycled; 356 int range_whole = 0; 357 int tag; 358 359 pagevec_init(&pvec, 0); 360 if (wbc->range_cyclic) { 361 writeback_index = mapping->writeback_index; /* prev offset */ 362 index = writeback_index; 363 if (index == 0) 364 cycled = 1; 365 else 366 cycled = 0; 367 end = -1; 368 } else { 369 index = wbc->range_start >> PAGE_CACHE_SHIFT; 370 end = wbc->range_end >> PAGE_CACHE_SHIFT; 371 if (wbc->range_start == 0 && wbc->range_end == LLONG_MAX) 372 range_whole = 1; 373 cycled = 1; /* ignore range_cyclic tests */ 374 } 375 if (wbc->sync_mode == WB_SYNC_ALL || wbc->tagged_writepages) 376 tag = PAGECACHE_TAG_TOWRITE; 377 else 378 tag = PAGECACHE_TAG_DIRTY; 379 380 retry: 381 if (wbc->sync_mode == WB_SYNC_ALL || wbc->tagged_writepages) 382 tag_pages_for_writeback(mapping, index, end); 383 done_index = index; 384 while (!done && (index <= end)) { 385 nr_pages = pagevec_lookup_tag(&pvec, mapping, &index, tag, 386 min(end - index, (pgoff_t)PAGEVEC_SIZE-1) + 1); 387 if (nr_pages == 0) 388 break; 389 390 ret = gfs2_write_jdata_pagevec(mapping, wbc, &pvec, nr_pages, end, &done_index); 391 if (ret) 392 done = 1; 393 if (ret > 0) 394 ret = 0; 395 pagevec_release(&pvec); 396 cond_resched(); 397 } 398 399 if (!cycled && !done) { 400 /* 401 * range_cyclic: 402 * We hit the last page and there is more work to be done: wrap 403 * back to the start of the file 404 */ 405 cycled = 1; 406 index = 0; 407 end = writeback_index - 1; 408 goto retry; 409 } 410 411 if (wbc->range_cyclic || (range_whole && wbc->nr_to_write > 0)) 412 mapping->writeback_index = done_index; 413 414 return ret; 415 } 416 417 418 /** 419 * gfs2_jdata_writepages - Write a bunch of dirty pages back to disk 420 * @mapping: The mapping to write 421 * @wbc: The writeback control 422 * 423 */ 424 425 static int gfs2_jdata_writepages(struct address_space *mapping, 426 struct writeback_control *wbc) 427 { 428 struct gfs2_inode *ip = GFS2_I(mapping->host); 429 struct gfs2_sbd *sdp = GFS2_SB(mapping->host); 430 int ret; 431 432 ret = gfs2_write_cache_jdata(mapping, wbc); 433 if (ret == 0 && wbc->sync_mode == WB_SYNC_ALL) { 434 gfs2_log_flush(sdp, ip->i_gl); 435 ret = gfs2_write_cache_jdata(mapping, wbc); 436 } 437 return ret; 438 } 439 440 /** 441 * stuffed_readpage - Fill in a Linux page with stuffed file data 442 * @ip: the inode 443 * @page: the page 444 * 445 * Returns: errno 446 */ 447 448 static int stuffed_readpage(struct gfs2_inode *ip, struct page *page) 449 { 450 struct buffer_head *dibh; 451 u64 dsize = i_size_read(&ip->i_inode); 452 void *kaddr; 453 int error; 454 455 /* 456 * Due to the order of unstuffing files and ->fault(), we can be 457 * asked for a zero page in the case of a stuffed file being extended, 458 * so we need to supply one here. It doesn't happen often. 459 */ 460 if (unlikely(page->index)) { 461 zero_user(page, 0, PAGE_CACHE_SIZE); 462 SetPageUptodate(page); 463 return 0; 464 } 465 466 error = gfs2_meta_inode_buffer(ip, &dibh); 467 if (error) 468 return error; 469 470 kaddr = kmap_atomic(page); 471 if (dsize > (dibh->b_size - sizeof(struct gfs2_dinode))) 472 dsize = (dibh->b_size - sizeof(struct gfs2_dinode)); 473 memcpy(kaddr, dibh->b_data + sizeof(struct gfs2_dinode), dsize); 474 memset(kaddr + dsize, 0, PAGE_CACHE_SIZE - dsize); 475 kunmap_atomic(kaddr); 476 flush_dcache_page(page); 477 brelse(dibh); 478 SetPageUptodate(page); 479 480 return 0; 481 } 482 483 484 /** 485 * __gfs2_readpage - readpage 486 * @file: The file to read a page for 487 * @page: The page to read 488 * 489 * This is the core of gfs2's readpage. Its used by the internal file 490 * reading code as in that case we already hold the glock. Also its 491 * called by gfs2_readpage() once the required lock has been granted. 492 * 493 */ 494 495 static int __gfs2_readpage(void *file, struct page *page) 496 { 497 struct gfs2_inode *ip = GFS2_I(page->mapping->host); 498 struct gfs2_sbd *sdp = GFS2_SB(page->mapping->host); 499 int error; 500 501 if (gfs2_is_stuffed(ip)) { 502 error = stuffed_readpage(ip, page); 503 unlock_page(page); 504 } else { 505 error = mpage_readpage(page, gfs2_block_map); 506 } 507 508 if (unlikely(test_bit(SDF_SHUTDOWN, &sdp->sd_flags))) 509 return -EIO; 510 511 return error; 512 } 513 514 /** 515 * gfs2_readpage - read a page of a file 516 * @file: The file to read 517 * @page: The page of the file 518 * 519 * This deals with the locking required. We have to unlock and 520 * relock the page in order to get the locking in the right 521 * order. 522 */ 523 524 static int gfs2_readpage(struct file *file, struct page *page) 525 { 526 struct address_space *mapping = page->mapping; 527 struct gfs2_inode *ip = GFS2_I(mapping->host); 528 struct gfs2_holder gh; 529 int error; 530 531 unlock_page(page); 532 gfs2_holder_init(ip->i_gl, LM_ST_SHARED, 0, &gh); 533 error = gfs2_glock_nq(&gh); 534 if (unlikely(error)) 535 goto out; 536 error = AOP_TRUNCATED_PAGE; 537 lock_page(page); 538 if (page->mapping == mapping && !PageUptodate(page)) 539 error = __gfs2_readpage(file, page); 540 else 541 unlock_page(page); 542 gfs2_glock_dq(&gh); 543 out: 544 gfs2_holder_uninit(&gh); 545 if (error && error != AOP_TRUNCATED_PAGE) 546 lock_page(page); 547 return error; 548 } 549 550 /** 551 * gfs2_internal_read - read an internal file 552 * @ip: The gfs2 inode 553 * @buf: The buffer to fill 554 * @pos: The file position 555 * @size: The amount to read 556 * 557 */ 558 559 int gfs2_internal_read(struct gfs2_inode *ip, char *buf, loff_t *pos, 560 unsigned size) 561 { 562 struct address_space *mapping = ip->i_inode.i_mapping; 563 unsigned long index = *pos / PAGE_CACHE_SIZE; 564 unsigned offset = *pos & (PAGE_CACHE_SIZE - 1); 565 unsigned copied = 0; 566 unsigned amt; 567 struct page *page; 568 void *p; 569 570 do { 571 amt = size - copied; 572 if (offset + size > PAGE_CACHE_SIZE) 573 amt = PAGE_CACHE_SIZE - offset; 574 page = read_cache_page(mapping, index, __gfs2_readpage, NULL); 575 if (IS_ERR(page)) 576 return PTR_ERR(page); 577 p = kmap_atomic(page); 578 memcpy(buf + copied, p + offset, amt); 579 kunmap_atomic(p); 580 mark_page_accessed(page); 581 page_cache_release(page); 582 copied += amt; 583 index++; 584 offset = 0; 585 } while(copied < size); 586 (*pos) += size; 587 return size; 588 } 589 590 /** 591 * gfs2_readpages - Read a bunch of pages at once 592 * 593 * Some notes: 594 * 1. This is only for readahead, so we can simply ignore any things 595 * which are slightly inconvenient (such as locking conflicts between 596 * the page lock and the glock) and return having done no I/O. Its 597 * obviously not something we'd want to do on too regular a basis. 598 * Any I/O we ignore at this time will be done via readpage later. 599 * 2. We don't handle stuffed files here we let readpage do the honours. 600 * 3. mpage_readpages() does most of the heavy lifting in the common case. 601 * 4. gfs2_block_map() is relied upon to set BH_Boundary in the right places. 602 */ 603 604 static int gfs2_readpages(struct file *file, struct address_space *mapping, 605 struct list_head *pages, unsigned nr_pages) 606 { 607 struct inode *inode = mapping->host; 608 struct gfs2_inode *ip = GFS2_I(inode); 609 struct gfs2_sbd *sdp = GFS2_SB(inode); 610 struct gfs2_holder gh; 611 int ret; 612 613 gfs2_holder_init(ip->i_gl, LM_ST_SHARED, 0, &gh); 614 ret = gfs2_glock_nq(&gh); 615 if (unlikely(ret)) 616 goto out_uninit; 617 if (!gfs2_is_stuffed(ip)) 618 ret = mpage_readpages(mapping, pages, nr_pages, gfs2_block_map); 619 gfs2_glock_dq(&gh); 620 out_uninit: 621 gfs2_holder_uninit(&gh); 622 if (unlikely(test_bit(SDF_SHUTDOWN, &sdp->sd_flags))) 623 ret = -EIO; 624 return ret; 625 } 626 627 /** 628 * gfs2_write_begin - Begin to write to a file 629 * @file: The file to write to 630 * @mapping: The mapping in which to write 631 * @pos: The file offset at which to start writing 632 * @len: Length of the write 633 * @flags: Various flags 634 * @pagep: Pointer to return the page 635 * @fsdata: Pointer to return fs data (unused by GFS2) 636 * 637 * Returns: errno 638 */ 639 640 static int gfs2_write_begin(struct file *file, struct address_space *mapping, 641 loff_t pos, unsigned len, unsigned flags, 642 struct page **pagep, void **fsdata) 643 { 644 struct gfs2_inode *ip = GFS2_I(mapping->host); 645 struct gfs2_sbd *sdp = GFS2_SB(mapping->host); 646 struct gfs2_inode *m_ip = GFS2_I(sdp->sd_statfs_inode); 647 unsigned int data_blocks = 0, ind_blocks = 0, rblocks; 648 unsigned requested = 0; 649 int alloc_required; 650 int error = 0; 651 pgoff_t index = pos >> PAGE_CACHE_SHIFT; 652 unsigned from = pos & (PAGE_CACHE_SIZE - 1); 653 struct page *page; 654 655 gfs2_holder_init(ip->i_gl, LM_ST_EXCLUSIVE, 0, &ip->i_gh); 656 error = gfs2_glock_nq(&ip->i_gh); 657 if (unlikely(error)) 658 goto out_uninit; 659 if (&ip->i_inode == sdp->sd_rindex) { 660 error = gfs2_glock_nq_init(m_ip->i_gl, LM_ST_EXCLUSIVE, 661 GL_NOCACHE, &m_ip->i_gh); 662 if (unlikely(error)) { 663 gfs2_glock_dq(&ip->i_gh); 664 goto out_uninit; 665 } 666 } 667 668 alloc_required = gfs2_write_alloc_required(ip, pos, len); 669 670 if (alloc_required || gfs2_is_jdata(ip)) 671 gfs2_write_calc_reserv(ip, len, &data_blocks, &ind_blocks); 672 673 if (alloc_required) { 674 struct gfs2_alloc_parms ap = { .aflags = 0, }; 675 error = gfs2_quota_lock_check(ip); 676 if (error) 677 goto out_unlock; 678 679 requested = data_blocks + ind_blocks; 680 ap.target = requested; 681 error = gfs2_inplace_reserve(ip, &ap); 682 if (error) 683 goto out_qunlock; 684 } 685 686 rblocks = RES_DINODE + ind_blocks; 687 if (gfs2_is_jdata(ip)) 688 rblocks += data_blocks ? data_blocks : 1; 689 if (ind_blocks || data_blocks) 690 rblocks += RES_STATFS + RES_QUOTA; 691 if (&ip->i_inode == sdp->sd_rindex) 692 rblocks += 2 * RES_STATFS; 693 if (alloc_required) 694 rblocks += gfs2_rg_blocks(ip, requested); 695 696 error = gfs2_trans_begin(sdp, rblocks, 697 PAGE_CACHE_SIZE/sdp->sd_sb.sb_bsize); 698 if (error) 699 goto out_trans_fail; 700 701 error = -ENOMEM; 702 flags |= AOP_FLAG_NOFS; 703 page = grab_cache_page_write_begin(mapping, index, flags); 704 *pagep = page; 705 if (unlikely(!page)) 706 goto out_endtrans; 707 708 if (gfs2_is_stuffed(ip)) { 709 error = 0; 710 if (pos + len > sdp->sd_sb.sb_bsize - sizeof(struct gfs2_dinode)) { 711 error = gfs2_unstuff_dinode(ip, page); 712 if (error == 0) 713 goto prepare_write; 714 } else if (!PageUptodate(page)) { 715 error = stuffed_readpage(ip, page); 716 } 717 goto out; 718 } 719 720 prepare_write: 721 error = __block_write_begin(page, from, len, gfs2_block_map); 722 out: 723 if (error == 0) 724 return 0; 725 726 unlock_page(page); 727 page_cache_release(page); 728 729 gfs2_trans_end(sdp); 730 if (pos + len > ip->i_inode.i_size) 731 gfs2_trim_blocks(&ip->i_inode); 732 goto out_trans_fail; 733 734 out_endtrans: 735 gfs2_trans_end(sdp); 736 out_trans_fail: 737 if (alloc_required) { 738 gfs2_inplace_release(ip); 739 out_qunlock: 740 gfs2_quota_unlock(ip); 741 } 742 out_unlock: 743 if (&ip->i_inode == sdp->sd_rindex) { 744 gfs2_glock_dq(&m_ip->i_gh); 745 gfs2_holder_uninit(&m_ip->i_gh); 746 } 747 gfs2_glock_dq(&ip->i_gh); 748 out_uninit: 749 gfs2_holder_uninit(&ip->i_gh); 750 return error; 751 } 752 753 /** 754 * adjust_fs_space - Adjusts the free space available due to gfs2_grow 755 * @inode: the rindex inode 756 */ 757 static void adjust_fs_space(struct inode *inode) 758 { 759 struct gfs2_sbd *sdp = inode->i_sb->s_fs_info; 760 struct gfs2_inode *m_ip = GFS2_I(sdp->sd_statfs_inode); 761 struct gfs2_inode *l_ip = GFS2_I(sdp->sd_sc_inode); 762 struct gfs2_statfs_change_host *m_sc = &sdp->sd_statfs_master; 763 struct gfs2_statfs_change_host *l_sc = &sdp->sd_statfs_local; 764 struct buffer_head *m_bh, *l_bh; 765 u64 fs_total, new_free; 766 767 /* Total up the file system space, according to the latest rindex. */ 768 fs_total = gfs2_ri_total(sdp); 769 if (gfs2_meta_inode_buffer(m_ip, &m_bh) != 0) 770 return; 771 772 spin_lock(&sdp->sd_statfs_spin); 773 gfs2_statfs_change_in(m_sc, m_bh->b_data + 774 sizeof(struct gfs2_dinode)); 775 if (fs_total > (m_sc->sc_total + l_sc->sc_total)) 776 new_free = fs_total - (m_sc->sc_total + l_sc->sc_total); 777 else 778 new_free = 0; 779 spin_unlock(&sdp->sd_statfs_spin); 780 fs_warn(sdp, "File system extended by %llu blocks.\n", 781 (unsigned long long)new_free); 782 gfs2_statfs_change(sdp, new_free, new_free, 0); 783 784 if (gfs2_meta_inode_buffer(l_ip, &l_bh) != 0) 785 goto out; 786 update_statfs(sdp, m_bh, l_bh); 787 brelse(l_bh); 788 out: 789 brelse(m_bh); 790 } 791 792 /** 793 * gfs2_stuffed_write_end - Write end for stuffed files 794 * @inode: The inode 795 * @dibh: The buffer_head containing the on-disk inode 796 * @pos: The file position 797 * @len: The length of the write 798 * @copied: How much was actually copied by the VFS 799 * @page: The page 800 * 801 * This copies the data from the page into the inode block after 802 * the inode data structure itself. 803 * 804 * Returns: errno 805 */ 806 static int gfs2_stuffed_write_end(struct inode *inode, struct buffer_head *dibh, 807 loff_t pos, unsigned len, unsigned copied, 808 struct page *page) 809 { 810 struct gfs2_inode *ip = GFS2_I(inode); 811 struct gfs2_sbd *sdp = GFS2_SB(inode); 812 struct gfs2_inode *m_ip = GFS2_I(sdp->sd_statfs_inode); 813 u64 to = pos + copied; 814 void *kaddr; 815 unsigned char *buf = dibh->b_data + sizeof(struct gfs2_dinode); 816 817 BUG_ON((pos + len) > (dibh->b_size - sizeof(struct gfs2_dinode))); 818 kaddr = kmap_atomic(page); 819 memcpy(buf + pos, kaddr + pos, copied); 820 memset(kaddr + pos + copied, 0, len - copied); 821 flush_dcache_page(page); 822 kunmap_atomic(kaddr); 823 824 if (!PageUptodate(page)) 825 SetPageUptodate(page); 826 unlock_page(page); 827 page_cache_release(page); 828 829 if (copied) { 830 if (inode->i_size < to) 831 i_size_write(inode, to); 832 mark_inode_dirty(inode); 833 } 834 835 if (inode == sdp->sd_rindex) { 836 adjust_fs_space(inode); 837 sdp->sd_rindex_uptodate = 0; 838 } 839 840 brelse(dibh); 841 gfs2_trans_end(sdp); 842 if (inode == sdp->sd_rindex) { 843 gfs2_glock_dq(&m_ip->i_gh); 844 gfs2_holder_uninit(&m_ip->i_gh); 845 } 846 gfs2_glock_dq(&ip->i_gh); 847 gfs2_holder_uninit(&ip->i_gh); 848 return copied; 849 } 850 851 /** 852 * gfs2_write_end 853 * @file: The file to write to 854 * @mapping: The address space to write to 855 * @pos: The file position 856 * @len: The length of the data 857 * @copied: 858 * @page: The page that has been written 859 * @fsdata: The fsdata (unused in GFS2) 860 * 861 * The main write_end function for GFS2. We have a separate one for 862 * stuffed files as they are slightly different, otherwise we just 863 * put our locking around the VFS provided functions. 864 * 865 * Returns: errno 866 */ 867 868 static int gfs2_write_end(struct file *file, struct address_space *mapping, 869 loff_t pos, unsigned len, unsigned copied, 870 struct page *page, void *fsdata) 871 { 872 struct inode *inode = page->mapping->host; 873 struct gfs2_inode *ip = GFS2_I(inode); 874 struct gfs2_sbd *sdp = GFS2_SB(inode); 875 struct gfs2_inode *m_ip = GFS2_I(sdp->sd_statfs_inode); 876 struct buffer_head *dibh; 877 unsigned int from = pos & (PAGE_CACHE_SIZE - 1); 878 unsigned int to = from + len; 879 int ret; 880 struct gfs2_trans *tr = current->journal_info; 881 BUG_ON(!tr); 882 883 BUG_ON(gfs2_glock_is_locked_by_me(ip->i_gl) == NULL); 884 885 ret = gfs2_meta_inode_buffer(ip, &dibh); 886 if (unlikely(ret)) { 887 unlock_page(page); 888 page_cache_release(page); 889 goto failed; 890 } 891 892 if (gfs2_is_stuffed(ip)) 893 return gfs2_stuffed_write_end(inode, dibh, pos, len, copied, page); 894 895 if (!gfs2_is_writeback(ip)) 896 gfs2_page_add_databufs(ip, page, from, to); 897 898 ret = generic_write_end(file, mapping, pos, len, copied, page, fsdata); 899 if (tr->tr_num_buf_new) 900 __mark_inode_dirty(inode, I_DIRTY_DATASYNC); 901 else 902 gfs2_trans_add_meta(ip->i_gl, dibh); 903 904 905 if (inode == sdp->sd_rindex) { 906 adjust_fs_space(inode); 907 sdp->sd_rindex_uptodate = 0; 908 } 909 910 brelse(dibh); 911 failed: 912 gfs2_trans_end(sdp); 913 gfs2_inplace_release(ip); 914 if (ip->i_res->rs_qa_qd_num) 915 gfs2_quota_unlock(ip); 916 if (inode == sdp->sd_rindex) { 917 gfs2_glock_dq(&m_ip->i_gh); 918 gfs2_holder_uninit(&m_ip->i_gh); 919 } 920 gfs2_glock_dq(&ip->i_gh); 921 gfs2_holder_uninit(&ip->i_gh); 922 return ret; 923 } 924 925 /** 926 * gfs2_set_page_dirty - Page dirtying function 927 * @page: The page to dirty 928 * 929 * Returns: 1 if it dirtyed the page, or 0 otherwise 930 */ 931 932 static int gfs2_set_page_dirty(struct page *page) 933 { 934 SetPageChecked(page); 935 return __set_page_dirty_buffers(page); 936 } 937 938 /** 939 * gfs2_bmap - Block map function 940 * @mapping: Address space info 941 * @lblock: The block to map 942 * 943 * Returns: The disk address for the block or 0 on hole or error 944 */ 945 946 static sector_t gfs2_bmap(struct address_space *mapping, sector_t lblock) 947 { 948 struct gfs2_inode *ip = GFS2_I(mapping->host); 949 struct gfs2_holder i_gh; 950 sector_t dblock = 0; 951 int error; 952 953 error = gfs2_glock_nq_init(ip->i_gl, LM_ST_SHARED, LM_FLAG_ANY, &i_gh); 954 if (error) 955 return 0; 956 957 if (!gfs2_is_stuffed(ip)) 958 dblock = generic_block_bmap(mapping, lblock, gfs2_block_map); 959 960 gfs2_glock_dq_uninit(&i_gh); 961 962 return dblock; 963 } 964 965 static void gfs2_discard(struct gfs2_sbd *sdp, struct buffer_head *bh) 966 { 967 struct gfs2_bufdata *bd; 968 969 lock_buffer(bh); 970 gfs2_log_lock(sdp); 971 clear_buffer_dirty(bh); 972 bd = bh->b_private; 973 if (bd) { 974 if (!list_empty(&bd->bd_list) && !buffer_pinned(bh)) 975 list_del_init(&bd->bd_list); 976 else 977 gfs2_remove_from_journal(bh, current->journal_info, 0); 978 } 979 bh->b_bdev = NULL; 980 clear_buffer_mapped(bh); 981 clear_buffer_req(bh); 982 clear_buffer_new(bh); 983 gfs2_log_unlock(sdp); 984 unlock_buffer(bh); 985 } 986 987 static void gfs2_invalidatepage(struct page *page, unsigned int offset, 988 unsigned int length) 989 { 990 struct gfs2_sbd *sdp = GFS2_SB(page->mapping->host); 991 unsigned int stop = offset + length; 992 int partial_page = (offset || length < PAGE_CACHE_SIZE); 993 struct buffer_head *bh, *head; 994 unsigned long pos = 0; 995 996 BUG_ON(!PageLocked(page)); 997 if (!partial_page) 998 ClearPageChecked(page); 999 if (!page_has_buffers(page)) 1000 goto out; 1001 1002 bh = head = page_buffers(page); 1003 do { 1004 if (pos + bh->b_size > stop) 1005 return; 1006 1007 if (offset <= pos) 1008 gfs2_discard(sdp, bh); 1009 pos += bh->b_size; 1010 bh = bh->b_this_page; 1011 } while (bh != head); 1012 out: 1013 if (!partial_page) 1014 try_to_release_page(page, 0); 1015 } 1016 1017 /** 1018 * gfs2_ok_for_dio - check that dio is valid on this file 1019 * @ip: The inode 1020 * @rw: READ or WRITE 1021 * @offset: The offset at which we are reading or writing 1022 * 1023 * Returns: 0 (to ignore the i/o request and thus fall back to buffered i/o) 1024 * 1 (to accept the i/o request) 1025 */ 1026 static int gfs2_ok_for_dio(struct gfs2_inode *ip, int rw, loff_t offset) 1027 { 1028 /* 1029 * Should we return an error here? I can't see that O_DIRECT for 1030 * a stuffed file makes any sense. For now we'll silently fall 1031 * back to buffered I/O 1032 */ 1033 if (gfs2_is_stuffed(ip)) 1034 return 0; 1035 1036 if (offset >= i_size_read(&ip->i_inode)) 1037 return 0; 1038 return 1; 1039 } 1040 1041 1042 1043 static ssize_t gfs2_direct_IO(int rw, struct kiocb *iocb, 1044 const struct iovec *iov, loff_t offset, 1045 unsigned long nr_segs) 1046 { 1047 struct file *file = iocb->ki_filp; 1048 struct inode *inode = file->f_mapping->host; 1049 struct address_space *mapping = inode->i_mapping; 1050 struct gfs2_inode *ip = GFS2_I(inode); 1051 struct gfs2_holder gh; 1052 int rv; 1053 1054 /* 1055 * Deferred lock, even if its a write, since we do no allocation 1056 * on this path. All we need change is atime, and this lock mode 1057 * ensures that other nodes have flushed their buffered read caches 1058 * (i.e. their page cache entries for this inode). We do not, 1059 * unfortunately have the option of only flushing a range like 1060 * the VFS does. 1061 */ 1062 gfs2_holder_init(ip->i_gl, LM_ST_DEFERRED, 0, &gh); 1063 rv = gfs2_glock_nq(&gh); 1064 if (rv) 1065 return rv; 1066 rv = gfs2_ok_for_dio(ip, rw, offset); 1067 if (rv != 1) 1068 goto out; /* dio not valid, fall back to buffered i/o */ 1069 1070 /* 1071 * Now since we are holding a deferred (CW) lock at this point, you 1072 * might be wondering why this is ever needed. There is a case however 1073 * where we've granted a deferred local lock against a cached exclusive 1074 * glock. That is ok provided all granted local locks are deferred, but 1075 * it also means that it is possible to encounter pages which are 1076 * cached and possibly also mapped. So here we check for that and sort 1077 * them out ahead of the dio. The glock state machine will take care of 1078 * everything else. 1079 * 1080 * If in fact the cached glock state (gl->gl_state) is deferred (CW) in 1081 * the first place, mapping->nr_pages will always be zero. 1082 */ 1083 if (mapping->nrpages) { 1084 loff_t lstart = offset & (PAGE_CACHE_SIZE - 1); 1085 loff_t len = iov_length(iov, nr_segs); 1086 loff_t end = PAGE_ALIGN(offset + len) - 1; 1087 1088 rv = 0; 1089 if (len == 0) 1090 goto out; 1091 if (test_and_clear_bit(GIF_SW_PAGED, &ip->i_flags)) 1092 unmap_shared_mapping_range(ip->i_inode.i_mapping, offset, len); 1093 rv = filemap_write_and_wait_range(mapping, lstart, end); 1094 if (rv) 1095 goto out; 1096 if (rw == WRITE) 1097 truncate_inode_pages_range(mapping, lstart, end); 1098 } 1099 1100 rv = __blockdev_direct_IO(rw, iocb, inode, inode->i_sb->s_bdev, iov, 1101 offset, nr_segs, gfs2_get_block_direct, 1102 NULL, NULL, 0); 1103 out: 1104 gfs2_glock_dq(&gh); 1105 gfs2_holder_uninit(&gh); 1106 return rv; 1107 } 1108 1109 /** 1110 * gfs2_releasepage - free the metadata associated with a page 1111 * @page: the page that's being released 1112 * @gfp_mask: passed from Linux VFS, ignored by us 1113 * 1114 * Call try_to_free_buffers() if the buffers in this page can be 1115 * released. 1116 * 1117 * Returns: 0 1118 */ 1119 1120 int gfs2_releasepage(struct page *page, gfp_t gfp_mask) 1121 { 1122 struct address_space *mapping = page->mapping; 1123 struct gfs2_sbd *sdp = gfs2_mapping2sbd(mapping); 1124 struct buffer_head *bh, *head; 1125 struct gfs2_bufdata *bd; 1126 1127 if (!page_has_buffers(page)) 1128 return 0; 1129 1130 gfs2_log_lock(sdp); 1131 spin_lock(&sdp->sd_ail_lock); 1132 head = bh = page_buffers(page); 1133 do { 1134 if (atomic_read(&bh->b_count)) 1135 goto cannot_release; 1136 bd = bh->b_private; 1137 if (bd && bd->bd_tr) 1138 goto cannot_release; 1139 if (buffer_pinned(bh) || buffer_dirty(bh)) 1140 goto not_possible; 1141 bh = bh->b_this_page; 1142 } while(bh != head); 1143 spin_unlock(&sdp->sd_ail_lock); 1144 1145 head = bh = page_buffers(page); 1146 do { 1147 bd = bh->b_private; 1148 if (bd) { 1149 gfs2_assert_warn(sdp, bd->bd_bh == bh); 1150 if (!list_empty(&bd->bd_list)) 1151 list_del_init(&bd->bd_list); 1152 bd->bd_bh = NULL; 1153 bh->b_private = NULL; 1154 kmem_cache_free(gfs2_bufdata_cachep, bd); 1155 } 1156 1157 bh = bh->b_this_page; 1158 } while (bh != head); 1159 gfs2_log_unlock(sdp); 1160 1161 return try_to_free_buffers(page); 1162 1163 not_possible: /* Should never happen */ 1164 WARN_ON(buffer_dirty(bh)); 1165 WARN_ON(buffer_pinned(bh)); 1166 cannot_release: 1167 spin_unlock(&sdp->sd_ail_lock); 1168 gfs2_log_unlock(sdp); 1169 return 0; 1170 } 1171 1172 static const struct address_space_operations gfs2_writeback_aops = { 1173 .writepage = gfs2_writepage, 1174 .writepages = gfs2_writepages, 1175 .readpage = gfs2_readpage, 1176 .readpages = gfs2_readpages, 1177 .write_begin = gfs2_write_begin, 1178 .write_end = gfs2_write_end, 1179 .bmap = gfs2_bmap, 1180 .invalidatepage = gfs2_invalidatepage, 1181 .releasepage = gfs2_releasepage, 1182 .direct_IO = gfs2_direct_IO, 1183 .migratepage = buffer_migrate_page, 1184 .is_partially_uptodate = block_is_partially_uptodate, 1185 .error_remove_page = generic_error_remove_page, 1186 }; 1187 1188 static const struct address_space_operations gfs2_ordered_aops = { 1189 .writepage = gfs2_writepage, 1190 .writepages = gfs2_writepages, 1191 .readpage = gfs2_readpage, 1192 .readpages = gfs2_readpages, 1193 .write_begin = gfs2_write_begin, 1194 .write_end = gfs2_write_end, 1195 .set_page_dirty = gfs2_set_page_dirty, 1196 .bmap = gfs2_bmap, 1197 .invalidatepage = gfs2_invalidatepage, 1198 .releasepage = gfs2_releasepage, 1199 .direct_IO = gfs2_direct_IO, 1200 .migratepage = buffer_migrate_page, 1201 .is_partially_uptodate = block_is_partially_uptodate, 1202 .error_remove_page = generic_error_remove_page, 1203 }; 1204 1205 static const struct address_space_operations gfs2_jdata_aops = { 1206 .writepage = gfs2_jdata_writepage, 1207 .writepages = gfs2_jdata_writepages, 1208 .readpage = gfs2_readpage, 1209 .readpages = gfs2_readpages, 1210 .write_begin = gfs2_write_begin, 1211 .write_end = gfs2_write_end, 1212 .set_page_dirty = gfs2_set_page_dirty, 1213 .bmap = gfs2_bmap, 1214 .invalidatepage = gfs2_invalidatepage, 1215 .releasepage = gfs2_releasepage, 1216 .is_partially_uptodate = block_is_partially_uptodate, 1217 .error_remove_page = generic_error_remove_page, 1218 }; 1219 1220 void gfs2_set_aops(struct inode *inode) 1221 { 1222 struct gfs2_inode *ip = GFS2_I(inode); 1223 1224 if (gfs2_is_writeback(ip)) 1225 inode->i_mapping->a_ops = &gfs2_writeback_aops; 1226 else if (gfs2_is_ordered(ip)) 1227 inode->i_mapping->a_ops = &gfs2_ordered_aops; 1228 else if (gfs2_is_jdata(ip)) 1229 inode->i_mapping->a_ops = &gfs2_jdata_aops; 1230 else 1231 BUG(); 1232 } 1233 1234