aboutsummaryrefslogtreecommitdiffstats
path: root/fs/f2fs/node.c
diff options
context:
space:
mode:
authorJaegeuk Kim <jaegeuk.kim@samsung.com>2013-08-14 07:40:06 -0400
committerJaegeuk Kim <jaegeuk.kim@samsung.com>2013-08-26 07:15:06 -0400
commit4f16fb0f9be3f5f9d1254ff6d7bf54b23fb65f4a (patch)
tree434b1c8f4f4c8e2cc3d7dc97bbd38a213d23d3b1 /fs/f2fs/node.c
parentdd9cfe236f95bbda9ceb5a4ca419b9fb574c95f9 (diff)
f2fs: add the truncate_xattr_node function
The truncate_xattr_node function will be used by inline xattr. Signed-off-by: Jaegeuk Kim <jaegeuk.kim@samsung.com>
Diffstat (limited to 'fs/f2fs/node.c')
-rw-r--r--fs/f2fs/node.c39
1 files changed, 28 insertions, 11 deletions
diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index f0e733b21b2a..2a464a76602d 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -772,6 +772,29 @@ fail:
772 return err > 0 ? 0 : err; 772 return err > 0 ? 0 : err;
773} 773}
774 774
775int truncate_xattr_node(struct inode *inode, struct page *page)
776{
777 struct f2fs_sb_info *sbi = F2FS_SB(inode->i_sb);
778 nid_t nid = F2FS_I(inode)->i_xattr_nid;
779 struct dnode_of_data dn;
780 struct page *npage;
781
782 if (!nid)
783 return 0;
784
785 npage = get_node_page(sbi, nid);
786 if (IS_ERR(npage))
787 return PTR_ERR(npage);
788
789 F2FS_I(inode)->i_xattr_nid = 0;
790 set_new_dnode(&dn, inode, page, npage, nid);
791
792 if (page)
793 dn.inode_page_locked = 1;
794 truncate_node(&dn);
795 return 0;
796}
797
775/* 798/*
776 * Caller should grab and release a mutex by calling mutex_lock_op() and 799 * Caller should grab and release a mutex by calling mutex_lock_op() and
777 * mutex_unlock_op(). 800 * mutex_unlock_op().
@@ -782,22 +805,16 @@ int remove_inode_page(struct inode *inode)
782 struct page *page; 805 struct page *page;
783 nid_t ino = inode->i_ino; 806 nid_t ino = inode->i_ino;
784 struct dnode_of_data dn; 807 struct dnode_of_data dn;
808 int err;
785 809
786 page = get_node_page(sbi, ino); 810 page = get_node_page(sbi, ino);
787 if (IS_ERR(page)) 811 if (IS_ERR(page))
788 return PTR_ERR(page); 812 return PTR_ERR(page);
789 813
790 if (F2FS_I(inode)->i_xattr_nid) { 814 err = truncate_xattr_node(inode, page);
791 nid_t nid = F2FS_I(inode)->i_xattr_nid; 815 if (err) {
792 struct page *npage = get_node_page(sbi, nid); 816 f2fs_put_page(page, 1);
793 817 return err;
794 if (IS_ERR(npage))
795 return PTR_ERR(npage);
796
797 F2FS_I(inode)->i_xattr_nid = 0;
798 set_new_dnode(&dn, inode, page, npage, nid);
799 dn.inode_page_locked = 1;
800 truncate_node(&dn);
801 } 818 }
802 819
803 /* 0 is possible, after f2fs_new_inode() is failed */ 820 /* 0 is possible, after f2fs_new_inode() is failed */