Revert "sunrpc: fix peername failed on closed listener"
[safe/jmp/linux-2.6] / net / sunrpc / svc_xprt.c
index 1c924ee..818c4c3 100644 (file)
@@ -173,11 +173,13 @@ static struct svc_xprt *__svc_xpo_create(struct svc_xprt_class *xcl,
                .sin_addr.s_addr        = htonl(INADDR_ANY),
                .sin_port               = htons(port),
        };
+#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
        struct sockaddr_in6 sin6 = {
                .sin6_family            = AF_INET6,
                .sin6_addr              = IN6ADDR_ANY_INIT,
                .sin6_port              = htons(port),
        };
+#endif /* defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) */
        struct sockaddr *sap;
        size_t len;
 
@@ -186,10 +188,12 @@ static struct svc_xprt *__svc_xpo_create(struct svc_xprt_class *xcl,
                sap = (struct sockaddr *)&sin;
                len = sizeof(sin);
                break;
+#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
        case PF_INET6:
                sap = (struct sockaddr *)&sin6;
                len = sizeof(sin6);
                break;
+#endif /* defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) */
        default:
                return ERR_PTR(-EAFNOSUPPORT);
        }
@@ -231,7 +235,10 @@ int svc_create_xprt(struct svc_serv *serv, const char *xprt_name,
  err:
        spin_unlock(&svc_xprt_class_lock);
        dprintk("svc: transport %s not found\n", xprt_name);
-       return -ENOENT;
+
+       /* This errno is exposed to user space.  Provide a reasonable
+        * perror msg for a bad transport. */
+       return -EPROTONOSUPPORT;
 }
 EXPORT_SYMBOL_GPL(svc_create_xprt);
 
@@ -888,11 +895,8 @@ void svc_delete_xprt(struct svc_xprt *xprt)
        if (test_bit(XPT_TEMP, &xprt->xpt_flags))
                serv->sv_tmpcnt--;
 
-       for (dr = svc_deferred_dequeue(xprt); dr;
-            dr = svc_deferred_dequeue(xprt)) {
-               svc_xprt_put(xprt);
+       while ((dr = svc_deferred_dequeue(xprt)) != NULL)
                kfree(dr);
-       }
 
        svc_xprt_put(xprt);
        spin_unlock_bh(&serv->sv_lock);