Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge branch 'for-3.6' of git://linux-nfs.org/~bfields/linux

Pull nfsd bugfixes from J. Bruce Fields:
"Particular thanks to Michael Tokarev, Malahal Naineni, and Jamie
Heilman for their testing and debugging help."

* 'for-3.6' of git://linux-nfs.org/~bfields/linux:
svcrpc: fix svc_xprt_enqueue/svc_recv busy-looping
svcrpc: sends on closed socket should stop immediately
svcrpc: fix BUG() in svc_tcp_clear_pages
nfsd4: fix security flavor of NFSv4.0 callback

+7 -10
+2 -2
fs/nfsd/nfs4callback.c
··· 651 651 652 652 if (clp->cl_minorversion == 0) { 653 653 if (!clp->cl_cred.cr_principal && 654 - (clp->cl_flavor >= RPC_AUTH_GSS_KRB5)) 654 + (clp->cl_cred.cr_flavor >= RPC_AUTH_GSS_KRB5)) 655 655 return -EINVAL; 656 656 args.client_name = clp->cl_cred.cr_principal; 657 657 args.prognumber = conn->cb_prog, 658 658 args.protocol = XPRT_TRANSPORT_TCP; 659 - args.authflavor = clp->cl_flavor; 659 + args.authflavor = clp->cl_cred.cr_flavor; 660 660 clp->cl_cb_ident = conn->cb_ident; 661 661 } else { 662 662 if (!conn->cb_xprt)
-1
fs/nfsd/state.h
··· 231 231 nfs4_verifier cl_verifier; /* generated by client */ 232 232 time_t cl_time; /* time of last lease renewal */ 233 233 struct sockaddr_storage cl_addr; /* client ipaddress */ 234 - u32 cl_flavor; /* setclientid pseudoflavor */ 235 234 struct svc_cred cl_cred; /* setclientid principal */ 236 235 clientid_t cl_clientid; /* generated by server */ 237 236 nfs4_verifier cl_confirm; /* generated by server */
+4 -6
net/sunrpc/svc_xprt.c
··· 316 316 */ 317 317 void svc_xprt_enqueue(struct svc_xprt *xprt) 318 318 { 319 - struct svc_serv *serv = xprt->xpt_server; 320 319 struct svc_pool *pool; 321 320 struct svc_rqst *rqstp; 322 321 int cpu; ··· 361 362 rqstp, rqstp->rq_xprt); 362 363 rqstp->rq_xprt = xprt; 363 364 svc_xprt_get(xprt); 364 - rqstp->rq_reserved = serv->sv_max_mesg; 365 - atomic_add(rqstp->rq_reserved, &xprt->xpt_reserved); 366 365 pool->sp_stats.threads_woken++; 367 366 wake_up(&rqstp->rq_wait); 368 367 } else { ··· 637 640 if (xprt) { 638 641 rqstp->rq_xprt = xprt; 639 642 svc_xprt_get(xprt); 640 - rqstp->rq_reserved = serv->sv_max_mesg; 641 - atomic_add(rqstp->rq_reserved, &xprt->xpt_reserved); 642 643 643 644 /* As there is a shortage of threads and this request 644 645 * had to be queued, don't allow the thread to wait so ··· 733 738 else 734 739 len = xprt->xpt_ops->xpo_recvfrom(rqstp); 735 740 dprintk("svc: got len=%d\n", len); 741 + rqstp->rq_reserved = serv->sv_max_mesg; 742 + atomic_add(rqstp->rq_reserved, &xprt->xpt_reserved); 736 743 } 737 744 svc_xprt_received(xprt); 738 745 ··· 791 794 792 795 /* Grab mutex to serialize outgoing data. */ 793 796 mutex_lock(&xprt->xpt_mutex); 794 - if (test_bit(XPT_DEAD, &xprt->xpt_flags)) 797 + if (test_bit(XPT_DEAD, &xprt->xpt_flags) 798 + || test_bit(XPT_CLOSE, &xprt->xpt_flags)) 795 799 len = -ENOTCONN; 796 800 else 797 801 len = xprt->xpt_ops->xpo_sendto(rqstp);
+1 -1
net/sunrpc/svcsock.c
··· 1129 1129 if (len >= 0) 1130 1130 svsk->sk_tcplen += len; 1131 1131 if (len != want) { 1132 + svc_tcp_save_pages(svsk, rqstp); 1132 1133 if (len < 0 && len != -EAGAIN) 1133 1134 goto err_other; 1134 - svc_tcp_save_pages(svsk, rqstp); 1135 1135 dprintk("svc: incomplete TCP record (%d of %d)\n", 1136 1136 svsk->sk_tcplen, svsk->sk_reclen); 1137 1137 goto err_noclose;