node.c (cfb271d485d0ec31eb92b51f4fbe54bf6542e8e6) | node.c (6bacf52fb58aeb3e89d9a62970b85a5570aa8ace) |
---|---|
1/* 2 * fs/f2fs/node.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 --- 736 unchanged lines hidden (view full) --- 745 default: 746 BUG(); 747 } 748 if (err < 0 && err != -ENOENT) 749 goto fail; 750 if (offset[1] == 0 && 751 rn->i.i_nid[offset[0] - NODE_DIR1_BLOCK]) { 752 lock_page(page); | 1/* 2 * fs/f2fs/node.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 --- 736 unchanged lines hidden (view full) --- 745 default: 746 BUG(); 747 } 748 if (err < 0 && err != -ENOENT) 749 goto fail; 750 if (offset[1] == 0 && 751 rn->i.i_nid[offset[0] - NODE_DIR1_BLOCK]) { 752 lock_page(page); |
753 if (page->mapping != node_mapping) { | 753 if (unlikely(page->mapping != node_mapping)) { |
754 f2fs_put_page(page, 1); 755 goto restart; 756 } 757 wait_on_page_writeback(page); 758 rn->i.i_nid[offset[0] - NODE_DIR1_BLOCK] = 0; 759 set_page_dirty(page); 760 unlock_page(page); 761 } --- 74 unchanged lines hidden (view full) --- 836 unsigned int ofs, struct page *ipage) 837{ 838 struct f2fs_sb_info *sbi = F2FS_SB(dn->inode->i_sb); 839 struct address_space *mapping = sbi->node_inode->i_mapping; 840 struct node_info old_ni, new_ni; 841 struct page *page; 842 int err; 843 | 754 f2fs_put_page(page, 1); 755 goto restart; 756 } 757 wait_on_page_writeback(page); 758 rn->i.i_nid[offset[0] - NODE_DIR1_BLOCK] = 0; 759 set_page_dirty(page); 760 unlock_page(page); 761 } --- 74 unchanged lines hidden (view full) --- 836 unsigned int ofs, struct page *ipage) 837{ 838 struct f2fs_sb_info *sbi = F2FS_SB(dn->inode->i_sb); 839 struct address_space *mapping = sbi->node_inode->i_mapping; 840 struct node_info old_ni, new_ni; 841 struct page *page; 842 int err; 843 |
844 if (is_inode_flag_set(F2FS_I(dn->inode), FI_NO_ALLOC)) | 844 if (unlikely(is_inode_flag_set(F2FS_I(dn->inode), FI_NO_ALLOC))) |
845 return ERR_PTR(-EPERM); 846 847 page = grab_cache_page(mapping, dn->nid); 848 if (!page) 849 return ERR_PTR(-ENOMEM); 850 | 845 return ERR_PTR(-EPERM); 846 847 page = grab_cache_page(mapping, dn->nid); 848 if (!page) 849 return ERR_PTR(-ENOMEM); 850 |
851 if (!inc_valid_node_count(sbi, dn->inode)) { | 851 if (unlikely(!inc_valid_node_count(sbi, dn->inode))) { |
852 err = -ENOSPC; 853 goto fail; 854 } 855 856 get_node_info(sbi, dn->nid, &old_ni); 857 858 /* Reinitialize old_ni with new node page */ 859 f2fs_bug_on(old_ni.blk_addr != NULL_ADDR); --- 33 unchanged lines hidden (view full) --- 893 */ 894static int read_node_page(struct page *page, int rw) 895{ 896 struct f2fs_sb_info *sbi = F2FS_SB(page->mapping->host->i_sb); 897 struct node_info ni; 898 899 get_node_info(sbi, page->index, &ni); 900 | 852 err = -ENOSPC; 853 goto fail; 854 } 855 856 get_node_info(sbi, dn->nid, &old_ni); 857 858 /* Reinitialize old_ni with new node page */ 859 f2fs_bug_on(old_ni.blk_addr != NULL_ADDR); --- 33 unchanged lines hidden (view full) --- 893 */ 894static int read_node_page(struct page *page, int rw) 895{ 896 struct f2fs_sb_info *sbi = F2FS_SB(page->mapping->host->i_sb); 897 struct node_info ni; 898 899 get_node_info(sbi, page->index, &ni); 900 |
901 if (ni.blk_addr == NULL_ADDR) { | 901 if (unlikely(ni.blk_addr == NULL_ADDR)) { |
902 f2fs_put_page(page, 1); 903 return -ENOENT; 904 } 905 906 if (PageUptodate(page)) 907 return LOCKED_PAGE; 908 909 return f2fs_submit_page_bio(sbi, page, ni.blk_addr, rw); --- 38 unchanged lines hidden (view full) --- 948 949 err = read_node_page(page, READ_SYNC); 950 if (err < 0) 951 return ERR_PTR(err); 952 else if (err == LOCKED_PAGE) 953 goto got_it; 954 955 lock_page(page); | 902 f2fs_put_page(page, 1); 903 return -ENOENT; 904 } 905 906 if (PageUptodate(page)) 907 return LOCKED_PAGE; 908 909 return f2fs_submit_page_bio(sbi, page, ni.blk_addr, rw); --- 38 unchanged lines hidden (view full) --- 948 949 err = read_node_page(page, READ_SYNC); 950 if (err < 0) 951 return ERR_PTR(err); 952 else if (err == LOCKED_PAGE) 953 goto got_it; 954 955 lock_page(page); |
956 if (!PageUptodate(page)) { | 956 if (unlikely(!PageUptodate(page))) { |
957 f2fs_put_page(page, 1); 958 return ERR_PTR(-EIO); 959 } | 957 f2fs_put_page(page, 1); 958 return ERR_PTR(-EIO); 959 } |
960 if (page->mapping != mapping) { | 960 if (unlikely(page->mapping != mapping)) { |
961 f2fs_put_page(page, 1); 962 goto repeat; 963 } 964got_it: 965 f2fs_bug_on(nid != nid_of_node(page)); 966 mark_page_accessed(page); 967 return page; 968} --- 36 unchanged lines hidden (view full) --- 1005 if (!nid) 1006 continue; 1007 ra_node_page(sbi, nid); 1008 } 1009 1010 blk_finish_plug(&plug); 1011 1012 lock_page(page); | 961 f2fs_put_page(page, 1); 962 goto repeat; 963 } 964got_it: 965 f2fs_bug_on(nid != nid_of_node(page)); 966 mark_page_accessed(page); 967 return page; 968} --- 36 unchanged lines hidden (view full) --- 1005 if (!nid) 1006 continue; 1007 ra_node_page(sbi, nid); 1008 } 1009 1010 blk_finish_plug(&plug); 1011 1012 lock_page(page); |
1013 if (page->mapping != mapping) { | 1013 if (unlikely(page->mapping != mapping)) { |
1014 f2fs_put_page(page, 1); 1015 goto repeat; 1016 } 1017page_hit: | 1014 f2fs_put_page(page, 1); 1015 goto repeat; 1016 } 1017page_hit: |
1018 if (!PageUptodate(page)) { | 1018 if (unlikely(!PageUptodate(page))) { |
1019 f2fs_put_page(page, 1); 1020 return ERR_PTR(-EIO); 1021 } 1022 mark_page_accessed(page); 1023 return page; 1024} 1025 1026void sync_inode_page(struct dnode_of_data *dn) --- 141 unchanged lines hidden (view full) --- 1168 if (TestClearPageError(page)) 1169 ret = -EIO; 1170 } 1171 } 1172 pagevec_release(&pvec); 1173 cond_resched(); 1174 } 1175 | 1019 f2fs_put_page(page, 1); 1020 return ERR_PTR(-EIO); 1021 } 1022 mark_page_accessed(page); 1023 return page; 1024} 1025 1026void sync_inode_page(struct dnode_of_data *dn) --- 141 unchanged lines hidden (view full) --- 1168 if (TestClearPageError(page)) 1169 ret = -EIO; 1170 } 1171 } 1172 pagevec_release(&pvec); 1173 cond_resched(); 1174 } 1175 |
1176 if (test_and_clear_bit(AS_ENOSPC, &mapping->flags)) | 1176 if (unlikely(test_and_clear_bit(AS_ENOSPC, &mapping->flags))) |
1177 ret2 = -ENOSPC; | 1177 ret2 = -ENOSPC; |
1178 if (test_and_clear_bit(AS_EIO, &mapping->flags)) | 1178 if (unlikely(test_and_clear_bit(AS_EIO, &mapping->flags))) |
1179 ret2 = -EIO; 1180 if (!ret) 1181 ret = ret2; 1182 return ret; 1183} 1184 1185static int f2fs_write_node_page(struct page *page, 1186 struct writeback_control *wbc) --- 10 unchanged lines hidden (view full) --- 1197 1198 /* get old block addr of this node page */ 1199 nid = nid_of_node(page); 1200 f2fs_bug_on(page->index != nid); 1201 1202 get_node_info(sbi, nid, &ni); 1203 1204 /* This page is already truncated */ | 1179 ret2 = -EIO; 1180 if (!ret) 1181 ret = ret2; 1182 return ret; 1183} 1184 1185static int f2fs_write_node_page(struct page *page, 1186 struct writeback_control *wbc) --- 10 unchanged lines hidden (view full) --- 1197 1198 /* get old block addr of this node page */ 1199 nid = nid_of_node(page); 1200 f2fs_bug_on(page->index != nid); 1201 1202 get_node_info(sbi, nid, &ni); 1203 1204 /* This page is already truncated */ |
1205 if (ni.blk_addr == NULL_ADDR) { | 1205 if (unlikely(ni.blk_addr == NULL_ADDR)) { |
1206 dec_page_count(sbi, F2FS_DIRTY_NODES); 1207 unlock_page(page); 1208 return 0; 1209 } 1210 1211 if (wbc->for_reclaim) 1212 goto redirty_out; 1213 --- 408 unchanged lines hidden (view full) --- 1622 /* read ahead node pages */ 1623 err = ra_sum_pages(sbi, &page_list, addr, nrpages); 1624 if (err) 1625 return err; 1626 1627 list_for_each_entry_safe(page, tmp, &page_list, lru) { 1628 1629 lock_page(page); | 1206 dec_page_count(sbi, F2FS_DIRTY_NODES); 1207 unlock_page(page); 1208 return 0; 1209 } 1210 1211 if (wbc->for_reclaim) 1212 goto redirty_out; 1213 --- 408 unchanged lines hidden (view full) --- 1622 /* read ahead node pages */ 1623 err = ra_sum_pages(sbi, &page_list, addr, nrpages); 1624 if (err) 1625 return err; 1626 1627 list_for_each_entry_safe(page, tmp, &page_list, lru) { 1628 1629 lock_page(page); |
1630 if(PageUptodate(page)) { | 1630 if (unlikely(!PageUptodate(page))) { 1631 err = -EIO; 1632 } else { |
1631 rn = F2FS_NODE(page); 1632 sum_entry->nid = rn->footer.nid; 1633 sum_entry->version = 0; 1634 sum_entry->ofs_in_node = 0; 1635 sum_entry++; | 1633 rn = F2FS_NODE(page); 1634 sum_entry->nid = rn->footer.nid; 1635 sum_entry->version = 0; 1636 sum_entry->ofs_in_node = 0; 1637 sum_entry++; |
1636 } else { 1637 err = -EIO; | |
1638 } 1639 1640 list_del(&page->lru); 1641 unlock_page(page); 1642 __free_pages(page, 0); 1643 } 1644 } 1645 return err; --- 255 unchanged lines hidden --- | 1638 } 1639 1640 list_del(&page->lru); 1641 unlock_page(page); 1642 __free_pages(page, 0); 1643 } 1644 } 1645 return err; --- 255 unchanged lines hidden --- |