Commit 1a58e8a0 authored by Trond Myklebust's avatar Trond Myklebust Committed by Anna Schumaker

NFS: Store the credential of the mount process in the nfs_server

Store the credential of the mount process so that we can determine
information such as the user namespace.
Signed-off-by: default avatarTrond Myklebust <trond.myklebust@hammerspace.com>
Signed-off-by: default avatarAnna Schumaker <Anna.Schumaker@Netapp.com>
parent 79caa5fa
...@@ -500,7 +500,7 @@ int nfs_create_rpc_client(struct nfs_client *clp, ...@@ -500,7 +500,7 @@ int nfs_create_rpc_client(struct nfs_client *clp,
.program = &nfs_program, .program = &nfs_program,
.version = clp->rpc_ops->version, .version = clp->rpc_ops->version,
.authflavor = flavor, .authflavor = flavor,
.cred = current_cred(), .cred = cl_init->cred,
}; };
if (test_bit(NFS_CS_DISCRTRY, &clp->cl_flags)) if (test_bit(NFS_CS_DISCRTRY, &clp->cl_flags))
...@@ -655,6 +655,7 @@ static int nfs_init_server(struct nfs_server *server, ...@@ -655,6 +655,7 @@ static int nfs_init_server(struct nfs_server *server,
.proto = data->nfs_server.protocol, .proto = data->nfs_server.protocol,
.net = data->net, .net = data->net,
.timeparms = &timeparms, .timeparms = &timeparms,
.cred = server->cred,
}; };
struct nfs_client *clp; struct nfs_client *clp;
int error; int error;
...@@ -923,6 +924,7 @@ void nfs_free_server(struct nfs_server *server) ...@@ -923,6 +924,7 @@ void nfs_free_server(struct nfs_server *server)
ida_destroy(&server->lockowner_id); ida_destroy(&server->lockowner_id);
ida_destroy(&server->openowner_id); ida_destroy(&server->openowner_id);
nfs_free_iostats(server->io_stats); nfs_free_iostats(server->io_stats);
put_cred(server->cred);
kfree(server); kfree(server);
nfs_release_automount_timer(); nfs_release_automount_timer();
} }
...@@ -943,6 +945,8 @@ struct nfs_server *nfs_create_server(struct nfs_mount_info *mount_info, ...@@ -943,6 +945,8 @@ struct nfs_server *nfs_create_server(struct nfs_mount_info *mount_info,
if (!server) if (!server)
return ERR_PTR(-ENOMEM); return ERR_PTR(-ENOMEM);
server->cred = get_cred(current_cred());
error = -ENOMEM; error = -ENOMEM;
fattr = nfs_alloc_fattr(); fattr = nfs_alloc_fattr();
if (fattr == NULL) if (fattr == NULL)
...@@ -1009,6 +1013,8 @@ struct nfs_server *nfs_clone_server(struct nfs_server *source, ...@@ -1009,6 +1013,8 @@ struct nfs_server *nfs_clone_server(struct nfs_server *source,
if (!server) if (!server)
return ERR_PTR(-ENOMEM); return ERR_PTR(-ENOMEM);
server->cred = get_cred(source->cred);
error = -ENOMEM; error = -ENOMEM;
fattr_fsinfo = nfs_alloc_fattr(); fattr_fsinfo = nfs_alloc_fattr();
if (fattr_fsinfo == NULL) if (fattr_fsinfo == NULL)
......
...@@ -84,6 +84,7 @@ struct nfs_client_initdata { ...@@ -84,6 +84,7 @@ struct nfs_client_initdata {
u32 minorversion; u32 minorversion;
struct net *net; struct net *net;
const struct rpc_timeout *timeparms; const struct rpc_timeout *timeparms;
const struct cred *cred;
}; };
/* /*
......
...@@ -91,6 +91,7 @@ struct nfs_client *nfs3_set_ds_client(struct nfs_server *mds_srv, ...@@ -91,6 +91,7 @@ struct nfs_client *nfs3_set_ds_client(struct nfs_server *mds_srv,
.proto = ds_proto, .proto = ds_proto,
.net = mds_clp->cl_net, .net = mds_clp->cl_net,
.timeparms = &ds_timeout, .timeparms = &ds_timeout,
.cred = mds_srv->cred,
}; };
struct nfs_client *clp; struct nfs_client *clp;
char buf[INET6_ADDRSTRLEN + 1]; char buf[INET6_ADDRSTRLEN + 1];
......
...@@ -870,6 +870,7 @@ static int nfs4_set_client(struct nfs_server *server, ...@@ -870,6 +870,7 @@ static int nfs4_set_client(struct nfs_server *server,
.minorversion = minorversion, .minorversion = minorversion,
.net = net, .net = net,
.timeparms = timeparms, .timeparms = timeparms,
.cred = server->cred,
}; };
struct nfs_client *clp; struct nfs_client *clp;
...@@ -931,6 +932,7 @@ struct nfs_client *nfs4_set_ds_client(struct nfs_server *mds_srv, ...@@ -931,6 +932,7 @@ struct nfs_client *nfs4_set_ds_client(struct nfs_server *mds_srv,
.minorversion = minor_version, .minorversion = minor_version,
.net = mds_clp->cl_net, .net = mds_clp->cl_net,
.timeparms = &ds_timeout, .timeparms = &ds_timeout,
.cred = mds_srv->cred,
}; };
char buf[INET6_ADDRSTRLEN + 1]; char buf[INET6_ADDRSTRLEN + 1];
...@@ -1107,6 +1109,8 @@ struct nfs_server *nfs4_create_server(struct nfs_mount_info *mount_info, ...@@ -1107,6 +1109,8 @@ struct nfs_server *nfs4_create_server(struct nfs_mount_info *mount_info,
if (!server) if (!server)
return ERR_PTR(-ENOMEM); return ERR_PTR(-ENOMEM);
server->cred = get_cred(current_cred());
auth_probe = mount_info->parsed->auth_info.flavor_len < 1; auth_probe = mount_info->parsed->auth_info.flavor_len < 1;
/* set up the general RPC client */ /* set up the general RPC client */
...@@ -1143,6 +1147,8 @@ struct nfs_server *nfs4_create_referral_server(struct nfs_clone_mount *data, ...@@ -1143,6 +1147,8 @@ struct nfs_server *nfs4_create_referral_server(struct nfs_clone_mount *data,
parent_server = NFS_SB(data->sb); parent_server = NFS_SB(data->sb);
parent_client = parent_server->nfs_client; parent_client = parent_server->nfs_client;
server->cred = get_cred(parent_server->cred);
/* Initialise the client representation from the parent server */ /* Initialise the client representation from the parent server */
nfs_server_copy_userdata(server, parent_server); nfs_server_copy_userdata(server, parent_server);
......
...@@ -241,6 +241,9 @@ struct nfs_server { ...@@ -241,6 +241,9 @@ struct nfs_server {
/* XDR related information */ /* XDR related information */
unsigned int read_hdrsize; unsigned int read_hdrsize;
/* User namespace info */
const struct cred *cred;
}; };
/* Server capabilities */ /* Server capabilities */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment