NFS: Return error code from nfs_callback_up() to user space
If the kernel cannot start the NFSv4 callback service during a mount request, it returns -ENOMEM to user space, resulting in this message: mount.nfs4: Cannot allocate memory Adjust nfs_alloc_client() and nfs_get_client() to pass NFSv4 callback start-up errors back to user space so a less mysterious error message can be displayed by the mount command. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
parent
c381ad2cf2
commit
a21bdd9b96
@ -114,6 +114,7 @@ static struct nfs_client *nfs_alloc_client(const struct nfs_client_initdata *cl_
|
||||
{
|
||||
struct nfs_client *clp;
|
||||
struct rpc_cred *cred;
|
||||
int err = -ENOMEM;
|
||||
|
||||
if ((clp = kzalloc(sizeof(*clp), GFP_KERNEL)) == NULL)
|
||||
goto error_0;
|
||||
@ -121,7 +122,8 @@ static struct nfs_client *nfs_alloc_client(const struct nfs_client_initdata *cl_
|
||||
clp->rpc_ops = cl_init->rpc_ops;
|
||||
|
||||
if (cl_init->rpc_ops->version == 4) {
|
||||
if (nfs_callback_up() < 0)
|
||||
err = nfs_callback_up();
|
||||
if (err < 0)
|
||||
goto error_2;
|
||||
__set_bit(NFS_CS_CALLBACK, &clp->cl_res_state);
|
||||
}
|
||||
@ -133,6 +135,7 @@ static struct nfs_client *nfs_alloc_client(const struct nfs_client_initdata *cl_
|
||||
clp->cl_addrlen = cl_init->addrlen;
|
||||
|
||||
if (cl_init->hostname) {
|
||||
err = -ENOMEM;
|
||||
clp->cl_hostname = kstrdup(cl_init->hostname, GFP_KERNEL);
|
||||
if (!clp->cl_hostname)
|
||||
goto error_3;
|
||||
@ -165,7 +168,7 @@ static struct nfs_client *nfs_alloc_client(const struct nfs_client_initdata *cl_
|
||||
error_2:
|
||||
kfree(clp);
|
||||
error_0:
|
||||
return NULL;
|
||||
return ERR_PTR(err);
|
||||
}
|
||||
|
||||
static void nfs4_shutdown_client(struct nfs_client *clp)
|
||||
@ -456,9 +459,10 @@ static struct nfs_client *nfs_get_client(const struct nfs_client_initdata *cl_in
|
||||
spin_unlock(&nfs_client_lock);
|
||||
|
||||
new = nfs_alloc_client(cl_init);
|
||||
} while (new);
|
||||
} while (!IS_ERR(new));
|
||||
|
||||
return ERR_PTR(-ENOMEM);
|
||||
dprintk("--> nfs_get_client() = %ld [failed]\n", PTR_ERR(new));
|
||||
return new;
|
||||
|
||||
/* install a new client and return with it unready */
|
||||
install_client:
|
||||
|
Loading…
Reference in New Issue
Block a user