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 tag 'nfsd-6.16-1' of git://git.kernel.org/pub/scm/linux/kernel/git/cel/linux

Pull nfsd fixes from Chuck Lever:

- Two fixes for commits in the nfsd-6.16 merge

- One fix for the recently-added NFSD netlink facility

- One fix for a remote SunRPC crasher

* tag 'nfsd-6.16-1' of git://git.kernel.org/pub/scm/linux/kernel/git/cel/linux:
sunrpc: handle SVC_GARBAGE during svc auth processing as auth error
nfsd: use threads array as-is in netlink interface
SUNRPC: Cleanup/fix initial rq_pages allocation
NFSD: Avoid corruption of a referring call list

+6 -17
+1
fs/nfsd/nfs4callback.c
··· 1409 1409 out: 1410 1410 if (!rcl->__nr_referring_calls) { 1411 1411 cb->cb_nr_referring_call_list--; 1412 + list_del(&rcl->__list); 1412 1413 kfree(rcl); 1413 1414 } 1414 1415 }
+2 -3
fs/nfsd/nfsctl.c
··· 1611 1611 */ 1612 1612 int nfsd_nl_threads_set_doit(struct sk_buff *skb, struct genl_info *info) 1613 1613 { 1614 - int *nthreads, count = 0, nrpools, i, ret = -EOPNOTSUPP, rem; 1614 + int *nthreads, nrpools = 0, i, ret = -EOPNOTSUPP, rem; 1615 1615 struct net *net = genl_info_net(info); 1616 1616 struct nfsd_net *nn = net_generic(net, nfsd_net_id); 1617 1617 const struct nlattr *attr; ··· 1623 1623 /* count number of SERVER_THREADS values */ 1624 1624 nlmsg_for_each_attr(attr, info->nlhdr, GENL_HDRLEN, rem) { 1625 1625 if (nla_type(attr) == NFSD_A_SERVER_THREADS) 1626 - count++; 1626 + nrpools++; 1627 1627 } 1628 1628 1629 1629 mutex_lock(&nfsd_mutex); 1630 1630 1631 - nrpools = max(count, nfsd_nrpools(net)); 1632 1631 nthreads = kcalloc(nrpools, sizeof(int), GFP_KERNEL); 1633 1632 if (!nthreads) { 1634 1633 ret = -ENOMEM;
+3 -14
net/sunrpc/svc.c
··· 638 638 static bool 639 639 svc_init_buffer(struct svc_rqst *rqstp, const struct svc_serv *serv, int node) 640 640 { 641 - unsigned long ret; 642 - 643 641 rqstp->rq_maxpages = svc_serv_maxpages(serv); 644 642 645 643 /* rq_pages' last entry is NULL for historical reasons. */ ··· 647 649 if (!rqstp->rq_pages) 648 650 return false; 649 651 650 - ret = alloc_pages_bulk_node(GFP_KERNEL, node, rqstp->rq_maxpages, 651 - rqstp->rq_pages); 652 - return ret == rqstp->rq_maxpages; 652 + return true; 653 653 } 654 654 655 655 /* ··· 1371 1375 case SVC_OK: 1372 1376 break; 1373 1377 case SVC_GARBAGE: 1374 - goto err_garbage_args; 1378 + rqstp->rq_auth_stat = rpc_autherr_badcred; 1379 + goto err_bad_auth; 1375 1380 case SVC_SYSERR: 1376 1381 goto err_system_err; 1377 1382 case SVC_DENIED: ··· 1511 1514 if (serv->sv_stats) 1512 1515 serv->sv_stats->rpcbadfmt++; 1513 1516 *rqstp->rq_accept_statp = rpc_proc_unavail; 1514 - goto sendit; 1515 - 1516 - err_garbage_args: 1517 - svc_printk(rqstp, "failed to decode RPC header\n"); 1518 - 1519 - if (serv->sv_stats) 1520 - serv->sv_stats->rpcbadfmt++; 1521 - *rqstp->rq_accept_statp = rpc_garbage_args; 1522 1517 goto sendit; 1523 1518 1524 1519 err_system_err: