| .. | .. | 
|---|
| 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 | }; | 
|---|