mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-11 21:14:07 +08:00
Add a reference to sunrpc in svc_addsock
The svc_addsock function adds transport instances without taking a reference on the sunrpc.ko module, however, the generic transport destruction code drops a reference when a transport instance is destroyed. Add a try_module_get call to the svc_addsock function for transport instances added by this function. Signed-off-by: Tom Tucker <tom@opengridcomputing.com> Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu> Tested-by: Jeff Moyer <jmoyer@redhat.com>
This commit is contained in:
parent
2c5e76158f
commit
2da2c21d75
@ -1183,7 +1183,11 @@ int svc_addsock(struct svc_serv *serv,
|
||||
else if (so->state > SS_UNCONNECTED)
|
||||
err = -EISCONN;
|
||||
else {
|
||||
svsk = svc_setup_socket(serv, so, &err, SVC_SOCK_DEFAULTS);
|
||||
if (!try_module_get(THIS_MODULE))
|
||||
err = -ENOENT;
|
||||
else
|
||||
svsk = svc_setup_socket(serv, so, &err,
|
||||
SVC_SOCK_DEFAULTS);
|
||||
if (svsk) {
|
||||
struct sockaddr_storage addr;
|
||||
struct sockaddr *sin = (struct sockaddr *)&addr;
|
||||
@ -1196,7 +1200,8 @@ int svc_addsock(struct svc_serv *serv,
|
||||
spin_unlock_bh(&serv->sv_lock);
|
||||
svc_xprt_received(&svsk->sk_xprt);
|
||||
err = 0;
|
||||
}
|
||||
} else
|
||||
module_put(THIS_MODULE);
|
||||
}
|
||||
if (err) {
|
||||
sockfd_put(so);
|
||||
|
Loading…
Reference in New Issue
Block a user