diff options
author | Tao Ma <tao.ma@oracle.com> | 2009-10-15 05:10:48 +0200 |
---|---|---|
committer | Joel Becker <joel.becker@oracle.com> | 2009-10-29 06:44:19 +0100 |
commit | 87f4b1bb98696e6cf84f57df7de41f28c2a7dbeb (patch) | |
tree | edfc70e8681ee3ff98d5a7eb181edf4554deb0f4 /fs/ocfs2/refcounttree.c | |
parent | ocfs2: Return -EINVAL when a device is not ocfs2. (diff) | |
download | linux-87f4b1bb98696e6cf84f57df7de41f28c2a7dbeb.tar.xz linux-87f4b1bb98696e6cf84f57df7de41f28c2a7dbeb.zip |
ocfs2: Move ocfs2_complete_reflink to the right place.
As its name ocfs2_complete_reflink indicates, it should
be called after all the work for reflink is done, so
it really should be called after we reflink xattr
successfully.
Signed-off-by: Tao Ma <tao.ma@oracle.com>
Signed-off-by: Joel Becker <joel.becker@oracle.com>
Tested-by: Tristan Ye <tristan.ye@oracle.com>
Diffstat (limited to 'fs/ocfs2/refcounttree.c')
-rw-r--r-- | fs/ocfs2/refcounttree.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/fs/ocfs2/refcounttree.c b/fs/ocfs2/refcounttree.c index 60287fc56bcb..9d439b277304 100644 --- a/fs/ocfs2/refcounttree.c +++ b/fs/ocfs2/refcounttree.c @@ -4013,10 +4013,6 @@ static int ocfs2_create_reflink_node(struct inode *s_inode, goto out_unlock_refcount; } - ret = ocfs2_complete_reflink(s_inode, s_bh, t_inode, t_bh, preserve); - if (ret) - mlog_errno(ret); - out_unlock_refcount: ocfs2_unlock_refcount_tree(osb, ref_tree, 1); brelse(ref_root_bh); @@ -4068,9 +4064,17 @@ static int __ocfs2_reflink(struct dentry *old_dentry, ret = ocfs2_reflink_xattrs(inode, old_bh, new_inode, new_bh, preserve); - if (ret) + if (ret) { mlog_errno(ret); + goto inode_unlock; + } } + + ret = ocfs2_complete_reflink(inode, old_bh, + new_inode, new_bh, preserve); + if (ret) + mlog_errno(ret); + inode_unlock: ocfs2_inode_unlock(new_inode, 1); brelse(new_bh); |