data.c (b2efb3f0a1db62aff5e824125785ec6731143b6d) | data.c (a7ffdbe22cecaed59b5d76a5f003d68907d64240) |
---|---|
1/* 2 * fs/f2fs/data.c 3 * 4 * Copyright (c) 2012 Samsung Electronics Co., Ltd. 5 * http://www.samsung.com/ 6 * 7 * This program is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License version 2 as --- 222 unchanged lines hidden (view full) --- 231 /* Get physical address of data block */ 232 addr_array = blkaddr_in_node(rn); 233 addr_array[ofs_in_node] = cpu_to_le32(new_addr); 234 set_page_dirty(node_page); 235} 236 237int reserve_new_block(struct dnode_of_data *dn) 238{ | 1/* 2 * fs/f2fs/data.c 3 * 4 * Copyright (c) 2012 Samsung Electronics Co., Ltd. 5 * http://www.samsung.com/ 6 * 7 * This program is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License version 2 as --- 222 unchanged lines hidden (view full) --- 231 /* Get physical address of data block */ 232 addr_array = blkaddr_in_node(rn); 233 addr_array[ofs_in_node] = cpu_to_le32(new_addr); 234 set_page_dirty(node_page); 235} 236 237int reserve_new_block(struct dnode_of_data *dn) 238{ |
239 struct f2fs_sb_info *sbi = F2FS_SB(dn->inode->i_sb); | 239 struct f2fs_sb_info *sbi = F2FS_I_SB(dn->inode); |
240 241 if (unlikely(is_inode_flag_set(F2FS_I(dn->inode), FI_NO_ALLOC))) 242 return -EPERM; 243 if (unlikely(!inc_valid_block_count(sbi, dn->inode, 1))) 244 return -ENOSPC; 245 246 trace_f2fs_reserve_new_block(dn->inode, dn->nid, dn->ofs_in_node); 247 --- 5 unchanged lines hidden (view full) --- 253} 254 255int f2fs_reserve_block(struct dnode_of_data *dn, pgoff_t index) 256{ 257 bool need_put = dn->inode_page ? false : true; 258 int err; 259 260 /* if inode_page exists, index should be zero */ | 240 241 if (unlikely(is_inode_flag_set(F2FS_I(dn->inode), FI_NO_ALLOC))) 242 return -EPERM; 243 if (unlikely(!inc_valid_block_count(sbi, dn->inode, 1))) 244 return -ENOSPC; 245 246 trace_f2fs_reserve_new_block(dn->inode, dn->nid, dn->ofs_in_node); 247 --- 5 unchanged lines hidden (view full) --- 253} 254 255int f2fs_reserve_block(struct dnode_of_data *dn, pgoff_t index) 256{ 257 bool need_put = dn->inode_page ? false : true; 258 int err; 259 260 /* if inode_page exists, index should be zero */ |
261 f2fs_bug_on(!need_put && index); | 261 f2fs_bug_on(F2FS_I_SB(dn->inode), !need_put && index); |
262 263 err = get_dnode_of_data(dn, index, ALLOC_NODE); 264 if (err) 265 return err; 266 267 if (dn->data_blkaddr == NULL_ADDR) 268 err = reserve_new_block(dn); 269 if (err || need_put) --- 46 unchanged lines hidden (view full) --- 316 317void update_extent_cache(block_t blk_addr, struct dnode_of_data *dn) 318{ 319 struct f2fs_inode_info *fi = F2FS_I(dn->inode); 320 pgoff_t fofs, start_fofs, end_fofs; 321 block_t start_blkaddr, end_blkaddr; 322 int need_update = true; 323 | 262 263 err = get_dnode_of_data(dn, index, ALLOC_NODE); 264 if (err) 265 return err; 266 267 if (dn->data_blkaddr == NULL_ADDR) 268 err = reserve_new_block(dn); 269 if (err || need_put) --- 46 unchanged lines hidden (view full) --- 316 317void update_extent_cache(block_t blk_addr, struct dnode_of_data *dn) 318{ 319 struct f2fs_inode_info *fi = F2FS_I(dn->inode); 320 pgoff_t fofs, start_fofs, end_fofs; 321 block_t start_blkaddr, end_blkaddr; 322 int need_update = true; 323 |
324 f2fs_bug_on(blk_addr == NEW_ADDR); | 324 f2fs_bug_on(F2FS_I_SB(dn->inode), blk_addr == NEW_ADDR); |
325 fofs = start_bidx_of_node(ofs_of_node(dn->node_page), fi) + 326 dn->ofs_in_node; 327 328 /* Update the page address in the parent node */ 329 __set_data_blkaddr(dn, blk_addr); 330 331 if (is_inode_flag_set(fi, FI_NO_EXTENT)) 332 return; --- 58 unchanged lines hidden (view full) --- 391 write_unlock(&fi->ext.ext_lock); 392 if (need_update) 393 sync_inode_page(dn); 394 return; 395} 396 397struct page *find_data_page(struct inode *inode, pgoff_t index, bool sync) 398{ | 325 fofs = start_bidx_of_node(ofs_of_node(dn->node_page), fi) + 326 dn->ofs_in_node; 327 328 /* Update the page address in the parent node */ 329 __set_data_blkaddr(dn, blk_addr); 330 331 if (is_inode_flag_set(fi, FI_NO_EXTENT)) 332 return; --- 58 unchanged lines hidden (view full) --- 391 write_unlock(&fi->ext.ext_lock); 392 if (need_update) 393 sync_inode_page(dn); 394 return; 395} 396 397struct page *find_data_page(struct inode *inode, pgoff_t index, bool sync) 398{ |
399 struct f2fs_sb_info *sbi = F2FS_SB(inode->i_sb); | |
400 struct address_space *mapping = inode->i_mapping; 401 struct dnode_of_data dn; 402 struct page *page; 403 int err; 404 405 page = find_get_page(mapping, index); 406 if (page && PageUptodate(page)) 407 return page; --- 16 unchanged lines hidden (view full) --- 424 if (!page) 425 return ERR_PTR(-ENOMEM); 426 427 if (PageUptodate(page)) { 428 unlock_page(page); 429 return page; 430 } 431 | 399 struct address_space *mapping = inode->i_mapping; 400 struct dnode_of_data dn; 401 struct page *page; 402 int err; 403 404 page = find_get_page(mapping, index); 405 if (page && PageUptodate(page)) 406 return page; --- 16 unchanged lines hidden (view full) --- 423 if (!page) 424 return ERR_PTR(-ENOMEM); 425 426 if (PageUptodate(page)) { 427 unlock_page(page); 428 return page; 429 } 430 |
432 err = f2fs_submit_page_bio(sbi, page, dn.data_blkaddr, | 431 err = f2fs_submit_page_bio(F2FS_I_SB(inode), page, dn.data_blkaddr, |
433 sync ? READ_SYNC : READA); 434 if (err) 435 return ERR_PTR(err); 436 437 if (sync) { 438 wait_on_page_locked(page); 439 if (unlikely(!PageUptodate(page))) { 440 f2fs_put_page(page, 0); --- 5 unchanged lines hidden (view full) --- 446 447/* 448 * If it tries to access a hole, return an error. 449 * Because, the callers, functions in dir.c and GC, should be able to know 450 * whether this page exists or not. 451 */ 452struct page *get_lock_data_page(struct inode *inode, pgoff_t index) 453{ | 432 sync ? READ_SYNC : READA); 433 if (err) 434 return ERR_PTR(err); 435 436 if (sync) { 437 wait_on_page_locked(page); 438 if (unlikely(!PageUptodate(page))) { 439 f2fs_put_page(page, 0); --- 5 unchanged lines hidden (view full) --- 445 446/* 447 * If it tries to access a hole, return an error. 448 * Because, the callers, functions in dir.c and GC, should be able to know 449 * whether this page exists or not. 450 */ 451struct page *get_lock_data_page(struct inode *inode, pgoff_t index) 452{ |
454 struct f2fs_sb_info *sbi = F2FS_SB(inode->i_sb); | |
455 struct address_space *mapping = inode->i_mapping; 456 struct dnode_of_data dn; 457 struct page *page; 458 int err; 459 460repeat: 461 page = grab_cache_page(mapping, index); 462 if (!page) --- 22 unchanged lines hidden (view full) --- 485 * see, f2fs_add_link -> get_new_data_page -> init_inode_metadata. 486 */ 487 if (dn.data_blkaddr == NEW_ADDR) { 488 zero_user_segment(page, 0, PAGE_CACHE_SIZE); 489 SetPageUptodate(page); 490 return page; 491 } 492 | 453 struct address_space *mapping = inode->i_mapping; 454 struct dnode_of_data dn; 455 struct page *page; 456 int err; 457 458repeat: 459 page = grab_cache_page(mapping, index); 460 if (!page) --- 22 unchanged lines hidden (view full) --- 483 * see, f2fs_add_link -> get_new_data_page -> init_inode_metadata. 484 */ 485 if (dn.data_blkaddr == NEW_ADDR) { 486 zero_user_segment(page, 0, PAGE_CACHE_SIZE); 487 SetPageUptodate(page); 488 return page; 489 } 490 |
493 err = f2fs_submit_page_bio(sbi, page, dn.data_blkaddr, READ_SYNC); | 491 err = f2fs_submit_page_bio(F2FS_I_SB(inode), page, 492 dn.data_blkaddr, READ_SYNC); |
494 if (err) 495 return ERR_PTR(err); 496 497 lock_page(page); 498 if (unlikely(!PageUptodate(page))) { 499 f2fs_put_page(page, 1); 500 return ERR_PTR(-EIO); 501 } --- 10 unchanged lines hidden (view full) --- 512 * 513 * Also, caller should grab and release a rwsem by calling f2fs_lock_op() and 514 * f2fs_unlock_op(). 515 * Note that, ipage is set only by make_empty_dir. 516 */ 517struct page *get_new_data_page(struct inode *inode, 518 struct page *ipage, pgoff_t index, bool new_i_size) 519{ | 493 if (err) 494 return ERR_PTR(err); 495 496 lock_page(page); 497 if (unlikely(!PageUptodate(page))) { 498 f2fs_put_page(page, 1); 499 return ERR_PTR(-EIO); 500 } --- 10 unchanged lines hidden (view full) --- 511 * 512 * Also, caller should grab and release a rwsem by calling f2fs_lock_op() and 513 * f2fs_unlock_op(). 514 * Note that, ipage is set only by make_empty_dir. 515 */ 516struct page *get_new_data_page(struct inode *inode, 517 struct page *ipage, pgoff_t index, bool new_i_size) 518{ |
520 struct f2fs_sb_info *sbi = F2FS_SB(inode->i_sb); | |
521 struct address_space *mapping = inode->i_mapping; 522 struct page *page; 523 struct dnode_of_data dn; 524 int err; 525 526 set_new_dnode(&dn, inode, ipage, NULL, 0); 527 err = f2fs_reserve_block(&dn, index); 528 if (err) --- 7 unchanged lines hidden (view full) --- 536 537 if (PageUptodate(page)) 538 return page; 539 540 if (dn.data_blkaddr == NEW_ADDR) { 541 zero_user_segment(page, 0, PAGE_CACHE_SIZE); 542 SetPageUptodate(page); 543 } else { | 519 struct address_space *mapping = inode->i_mapping; 520 struct page *page; 521 struct dnode_of_data dn; 522 int err; 523 524 set_new_dnode(&dn, inode, ipage, NULL, 0); 525 err = f2fs_reserve_block(&dn, index); 526 if (err) --- 7 unchanged lines hidden (view full) --- 534 535 if (PageUptodate(page)) 536 return page; 537 538 if (dn.data_blkaddr == NEW_ADDR) { 539 zero_user_segment(page, 0, PAGE_CACHE_SIZE); 540 SetPageUptodate(page); 541 } else { |
544 err = f2fs_submit_page_bio(sbi, page, dn.data_blkaddr, 545 READ_SYNC); | 542 err = f2fs_submit_page_bio(F2FS_I_SB(inode), page, 543 dn.data_blkaddr, READ_SYNC); |
546 if (err) 547 goto put_err; 548 549 lock_page(page); 550 if (unlikely(!PageUptodate(page))) { 551 f2fs_put_page(page, 1); 552 err = -EIO; 553 goto put_err; --- 14 unchanged lines hidden (view full) --- 568 569put_err: 570 f2fs_put_dnode(&dn); 571 return ERR_PTR(err); 572} 573 574static int __allocate_data_block(struct dnode_of_data *dn) 575{ | 544 if (err) 545 goto put_err; 546 547 lock_page(page); 548 if (unlikely(!PageUptodate(page))) { 549 f2fs_put_page(page, 1); 550 err = -EIO; 551 goto put_err; --- 14 unchanged lines hidden (view full) --- 566 567put_err: 568 f2fs_put_dnode(&dn); 569 return ERR_PTR(err); 570} 571 572static int __allocate_data_block(struct dnode_of_data *dn) 573{ |
576 struct f2fs_sb_info *sbi = F2FS_SB(dn->inode->i_sb); | 574 struct f2fs_sb_info *sbi = F2FS_I_SB(dn->inode); |
577 struct f2fs_summary sum; 578 block_t new_blkaddr; 579 struct node_info ni; 580 int type; 581 582 if (unlikely(is_inode_flag_set(F2FS_I(dn->inode), FI_NO_ALLOC))) 583 return -EPERM; 584 if (unlikely(!inc_valid_block_count(sbi, dn->inode, 1))) --- 24 unchanged lines hidden (view full) --- 609 * Otherwise, 610 * a. preallocate requested block addresses 611 * b. do not use extent cache for better performance 612 * c. give the block addresses to blockdev 613 */ 614static int __get_data_block(struct inode *inode, sector_t iblock, 615 struct buffer_head *bh_result, int create, bool fiemap) 616{ | 575 struct f2fs_summary sum; 576 block_t new_blkaddr; 577 struct node_info ni; 578 int type; 579 580 if (unlikely(is_inode_flag_set(F2FS_I(dn->inode), FI_NO_ALLOC))) 581 return -EPERM; 582 if (unlikely(!inc_valid_block_count(sbi, dn->inode, 1))) --- 24 unchanged lines hidden (view full) --- 607 * Otherwise, 608 * a. preallocate requested block addresses 609 * b. do not use extent cache for better performance 610 * c. give the block addresses to blockdev 611 */ 612static int __get_data_block(struct inode *inode, sector_t iblock, 613 struct buffer_head *bh_result, int create, bool fiemap) 614{ |
617 struct f2fs_sb_info *sbi = F2FS_SB(inode->i_sb); | |
618 unsigned int blkbits = inode->i_sb->s_blocksize_bits; 619 unsigned maxblocks = bh_result->b_size >> blkbits; 620 struct dnode_of_data dn; 621 int mode = create ? ALLOC_NODE : LOOKUP_NODE_RA; 622 pgoff_t pgofs, end_offset; 623 int err = 0, ofs = 1; 624 bool allocated = false; 625 626 /* Get the page offset from the block offset(iblock) */ 627 pgofs = (pgoff_t)(iblock >> (PAGE_CACHE_SHIFT - blkbits)); 628 629 if (check_extent_cache(inode, pgofs, bh_result)) 630 goto out; 631 632 if (create) { | 615 unsigned int blkbits = inode->i_sb->s_blocksize_bits; 616 unsigned maxblocks = bh_result->b_size >> blkbits; 617 struct dnode_of_data dn; 618 int mode = create ? ALLOC_NODE : LOOKUP_NODE_RA; 619 pgoff_t pgofs, end_offset; 620 int err = 0, ofs = 1; 621 bool allocated = false; 622 623 /* Get the page offset from the block offset(iblock) */ 624 pgofs = (pgoff_t)(iblock >> (PAGE_CACHE_SHIFT - blkbits)); 625 626 if (check_extent_cache(inode, pgofs, bh_result)) 627 goto out; 628 629 if (create) { |
633 f2fs_balance_fs(sbi); 634 f2fs_lock_op(sbi); | 630 f2fs_balance_fs(F2FS_I_SB(inode)); 631 f2fs_lock_op(F2FS_I_SB(inode)); |
635 } 636 637 /* When reading holes, we need its node page */ 638 set_new_dnode(&dn, inode, NULL, NULL, 0); 639 err = get_dnode_of_data(&dn, pgofs, mode); 640 if (err) { 641 if (err == -ENOENT) 642 err = 0; --- 59 unchanged lines hidden (view full) --- 702 } 703sync_out: 704 if (allocated) 705 sync_inode_page(&dn); 706put_out: 707 f2fs_put_dnode(&dn); 708unlock_out: 709 if (create) | 632 } 633 634 /* When reading holes, we need its node page */ 635 set_new_dnode(&dn, inode, NULL, NULL, 0); 636 err = get_dnode_of_data(&dn, pgofs, mode); 637 if (err) { 638 if (err == -ENOENT) 639 err = 0; --- 59 unchanged lines hidden (view full) --- 699 } 700sync_out: 701 if (allocated) 702 sync_inode_page(&dn); 703put_out: 704 f2fs_put_dnode(&dn); 705unlock_out: 706 if (create) |
710 f2fs_unlock_op(sbi); | 707 f2fs_unlock_op(F2FS_I_SB(inode)); |
711out: 712 trace_f2fs_get_data_block(inode, iblock, bh_result, err); 713 return err; 714} 715 716static int get_data_block(struct inode *inode, sector_t iblock, 717 struct buffer_head *bh_result, int create) 718{ --- 80 unchanged lines hidden (view full) --- 799 f2fs_put_dnode(&dn); 800 return err; 801} 802 803static int f2fs_write_data_page(struct page *page, 804 struct writeback_control *wbc) 805{ 806 struct inode *inode = page->mapping->host; | 708out: 709 trace_f2fs_get_data_block(inode, iblock, bh_result, err); 710 return err; 711} 712 713static int get_data_block(struct inode *inode, sector_t iblock, 714 struct buffer_head *bh_result, int create) 715{ --- 80 unchanged lines hidden (view full) --- 796 f2fs_put_dnode(&dn); 797 return err; 798} 799 800static int f2fs_write_data_page(struct page *page, 801 struct writeback_control *wbc) 802{ 803 struct inode *inode = page->mapping->host; |
807 struct f2fs_sb_info *sbi = F2FS_SB(inode->i_sb); | 804 struct f2fs_sb_info *sbi = F2FS_I_SB(inode); |
808 loff_t i_size = i_size_read(inode); 809 const pgoff_t end_index = ((unsigned long long) i_size) 810 >> PAGE_CACHE_SHIFT; 811 unsigned offset = 0; 812 bool need_balance_fs = false; 813 int err = 0; 814 struct f2fs_io_info fio = { 815 .type = DATA, --- 25 unchanged lines hidden (view full) --- 841 err = do_write_data_page(page, &fio); 842 goto done; 843 } 844 845 /* we should bypass data pages to proceed the kworkder jobs */ 846 if (unlikely(f2fs_cp_error(sbi))) { 847 SetPageError(page); 848 unlock_page(page); | 805 loff_t i_size = i_size_read(inode); 806 const pgoff_t end_index = ((unsigned long long) i_size) 807 >> PAGE_CACHE_SHIFT; 808 unsigned offset = 0; 809 bool need_balance_fs = false; 810 int err = 0; 811 struct f2fs_io_info fio = { 812 .type = DATA, --- 25 unchanged lines hidden (view full) --- 838 err = do_write_data_page(page, &fio); 839 goto done; 840 } 841 842 /* we should bypass data pages to proceed the kworkder jobs */ 843 if (unlikely(f2fs_cp_error(sbi))) { 844 SetPageError(page); 845 unlock_page(page); |
849 return 0; | 846 goto out; |
850 } 851 852 if (!wbc->for_reclaim) 853 need_balance_fs = true; 854 else if (has_not_enough_free_secs(sbi, 0)) 855 goto redirty_out; 856 857 f2fs_lock_op(sbi); 858 if (f2fs_has_inline_data(inode) || f2fs_may_inline(inode)) 859 err = f2fs_write_inline_data(inode, page, offset); 860 else 861 err = do_write_data_page(page, &fio); 862 f2fs_unlock_op(sbi); 863done: 864 if (err && err != -ENOENT) 865 goto redirty_out; 866 867 clear_cold_data(page); 868out: | 847 } 848 849 if (!wbc->for_reclaim) 850 need_balance_fs = true; 851 else if (has_not_enough_free_secs(sbi, 0)) 852 goto redirty_out; 853 854 f2fs_lock_op(sbi); 855 if (f2fs_has_inline_data(inode) || f2fs_may_inline(inode)) 856 err = f2fs_write_inline_data(inode, page, offset); 857 else 858 err = do_write_data_page(page, &fio); 859 f2fs_unlock_op(sbi); 860done: 861 if (err && err != -ENOENT) 862 goto redirty_out; 863 864 clear_cold_data(page); 865out: |
869 inode_dec_dirty_dents(inode); | 866 inode_dec_dirty_pages(inode); |
870 unlock_page(page); 871 if (need_balance_fs) 872 f2fs_balance_fs(sbi); 873 if (wbc->for_reclaim) 874 f2fs_submit_merged_bio(sbi, DATA, WRITE); 875 return 0; 876 877redirty_out: --- 9 unchanged lines hidden (view full) --- 887 mapping_set_error(mapping, ret); 888 return ret; 889} 890 891static int f2fs_write_data_pages(struct address_space *mapping, 892 struct writeback_control *wbc) 893{ 894 struct inode *inode = mapping->host; | 867 unlock_page(page); 868 if (need_balance_fs) 869 f2fs_balance_fs(sbi); 870 if (wbc->for_reclaim) 871 f2fs_submit_merged_bio(sbi, DATA, WRITE); 872 return 0; 873 874redirty_out: --- 9 unchanged lines hidden (view full) --- 884 mapping_set_error(mapping, ret); 885 return ret; 886} 887 888static int f2fs_write_data_pages(struct address_space *mapping, 889 struct writeback_control *wbc) 890{ 891 struct inode *inode = mapping->host; |
895 struct f2fs_sb_info *sbi = F2FS_SB(inode->i_sb); | 892 struct f2fs_sb_info *sbi = F2FS_I_SB(inode); |
896 bool locked = false; 897 int ret; 898 long diff; 899 900 trace_f2fs_writepages(mapping->host, wbc, DATA); 901 902 /* deal with chardevs and other special file */ 903 if (!mapping->a_ops->writepage) 904 return 0; 905 906 if (S_ISDIR(inode->i_mode) && wbc->sync_mode == WB_SYNC_NONE && | 893 bool locked = false; 894 int ret; 895 long diff; 896 897 trace_f2fs_writepages(mapping->host, wbc, DATA); 898 899 /* deal with chardevs and other special file */ 900 if (!mapping->a_ops->writepage) 901 return 0; 902 903 if (S_ISDIR(inode->i_mode) && wbc->sync_mode == WB_SYNC_NONE && |
907 get_dirty_dents(inode) < nr_pages_to_skip(sbi, DATA) && | 904 get_dirty_pages(inode) < nr_pages_to_skip(sbi, DATA) && |
908 available_free_memory(sbi, DIRTY_DENTS)) 909 goto skip_write; 910 911 diff = nr_pages_to_write(sbi, DATA, wbc); 912 913 if (!S_ISDIR(inode->i_mode)) { 914 mutex_lock(&sbi->writepages); 915 locked = true; --- 5 unchanged lines hidden (view full) --- 921 f2fs_submit_merged_bio(sbi, DATA, WRITE); 922 923 remove_dirty_dir_inode(inode); 924 925 wbc->nr_to_write = max((long)0, wbc->nr_to_write - diff); 926 return ret; 927 928skip_write: | 905 available_free_memory(sbi, DIRTY_DENTS)) 906 goto skip_write; 907 908 diff = nr_pages_to_write(sbi, DATA, wbc); 909 910 if (!S_ISDIR(inode->i_mode)) { 911 mutex_lock(&sbi->writepages); 912 locked = true; --- 5 unchanged lines hidden (view full) --- 918 f2fs_submit_merged_bio(sbi, DATA, WRITE); 919 920 remove_dirty_dir_inode(inode); 921 922 wbc->nr_to_write = max((long)0, wbc->nr_to_write - diff); 923 return ret; 924 925skip_write: |
929 wbc->pages_skipped += get_dirty_dents(inode); | 926 wbc->pages_skipped += get_dirty_pages(inode); |
930 return 0; 931} 932 933static void f2fs_write_failed(struct address_space *mapping, loff_t to) 934{ 935 struct inode *inode = mapping->host; 936 937 if (to > inode->i_size) { 938 truncate_pagecache(inode, inode->i_size); 939 truncate_blocks(inode, inode->i_size, true); 940 } 941} 942 943static int f2fs_write_begin(struct file *file, struct address_space *mapping, 944 loff_t pos, unsigned len, unsigned flags, 945 struct page **pagep, void **fsdata) 946{ 947 struct inode *inode = mapping->host; | 927 return 0; 928} 929 930static void f2fs_write_failed(struct address_space *mapping, loff_t to) 931{ 932 struct inode *inode = mapping->host; 933 934 if (to > inode->i_size) { 935 truncate_pagecache(inode, inode->i_size); 936 truncate_blocks(inode, inode->i_size, true); 937 } 938} 939 940static int f2fs_write_begin(struct file *file, struct address_space *mapping, 941 loff_t pos, unsigned len, unsigned flags, 942 struct page **pagep, void **fsdata) 943{ 944 struct inode *inode = mapping->host; |
948 struct f2fs_sb_info *sbi = F2FS_SB(inode->i_sb); | 945 struct f2fs_sb_info *sbi = F2FS_I_SB(inode); |
949 struct page *page; 950 pgoff_t index = ((unsigned long long) pos) >> PAGE_CACHE_SHIFT; 951 struct dnode_of_data dn; 952 int err = 0; 953 954 trace_f2fs_write_begin(inode, pos, len, flags); 955 956 f2fs_balance_fs(sbi); --- 131 unchanged lines hidden (view full) --- 1088 /* Let buffer I/O handle the inline data case. */ 1089 if (f2fs_has_inline_data(inode)) 1090 return 0; 1091 1092 if (check_direct_IO(inode, rw, iter, offset)) 1093 return 0; 1094 1095 /* clear fsync mark to recover these blocks */ | 946 struct page *page; 947 pgoff_t index = ((unsigned long long) pos) >> PAGE_CACHE_SHIFT; 948 struct dnode_of_data dn; 949 int err = 0; 950 951 trace_f2fs_write_begin(inode, pos, len, flags); 952 953 f2fs_balance_fs(sbi); --- 131 unchanged lines hidden (view full) --- 1085 /* Let buffer I/O handle the inline data case. */ 1086 if (f2fs_has_inline_data(inode)) 1087 return 0; 1088 1089 if (check_direct_IO(inode, rw, iter, offset)) 1090 return 0; 1091 1092 /* clear fsync mark to recover these blocks */ |
1096 fsync_mark_clear(F2FS_SB(inode->i_sb), inode->i_ino); | 1093 fsync_mark_clear(F2FS_I_SB(inode), inode->i_ino); |
1097 1098 trace_f2fs_direct_IO_enter(inode, offset, count, rw); 1099 1100 err = blockdev_direct_IO(rw, iocb, inode, iter, offset, get_data_block); 1101 if (err < 0 && (rw & WRITE)) 1102 f2fs_write_failed(mapping, offset + count); 1103 1104 trace_f2fs_direct_IO_exit(inode, offset, count, rw, err); 1105 1106 return err; 1107} 1108 1109static void f2fs_invalidate_data_page(struct page *page, unsigned int offset, 1110 unsigned int length) 1111{ 1112 struct inode *inode = page->mapping->host; | 1094 1095 trace_f2fs_direct_IO_enter(inode, offset, count, rw); 1096 1097 err = blockdev_direct_IO(rw, iocb, inode, iter, offset, get_data_block); 1098 if (err < 0 && (rw & WRITE)) 1099 f2fs_write_failed(mapping, offset + count); 1100 1101 trace_f2fs_direct_IO_exit(inode, offset, count, rw, err); 1102 1103 return err; 1104} 1105 1106static void f2fs_invalidate_data_page(struct page *page, unsigned int offset, 1107 unsigned int length) 1108{ 1109 struct inode *inode = page->mapping->host; |
1110 1111 if (offset % PAGE_CACHE_SIZE || length != PAGE_CACHE_SIZE) 1112 return; 1113 |
|
1113 if (PageDirty(page)) | 1114 if (PageDirty(page)) |
1114 inode_dec_dirty_dents(inode); | 1115 inode_dec_dirty_pages(inode); |
1115 ClearPagePrivate(page); 1116} 1117 1118static int f2fs_release_data_page(struct page *page, gfp_t wait) 1119{ 1120 ClearPagePrivate(page); 1121 return 1; 1122} --- 5 unchanged lines hidden (view full) --- 1128 1129 trace_f2fs_set_page_dirty(page, DATA); 1130 1131 SetPageUptodate(page); 1132 mark_inode_dirty(inode); 1133 1134 if (!PageDirty(page)) { 1135 __set_page_dirty_nobuffers(page); | 1116 ClearPagePrivate(page); 1117} 1118 1119static int f2fs_release_data_page(struct page *page, gfp_t wait) 1120{ 1121 ClearPagePrivate(page); 1122 return 1; 1123} --- 5 unchanged lines hidden (view full) --- 1129 1130 trace_f2fs_set_page_dirty(page, DATA); 1131 1132 SetPageUptodate(page); 1133 mark_inode_dirty(inode); 1134 1135 if (!PageDirty(page)) { 1136 __set_page_dirty_nobuffers(page); |
1136 set_dirty_dir_page(inode, page); | 1137 update_dirty_page(inode, page); |
1137 return 1; 1138 } 1139 return 0; 1140} 1141 1142static sector_t f2fs_bmap(struct address_space *mapping, sector_t block) 1143{ 1144 struct inode *inode = mapping->host; --- 20 unchanged lines hidden --- | 1138 return 1; 1139 } 1140 return 0; 1141} 1142 1143static sector_t f2fs_bmap(struct address_space *mapping, sector_t block) 1144{ 1145 struct inode *inode = mapping->host; --- 20 unchanged lines hidden --- |