]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
kclient: create fall back to mknod if no nameidata (as with nfs-kernel-server)
authorSage Weil <sage@newdream.net>
Wed, 7 May 2008 20:47:37 +0000 (13:47 -0700)
committerSage Weil <sage@newdream.net>
Wed, 7 May 2008 20:47:37 +0000 (13:47 -0700)
src/kernel/dir.c

index 9aae39bba728013dc937fa3deb410d1b0239a778..23d017ce60e1abfb61b2cad6343eadc711a88aec 100644 (file)
@@ -307,17 +307,6 @@ static struct dentry *ceph_lookup(struct inode *dir, struct dentry *dentry,
        return ceph_do_lookup(dir->i_sb, dentry, CEPH_STAT_MASK_INODE_ALL, 0);
 }
 
-static int ceph_create(struct inode *dir, struct dentry *dentry, int mode,
-                          struct nameidata *nd)
-{
-       int err;
-       dout(5, "create in dir %p dentry %p name '%.*s'\n",
-            dir, dentry, dentry->d_name.len, dentry->d_name.name);
-       BUG_ON((nd->flags & LOOKUP_OPEN) == 0);
-       err = ceph_lookup_open(dir, dentry, nd, mode);
-       return err;
-}
-
 static int ceph_mknod(struct inode *dir, struct dentry *dentry,
                          int mode, dev_t rdev)
 {
@@ -353,6 +342,23 @@ static int ceph_mknod(struct inode *dir, struct dentry *dentry,
        return err;
 }
 
+static int ceph_create(struct inode *dir, struct dentry *dentry, int mode,
+                          struct nameidata *nd)
+{
+       int err;
+
+       dout(5, "create in dir %p dentry %p name '%.*s'\n",
+            dir, dentry, dentry->d_name.len, dentry->d_name.name);
+       if (nd) {
+               BUG_ON((nd->flags & LOOKUP_OPEN) == 0);
+               err = ceph_lookup_open(dir, dentry, nd, mode);
+               return err;
+       }
+
+       /* fall back to mknod */
+       return ceph_mknod(dir, dentry, mode, 0);
+}
+
 static int ceph_symlink(struct inode *dir, struct dentry *dentry,
                            const char *dest)
 {