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 nfs_client *clp;
|
||||||
struct rpc_cred *cred;
|
struct rpc_cred *cred;
|
||||||
|
int err = -ENOMEM;
|
||||||
|
|
||||||
if ((clp = kzalloc(sizeof(*clp), GFP_KERNEL)) == NULL)
|
if ((clp = kzalloc(sizeof(*clp), GFP_KERNEL)) == NULL)
|
||||||
goto error_0;
|
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;
|
clp->rpc_ops = cl_init->rpc_ops;
|
||||||
|
|
||||||
if (cl_init->rpc_ops->version == 4) {
|
if (cl_init->rpc_ops->version == 4) {
|
||||||
if (nfs_callback_up() < 0)
|
err = nfs_callback_up();
|
||||||
|
if (err < 0)
|
||||||
goto error_2;
|
goto error_2;
|
||||||
__set_bit(NFS_CS_CALLBACK, &clp->cl_res_state);
|
__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;
|
clp->cl_addrlen = cl_init->addrlen;
|
||||||
|
|
||||||
if (cl_init->hostname) {
|
if (cl_init->hostname) {
|
||||||
|
err = -ENOMEM;
|
||||||
clp->cl_hostname = kstrdup(cl_init->hostname, GFP_KERNEL);
|
clp->cl_hostname = kstrdup(cl_init->hostname, GFP_KERNEL);
|
||||||
if (!clp->cl_hostname)
|
if (!clp->cl_hostname)
|
||||||
goto error_3;
|
goto error_3;
|
||||||
@ -165,7 +168,7 @@ error_3:
|
|||||||
error_2:
|
error_2:
|
||||||
kfree(clp);
|
kfree(clp);
|
||||||
error_0:
|
error_0:
|
||||||
return NULL;
|
return ERR_PTR(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void nfs4_shutdown_client(struct nfs_client *clp)
|
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);
|
spin_unlock(&nfs_client_lock);
|
||||||
|
|
||||||
new = nfs_alloc_client(cl_init);
|
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 a new client and return with it unready */
|
||||||
install_client:
|
install_client:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user