]> bbs.cooldavid.org Git - net-next-2.6.git/blobdiff - net/sunrpc/rpcb_clnt.c
Merge branch 'for-2.6.37' of git://linux-nfs.org/~bfields/linux
[net-next-2.6.git] / net / sunrpc / rpcb_clnt.c
index dac219a56ae1a7dcf8df9ddff9a128b6caa89dac..fa6d7ca2c851fc6cc6614c26f1e8bb5b43362c66 100644 (file)
@@ -177,6 +177,7 @@ static DEFINE_MUTEX(rpcb_create_local_mutex);
 static int rpcb_create_local(void)
 {
        struct rpc_create_args args = {
+               .net            = &init_net,
                .protocol       = XPRT_TRANSPORT_TCP,
                .address        = (struct sockaddr *)&rpcb_inaddr_loopback,
                .addrsize       = sizeof(rpcb_inaddr_loopback),
@@ -211,8 +212,9 @@ static int rpcb_create_local(void)
         */
        clnt4 = rpc_bind_new_program(clnt, &rpcb_program, RPCBVERS_4);
        if (IS_ERR(clnt4)) {
-               dprintk("RPC:       failed to create local rpcbind v4 "
-                               "cleint (errno %ld).\n", PTR_ERR(clnt4));
+               dprintk("RPC:       failed to bind second program to "
+                               "rpcbind v4 client (errno %ld).\n",
+                               PTR_ERR(clnt4));
                clnt4 = NULL;
        }
 
@@ -228,6 +230,7 @@ static struct rpc_clnt *rpcb_create(char *hostname, struct sockaddr *srvaddr,
                                    size_t salen, int proto, u32 version)
 {
        struct rpc_create_args args = {
+               .net            = &init_net,
                .protocol       = proto,
                .address        = srvaddr,
                .addrsize       = salen,
@@ -247,7 +250,7 @@ static struct rpc_clnt *rpcb_create(char *hostname, struct sockaddr *srvaddr,
                ((struct sockaddr_in6 *)srvaddr)->sin6_port = htons(RPCBIND_PORT);
                break;
        default:
-               return NULL;
+               return ERR_PTR(-EAFNOSUPPORT);
        }
 
        return rpc_create(&args);
@@ -475,57 +478,6 @@ int rpcb_v4_register(const u32 program, const u32 version,
        return -EAFNOSUPPORT;
 }
 
-/**
- * rpcb_getport_sync - obtain the port for an RPC service on a given host
- * @sin: address of remote peer
- * @prog: RPC program number to bind
- * @vers: RPC version number to bind
- * @prot: transport protocol to use to make this request
- *
- * Return value is the requested advertised port number,
- * or a negative errno value.
- *
- * Called from outside the RPC client in a synchronous task context.
- * Uses default timeout parameters specified by underlying transport.
- *
- * XXX: Needs to support IPv6
- */
-int rpcb_getport_sync(struct sockaddr_in *sin, u32 prog, u32 vers, int prot)
-{
-       struct rpcbind_args map = {
-               .r_prog         = prog,
-               .r_vers         = vers,
-               .r_prot         = prot,
-               .r_port         = 0,
-       };
-       struct rpc_message msg = {
-               .rpc_proc       = &rpcb_procedures2[RPCBPROC_GETPORT],
-               .rpc_argp       = &map,
-               .rpc_resp       = &map,
-       };
-       struct rpc_clnt *rpcb_clnt;
-       int status;
-
-       dprintk("RPC:       %s(%pI4, %u, %u, %d)\n",
-               __func__, &sin->sin_addr.s_addr, prog, vers, prot);
-
-       rpcb_clnt = rpcb_create(NULL, (struct sockaddr *)sin,
-                               sizeof(*sin), prot, RPCBVERS_2);
-       if (IS_ERR(rpcb_clnt))
-               return PTR_ERR(rpcb_clnt);
-
-       status = rpc_call_sync(rpcb_clnt, &msg, 0);
-       rpc_shutdown_client(rpcb_clnt);
-
-       if (status >= 0) {
-               if (map.r_port != 0)
-                       return map.r_port;
-               status = -EACCES;
-       }
-       return status;
-}
-EXPORT_SYMBOL_GPL(rpcb_getport_sync);
-
 static struct rpc_task *rpcb_call_async(struct rpc_clnt *rpcb_clnt, struct rpcbind_args *map, struct rpc_procinfo *proc)
 {
        struct rpc_message msg = {