Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=43780b87fa799ae65df11d89d4539d8d6a7c67eb
Commit:     43780b87fa799ae65df11d89d4539d8d6a7c67eb
Parent:     45160d6275814e0c86206e6981f0b92c61a50a21
Author:     Chuck Lever <[EMAIL PROTECTED]>
AuthorDate: Sun Jul 1 12:13:22 2007 -0400
Committer:  Trond Myklebust <[EMAIL PROTECTED]>
CommitDate: Tue Jul 10 23:40:46 2007 -0400

    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 <[EMAIL PROTECTED]>
    Signed-off-by: Trond Myklebust <[EMAIL PROTECTED]>
---
 fs/nfs/mount_clnt.c    |   13 ++++---------
 fs/nfsd/nfs4callback.c |    6 ------
 net/sunrpc/clnt.c      |   13 +++++++++++++
 3 files changed, 17 insertions(+), 15 deletions(-)

diff --git a/fs/nfs/mount_clnt.c b/fs/nfs/mount_clnt.c
index 878d7a5..2892ec8 100644
--- a/fs/nfs/mount_clnt.c
+++ b/fs/nfs/mount_clnt.c
@@ -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,
-               int protocol)
+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,
diff --git a/fs/nfsd/nfs4callback.c b/fs/nfsd/nfs4callback.c
index 6b1b487..5443c52 100644
--- a/fs/nfsd/nfs4callback.c
+++ b/fs/nfsd/nfs4callback.c
@@ -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)) {
diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c
index e1553cf..0d9b527 100644
--- a/net/sunrpc/clnt.c
+++ b/net/sunrpc/clnt.c
@@ -234,6 +234,7 @@ 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);
@@ -241,6 +242,18 @@ struct rpc_clnt *rpc_create(struct rpc_create_args *args)
                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,
         * but it is always enabled for rpciod, which handles the connect
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to