| .. | .. |
|---|
| 41 | 41 | |
|---|
| 42 | 42 | static int nfs4_callback_up_net(struct svc_serv *serv, struct net *net) |
|---|
| 43 | 43 | { |
|---|
| 44 | + const struct cred *cred = current_cred(); |
|---|
| 44 | 45 | int ret; |
|---|
| 45 | 46 | struct nfs_net *nn = net_generic(net, nfs_net_id); |
|---|
| 46 | 47 | |
|---|
| 47 | 48 | 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); |
|---|
| 49 | 51 | if (ret <= 0) |
|---|
| 50 | 52 | goto out_err; |
|---|
| 51 | 53 | nn->nfs_callback_tcpport = ret; |
|---|
| .. | .. |
|---|
| 53 | 55 | nn->nfs_callback_tcpport, PF_INET, net->ns.inum); |
|---|
| 54 | 56 | |
|---|
| 55 | 57 | 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); |
|---|
| 57 | 60 | if (ret > 0) { |
|---|
| 58 | 61 | 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", |
|---|
| 60 | 63 | nn->nfs_callback_tcpport6, PF_INET6, net->ns.inum); |
|---|
| 61 | 64 | } else if (ret != -EAFNOSUPPORT) |
|---|
| 62 | 65 | goto out_err; |
|---|
| .. | .. |
|---|
| 206 | 209 | goto err_bind; |
|---|
| 207 | 210 | } |
|---|
| 208 | 211 | |
|---|
| 209 | | - ret = -EPROTONOSUPPORT; |
|---|
| 212 | + ret = 0; |
|---|
| 210 | 213 | if (!IS_ENABLED(CONFIG_NFS_V4_1) || minorversion == 0) |
|---|
| 211 | 214 | 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; |
|---|
| 214 | 219 | |
|---|
| 215 | 220 | if (ret < 0) { |
|---|
| 216 | 221 | printk(KERN_ERR "NFS: callback service start failed\n"); |
|---|
| .. | .. |
|---|
| 455 | 460 | .pg_class = "nfs", /* authentication class */ |
|---|
| 456 | 461 | .pg_stats = &nfs4_callback_stats, |
|---|
| 457 | 462 | .pg_authenticate = nfs_callback_authenticate, |
|---|
| 463 | + .pg_init_request = svc_generic_init_request, |
|---|
| 464 | + .pg_rpcbind_set = svc_generic_rpcbind_set, |
|---|
| 458 | 465 | }; |
|---|