ocfs2: don't pass handle to ocfs2_meta_lock in ocfs2_symlink()
authorMark Fasheh <mark.fasheh@oracle.com>
Fri, 6 Oct 2006 18:54:33 +0000 (11:54 -0700)
committerMark Fasheh <mark.fasheh@oracle.com>
Sat, 2 Dec 2006 02:27:22 +0000 (18:27 -0800)
Take and drop the locks directly.

Signed-off-by: Mark Fasheh <mark.fasheh@oracle.com>
fs/ocfs2/namei.c

index f64cff0..7e9da94 100644 (file)
@@ -1603,19 +1603,12 @@ static int ocfs2_symlink(struct inode *dir,
 
        credits = ocfs2_calc_symlink_credits(sb);
 
-       handle = ocfs2_alloc_handle(osb);
-       if (handle == NULL) {
-               status = -ENOMEM;
-               mlog_errno(status);
-               goto bail;
-       }
-
        /* lock the parent directory */
-       status = ocfs2_meta_lock(dir, handle, &parent_fe_bh, 1);
+       status = ocfs2_meta_lock(dir, NULL, &parent_fe_bh, 1);
        if (status < 0) {
                if (status != -ENOENT)
                        mlog_errno(status);
-               goto bail;
+               return status;
        }
 
        dirfe = (struct ocfs2_dinode *) parent_fe_bh->b_data;
@@ -1638,6 +1631,13 @@ static int ocfs2_symlink(struct inode *dir,
                goto bail;
        }
 
+       handle = ocfs2_alloc_handle(osb);
+       if (handle == NULL) {
+               status = -ENOMEM;
+               mlog_errno(status);
+               goto bail;
+       }
+
        status = ocfs2_reserve_new_inode(osb, handle, &inode_ac);
        if (status < 0) {
                if (status != -ENOSPC)
@@ -1734,6 +1734,9 @@ static int ocfs2_symlink(struct inode *dir,
 bail:
        if (handle)
                ocfs2_commit_trans(handle);
+
+       ocfs2_meta_unlock(dir, 1);
+
        if (new_fe_bh)
                brelse(new_fe_bh);
        if (parent_fe_bh)