ocfs2: Move ocfs2_complete_reflink to the right place.
authorTao Ma <tao.ma@oracle.com>
Thu, 15 Oct 2009 03:10:48 +0000 (11:10 +0800)
committerJoel Becker <joel.becker@oracle.com>
Thu, 29 Oct 2009 05:44:19 +0000 (22:44 -0700)
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>
fs/ocfs2/refcounttree.c

index 60287fc..9d439b2 100644 (file)
@@ -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);