hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
kernel/fs/nfs/callback.c
....@@ -41,11 +41,13 @@
4141
4242 static int nfs4_callback_up_net(struct svc_serv *serv, struct net *net)
4343 {
44
+ const struct cred *cred = current_cred();
4445 int ret;
4546 struct nfs_net *nn = net_generic(net, nfs_net_id);
4647
4748 ret = svc_create_xprt(serv, "tcp", net, PF_INET,
48
- nfs_callback_set_tcpport, SVC_SOCK_ANONYMOUS);
49
+ nfs_callback_set_tcpport, SVC_SOCK_ANONYMOUS,
50
+ cred);
4951 if (ret <= 0)
5052 goto out_err;
5153 nn->nfs_callback_tcpport = ret;
....@@ -53,10 +55,11 @@
5355 nn->nfs_callback_tcpport, PF_INET, net->ns.inum);
5456
5557 ret = svc_create_xprt(serv, "tcp", net, PF_INET6,
56
- nfs_callback_set_tcpport, SVC_SOCK_ANONYMOUS);
58
+ nfs_callback_set_tcpport, SVC_SOCK_ANONYMOUS,
59
+ cred);
5760 if (ret > 0) {
5861 nn->nfs_callback_tcpport6 = ret;
59
- dprintk("NFS: Callback listener port = %u (af %u, net %x\n",
62
+ dprintk("NFS: Callback listener port = %u (af %u, net %x)\n",
6063 nn->nfs_callback_tcpport6, PF_INET6, net->ns.inum);
6164 } else if (ret != -EAFNOSUPPORT)
6265 goto out_err;
....@@ -206,11 +209,13 @@
206209 goto err_bind;
207210 }
208211
209
- ret = -EPROTONOSUPPORT;
212
+ ret = 0;
210213 if (!IS_ENABLED(CONFIG_NFS_V4_1) || minorversion == 0)
211214 ret = nfs4_callback_up_net(serv, net);
212
- else if (xprt->ops->bc_up)
213
- ret = xprt->ops->bc_up(serv, net);
215
+ else if (xprt->ops->bc_setup)
216
+ set_bc_enabled(serv);
217
+ else
218
+ ret = -EPROTONOSUPPORT;
214219
215220 if (ret < 0) {
216221 printk(KERN_ERR "NFS: callback service start failed\n");
....@@ -455,4 +460,6 @@
455460 .pg_class = "nfs", /* authentication class */
456461 .pg_stats = &nfs4_callback_stats,
457462 .pg_authenticate = nfs_callback_authenticate,
463
+ .pg_init_request = svc_generic_init_request,
464
+ .pg_rpcbind_set = svc_generic_rpcbind_set,
458465 };