sunrpc: handle allocation errors from __rpc_lookup_create()
[safe/jmp/linux-2.6] / net / sunrpc / svcsock.c
index 1c246a4..a29f259 100644 (file)
@@ -272,14 +272,14 @@ static int svc_one_sock_name(struct svc_sock *svsk, char *buf, int remaining)
        case PF_INET:
                len = snprintf(buf, remaining, "ipv4 %s %pI4 %d\n",
                                proto_name,
-                               &inet_sk(sk)->rcv_saddr,
-                               inet_sk(sk)->num);
+                               &inet_sk(sk)->inet_rcv_saddr,
+                               inet_sk(sk)->inet_num);
                break;
        case PF_INET6:
                len = snprintf(buf, remaining, "ipv6 %s %pI6 %d\n",
                                proto_name,
                                &inet6_sk(sk)->rcv_saddr,
-                               inet_sk(sk)->num);
+                               inet_sk(sk)->inet_num);
                break;
        default:
                len = snprintf(buf, remaining, "*unknown-%d*\n",
@@ -968,6 +968,7 @@ static int svc_tcp_recv_record(struct svc_sock *svsk, struct svc_rqst *rqstp)
        return len;
  err_delete:
        set_bit(XPT_CLOSE, &svsk->sk_xprt.xpt_flags);
+       svc_xprt_received(&svsk->sk_xprt);
  err_again:
        return -EAGAIN;
 }
@@ -1311,7 +1312,7 @@ static struct svc_sock *svc_setup_socket(struct svc_serv *serv,
        /* Register socket with portmapper */
        if (*errp >= 0 && pmap_register)
                *errp = svc_register(serv, inet->sk_family, inet->sk_protocol,
-                                    ntohs(inet_sk(inet)->sport));
+                                    ntohs(inet_sk(inet)->inet_sport));
 
        if (*errp < 0) {
                kfree(svsk);
@@ -1357,7 +1358,7 @@ int svc_addsock(struct svc_serv *serv, const int fd, char *name_return,
 
        if (!so)
                return err;
-       if (so->sk->sk_family != AF_INET)
+       if ((so->sk->sk_family != PF_INET) && (so->sk->sk_family != PF_INET6))
                err =  -EAFNOSUPPORT;
        else if (so->sk->sk_protocol != IPPROTO_TCP &&
            so->sk->sk_protocol != IPPROTO_UDP)