ocfs2: don't pass handle to ocfs2_meta_lock() in ocfs2_mknod()
authorMark Fasheh <mark.fasheh@oracle.com>
Thu, 5 Oct 2006 23:04:17 +0000 (16:04 -0700)
committerMark Fasheh <mark.fasheh@oracle.com>
Sat, 2 Dec 2006 02:27:12 +0000 (18:27 -0800)
Take and drop the locks directly.

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

index a57b751..702f0c3 100644 (file)
@@ -333,6 +333,13 @@ static int ocfs2_mknod(struct inode *dir,
        /* get our super block */
        osb = OCFS2_SB(dir->i_sb);
 
+       status = ocfs2_meta_lock(dir, NULL, &parent_fe_bh, 1);
+       if (status < 0) {
+               if (status != -ENOENT)
+                       mlog_errno(status);
+               return status;
+       }
+
        handle = ocfs2_alloc_handle(osb);
        if (handle == NULL) {
                status = -ENOMEM;
@@ -340,13 +347,6 @@ static int ocfs2_mknod(struct inode *dir,
                goto leave;
        }
 
-       status = ocfs2_meta_lock(dir, handle, &parent_fe_bh, 1);
-       if (status < 0) {
-               if (status != -ENOENT)
-                       mlog_errno(status);
-               goto leave;
-       }
-
        if (S_ISDIR(mode) && (dir->i_nlink >= OCFS2_LINK_MAX)) {
                status = -EMLINK;
                goto leave;
@@ -455,6 +455,8 @@ leave:
        if (handle)
                ocfs2_commit_trans(handle);
 
+       ocfs2_meta_unlock(dir, 1);
+
        if (status == -ENOSPC)
                mlog(0, "Disk is full\n");