btrfs: fix wrong reservation when doing delayed inode operations
[linux-2.6.git] / fs / nfsctl.c
index d3854d9..124e8fc 100644 (file)
 
 static struct file *do_open(char *name, int flags)
 {
-       struct nameidata nd;
        struct vfsmount *mnt;
-       int error;
+       struct file *file;
 
        mnt = do_kern_mount("nfsd", 0, "nfsd", NULL);
        if (IS_ERR(mnt))
                return (struct file *)mnt;
 
-       error = vfs_path_lookup(mnt->mnt_root, mnt, name, 0, &nd);
-       mntput(mnt);    /* drop do_kern_mount reference */
-       if (error)
-               return ERR_PTR(error);
-
-       if (flags == O_RDWR)
-               error = may_open(&nd.path, MAY_READ|MAY_WRITE,
-                                          FMODE_READ|FMODE_WRITE);
-       else
-               error = may_open(&nd.path, MAY_WRITE, FMODE_WRITE);
+       file = file_open_root(mnt->mnt_root, mnt, name, flags);
 
-       if (!error)
-               return dentry_open(nd.path.dentry, nd.path.mnt, flags,
-                                  current_cred());
-
-       path_put(&nd.path);
-       return ERR_PTR(error);
+       mntput(mnt);    /* drop do_kern_mount reference */
+       return file;
 }
 
 static struct {