Whamcloud - gitweb
Get the directory inode semaphore, just to be copasetic with VFS locking rules
authoradilger <adilger>
Wed, 4 Sep 2002 19:38:47 +0000 (19:38 +0000)
committeradilger <adilger>
Wed, 4 Sep 2002 19:38:47 +0000 (19:38 +0000)
(we don't use this for anything other than fs-init, so it isn't a big deal).

lustre/lib/simple.c

index e7680ce..a80edd2 100644 (file)
@@ -81,25 +81,27 @@ void pop_ctxt(struct obd_run_ctxt *saved)
 struct dentry *simple_mkdir(struct dentry *dir, char *name, int mode)
 {
         struct dentry *dchild;
-        int err;
+        int err = 0;
         ENTRY;
 
         ASSERT_KERNEL_CTXT("kernel doing mkdir outside kernel context\n");
         CDEBUG(D_INODE, "creating directory %*s\n", strlen(name), name);
+        down(&dir->i_sem);
         dchild = lookup_one_len(name, dir, strlen(name));
         if (IS_ERR(dchild))
-                RETURN(dchild);
+                GOTO(out, PTR_ERR(dchild));
 
         if (dchild->d_inode) {
                 if (!S_ISDIR(dchild->d_inode->i_mode))
                         GOTO(out, err = -ENOTDIR);
 
-                RETURN(dchild);
+                GOTO(out, dchild);
         }
 
         err = vfs_mkdir(dir->d_inode, dchild, mode);
         EXIT;
 out:
+        up(&dir->i_sem);
         if (err) {
                 dput(dchild);
                 RETURN(ERR_PTR(err));