diff options
| -rw-r--r-- | fs/nfs/mount_clnt.c | 28 |
1 files changed, 26 insertions, 2 deletions
diff --git a/fs/nfs/mount_clnt.c b/fs/nfs/mount_clnt.c index 961dc5243277..8afd9f7e7a97 100644 --- a/fs/nfs/mount_clnt.c +++ b/fs/nfs/mount_clnt.c | |||
| @@ -66,7 +66,7 @@ int nfs_mount(struct sockaddr *addr, size_t len, char *hostname, char *path, | |||
| 66 | 66 | ||
| 67 | mnt_clnt = rpc_create(&args); | 67 | mnt_clnt = rpc_create(&args); |
| 68 | if (IS_ERR(mnt_clnt)) | 68 | if (IS_ERR(mnt_clnt)) |
| 69 | return PTR_ERR(mnt_clnt); | 69 | goto out_clnt_err; |
| 70 | 70 | ||
| 71 | if (version == NFS_MNT3_VERSION) | 71 | if (version == NFS_MNT3_VERSION) |
| 72 | msg.rpc_proc = &mnt_clnt->cl_procinfo[MOUNTPROC3_MNT]; | 72 | msg.rpc_proc = &mnt_clnt->cl_procinfo[MOUNTPROC3_MNT]; |
| @@ -75,7 +75,31 @@ int nfs_mount(struct sockaddr *addr, size_t len, char *hostname, char *path, | |||
| 75 | 75 | ||
| 76 | status = rpc_call_sync(mnt_clnt, &msg, 0); | 76 | status = rpc_call_sync(mnt_clnt, &msg, 0); |
| 77 | rpc_shutdown_client(mnt_clnt); | 77 | rpc_shutdown_client(mnt_clnt); |
| 78 | return status < 0? status : (result.status? -EACCES : 0); | 78 | |
| 79 | if (status < 0) | ||
| 80 | goto out_call_err; | ||
| 81 | if (result.status != 0) | ||
| 82 | goto out_mnt_err; | ||
| 83 | |||
| 84 | dprintk("NFS: MNT request succeeded\n"); | ||
| 85 | status = 0; | ||
| 86 | |||
| 87 | out: | ||
| 88 | return status; | ||
| 89 | |||
| 90 | out_clnt_err: | ||
| 91 | status = PTR_ERR(mnt_clnt); | ||
| 92 | dprintk("NFS: failed to create RPC client, status=%d\n", status); | ||
| 93 | goto out; | ||
| 94 | |||
| 95 | out_call_err: | ||
| 96 | dprintk("NFS: failed to start MNT request, status=%d\n", status); | ||
| 97 | goto out; | ||
| 98 | |||
| 99 | out_mnt_err: | ||
| 100 | dprintk("NFS: MNT server returned result %d\n", result.status); | ||
| 101 | status = -EACCES; | ||
| 102 | goto out; | ||
| 79 | } | 103 | } |
| 80 | 104 | ||
| 81 | /* | 105 | /* |
