SUNRPC: Add a convenient default for the hostname when calling rpc_create()
A couple of callers just use a stringified IP address for the rpc client's hostname. Move the logic for constructing this into rpc_create(), so it can be shared. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
Родитель
45160d6275
Коммит
43780b87fa
|
@ -28,8 +28,7 @@
|
|||
#define MOUNT_UMNT 3
|
||||
*/
|
||||
|
||||
static struct rpc_clnt * mnt_create(char *, struct sockaddr_in *,
|
||||
int, int);
|
||||
static struct rpc_clnt * mnt_create(struct sockaddr_in *, int, int);
|
||||
static struct rpc_program mnt_program;
|
||||
|
||||
struct mnt_fhstatus {
|
||||
|
@ -52,14 +51,12 @@ nfsroot_mount(struct sockaddr_in *addr, char *path, struct nfs_fh *fh,
|
|||
.rpc_argp = path,
|
||||
.rpc_resp = &result,
|
||||
};
|
||||
char hostname[32];
|
||||
int status;
|
||||
|
||||
dprintk("NFS: nfs_mount(%08x:%s)\n",
|
||||
(unsigned)ntohl(addr->sin_addr.s_addr), path);
|
||||
|
||||
sprintf(hostname, "%u.%u.%u.%u", NIPQUAD(addr->sin_addr.s_addr));
|
||||
mnt_clnt = mnt_create(hostname, addr, version, protocol);
|
||||
mnt_clnt = mnt_create(addr, version, protocol);
|
||||
if (IS_ERR(mnt_clnt))
|
||||
return PTR_ERR(mnt_clnt);
|
||||
|
||||
|
@ -73,15 +70,13 @@ nfsroot_mount(struct sockaddr_in *addr, char *path, struct nfs_fh *fh,
|
|||
return status < 0? status : (result.status? -EACCES : 0);
|
||||
}
|
||||
|
||||
static struct rpc_clnt *
|
||||
mnt_create(char *hostname, struct sockaddr_in *srvaddr, int version,
|
||||
static struct rpc_clnt *mnt_create(struct sockaddr_in *srvaddr, int version,
|
||||
int protocol)
|
||||
{
|
||||
struct rpc_create_args args = {
|
||||
.protocol = protocol,
|
||||
.address = (struct sockaddr *)srvaddr,
|
||||
.addrsize = sizeof(*srvaddr),
|
||||
.servername = hostname,
|
||||
.program = &mnt_program,
|
||||
.version = version,
|
||||
.authflavor = RPC_AUTH_UNIX,
|
||||
|
|
|
@ -394,7 +394,6 @@ nfsd4_probe_callback(struct nfs4_client *clp)
|
|||
.rpc_proc = &nfs4_cb_procedures[NFSPROC4_CLNT_CB_NULL],
|
||||
.rpc_argp = clp,
|
||||
};
|
||||
char clientname[16];
|
||||
int status;
|
||||
|
||||
if (atomic_read(&cb->cb_set))
|
||||
|
@ -417,11 +416,6 @@ nfsd4_probe_callback(struct nfs4_client *clp)
|
|||
memset(program->stats, 0, sizeof(cb->cb_stat));
|
||||
program->stats->program = program;
|
||||
|
||||
/* Just here to make some printk's more useful: */
|
||||
snprintf(clientname, sizeof(clientname),
|
||||
"%u.%u.%u.%u", NIPQUAD(addr.sin_addr));
|
||||
args.servername = clientname;
|
||||
|
||||
/* Create RPC client */
|
||||
cb->cb_client = rpc_create(&args);
|
||||
if (IS_ERR(cb->cb_client)) {
|
||||
|
|
|
@ -234,12 +234,25 @@ struct rpc_clnt *rpc_create(struct rpc_create_args *args)
|
|||
{
|
||||
struct rpc_xprt *xprt;
|
||||
struct rpc_clnt *clnt;
|
||||
char servername[20];
|
||||
|
||||
xprt = xprt_create_transport(args->protocol, args->address,
|
||||
args->addrsize, args->timeout);
|
||||
if (IS_ERR(xprt))
|
||||
return (struct rpc_clnt *)xprt;
|
||||
|
||||
/*
|
||||
* If the caller chooses not to specify a hostname, whip
|
||||
* up a string representation of the passed-in address.
|
||||
*/
|
||||
if (args->servername == NULL) {
|
||||
struct sockaddr_in *addr =
|
||||
(struct sockaddr_in *) &args->address;
|
||||
snprintf(servername, sizeof(servername), NIPQUAD_FMT,
|
||||
NIPQUAD(addr->sin_addr.s_addr));
|
||||
args->servername = servername;
|
||||
}
|
||||
|
||||
/*
|
||||
* By default, kernel RPC client connects from a reserved port.
|
||||
* CAP_NET_BIND_SERVICE will not be set for unprivileged requesters,
|
||||
|
|
Загрузка…
Ссылка в новой задаче