diff options
Diffstat (limited to 'net/sunrpc/rpc_pipe.c')
-rw-r--r-- | net/sunrpc/rpc_pipe.c | 58 |
1 files changed, 3 insertions, 55 deletions
diff --git a/net/sunrpc/rpc_pipe.c b/net/sunrpc/rpc_pipe.c index 6d152f69587e..1613d858ba38 100644 --- a/net/sunrpc/rpc_pipe.c +++ b/net/sunrpc/rpc_pipe.c | |||
@@ -443,42 +443,6 @@ static const struct dentry_operations rpc_dentry_operations = { | |||
443 | .d_delete = rpc_delete_dentry, | 443 | .d_delete = rpc_delete_dentry, |
444 | }; | 444 | }; |
445 | 445 | ||
446 | static int __rpc_lookup_path(const char *pathname, unsigned flags, | ||
447 | struct nameidata *nd) | ||
448 | { | ||
449 | struct vfsmount *mnt; | ||
450 | |||
451 | if (pathname[0] == '\0') | ||
452 | return -ENOENT; | ||
453 | |||
454 | mnt = rpc_get_mount(); | ||
455 | if (IS_ERR(mnt)) { | ||
456 | printk(KERN_WARNING "%s: %s failed to mount " | ||
457 | "pseudofilesystem \n", __FILE__, __func__); | ||
458 | return PTR_ERR(mnt); | ||
459 | } | ||
460 | |||
461 | if (vfs_path_lookup(mnt->mnt_root, mnt, pathname, flags, nd)) { | ||
462 | printk(KERN_WARNING "%s: %s failed to find path %s\n", | ||
463 | __FILE__, __func__, pathname); | ||
464 | rpc_put_mount(); | ||
465 | return -ENOENT; | ||
466 | } | ||
467 | return 0; | ||
468 | } | ||
469 | |||
470 | static int rpc_lookup_parent(const char *pathname, struct nameidata *nd) | ||
471 | { | ||
472 | return __rpc_lookup_path(pathname, LOOKUP_PARENT, nd); | ||
473 | } | ||
474 | |||
475 | static void | ||
476 | rpc_release_path(struct nameidata *nd) | ||
477 | { | ||
478 | path_put(&nd->path); | ||
479 | rpc_put_mount(); | ||
480 | } | ||
481 | |||
482 | static struct inode * | 446 | static struct inode * |
483 | rpc_get_inode(struct super_block *sb, umode_t mode) | 447 | rpc_get_inode(struct super_block *sb, umode_t mode) |
484 | { | 448 | { |
@@ -889,27 +853,11 @@ EXPORT_SYMBOL_GPL(rpc_unlink); | |||
889 | * information about the client, together with any "pipes" that may | 853 | * information about the client, together with any "pipes" that may |
890 | * later be created using rpc_mkpipe(). | 854 | * later be created using rpc_mkpipe(). |
891 | */ | 855 | */ |
892 | struct dentry *rpc_create_client_dir(const char *path, | 856 | struct dentry *rpc_create_client_dir(struct dentry *dentry, |
857 | struct qstr *name, | ||
893 | struct rpc_clnt *rpc_client) | 858 | struct rpc_clnt *rpc_client) |
894 | { | 859 | { |
895 | struct nameidata nd; | 860 | return rpc_mkdir_populate(dentry, name, S_IRUGO | S_IXUGO, rpc_client); |
896 | struct dentry *ret; | ||
897 | struct inode *dir; | ||
898 | |||
899 | ret = ERR_PTR(rpc_lookup_parent(path, &nd)); | ||
900 | if (IS_ERR(ret)) | ||
901 | goto out_err; | ||
902 | dir = nd.path.dentry->d_inode; | ||
903 | |||
904 | ret = rpc_mkdir_populate(nd.path.dentry, &nd.last, | ||
905 | S_IRUGO | S_IXUGO, rpc_client); | ||
906 | rpc_release_path(&nd); | ||
907 | if (!IS_ERR(ret)) | ||
908 | return ret; | ||
909 | out_err: | ||
910 | printk(KERN_WARNING "%s: %s() failed to create directory %s (errno = %ld)\n", | ||
911 | __FILE__, __func__, path, PTR_ERR(ret)); | ||
912 | return ret; | ||
913 | } | 861 | } |
914 | 862 | ||
915 | /* | 863 | /* |