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