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 | /* |
