Merge branch 'for-3.8' of git://linux-nfs.org/~bfields/linux
[linux-drm-fsl-dcu.git] / net / sunrpc / svcsock.c
index 38ec968ca1c6d9acb6dc4c0004ea96eac19bf727..0a148c9d2a5ce7b3915df8c10f5e5f0913b99c25 100644 (file)
@@ -84,7 +84,11 @@ static struct lock_class_key svc_slock_key[2];
 static void svc_reclassify_socket(struct socket *sock)
 {
        struct sock *sk = sock->sk;
-       BUG_ON(sock_owned_by_user(sk));
+
+       WARN_ON_ONCE(sock_owned_by_user(sk));
+       if (sock_owned_by_user(sk))
+               return;
+
        switch (sk->sk_family) {
        case AF_INET:
                sock_lock_init_class_and_name(sk, "slock-AF_INET-NFSD",
@@ -601,6 +605,7 @@ static int svc_udp_recvfrom(struct svc_rqst *rqstp)
                rqstp->rq_respages = rqstp->rq_pages + 1 +
                        DIV_ROUND_UP(rqstp->rq_arg.page_len, PAGE_SIZE);
        }
+       rqstp->rq_next_page = rqstp->rq_respages+1;
 
        if (serv->sv_stats)
                serv->sv_stats->netudpcnt++;
@@ -952,8 +957,8 @@ static int svc_tcp_recv_record(struct svc_sock *svsk, struct svc_rqst *rqstp)
                dprintk("svc: TCP record, %d bytes\n", svc_sock_reclen(svsk));
                if (svc_sock_reclen(svsk) + svsk->sk_datalen >
                                                        serv->sv_max_mesg) {
-                       net_notice_ratelimited("RPC: fragment too large: 0x%08lx\n",
-                                              (unsigned long)svsk->sk_reclen);
+                       net_notice_ratelimited("RPC: fragment too large: %d\n",
+                                       svc_sock_reclen(svsk));
                        goto err_delete;
                }
        }
@@ -1066,6 +1071,7 @@ static int svc_tcp_recvfrom(struct svc_rqst *rqstp)
                                                svsk->sk_datalen + want);
 
        rqstp->rq_respages = &rqstp->rq_pages[pnum];
+       rqstp->rq_next_page = rqstp->rq_respages + 1;
 
        /* Now receive data */
        len = svc_partial_recvfrom(rqstp, vec, pnum, want, base);
@@ -1080,8 +1086,8 @@ static int svc_tcp_recvfrom(struct svc_rqst *rqstp)
                if (len == want)
                        svc_tcp_fragment_received(svsk);
                else
-                       dprintk("svc: incomplete TCP record (%ld of %d)\n",
-                               svsk->sk_tcplen - sizeof(rpc_fraghdr),
+                       dprintk("svc: incomplete TCP record (%d of %d)\n",
+                               (int)(svsk->sk_tcplen - sizeof(rpc_fraghdr)),
                                svc_sock_reclen(svsk));
                goto err_noclose;
        }