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 ---