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>

authored by

Tom Tucker and committed by
J. Bruce Fields
2da2c21d 2c5e7615

+7 -2
+7 -2
net/sunrpc/svcsock.c
··· 1183 1183 else if (so->state > SS_UNCONNECTED) 1184 1184 err = -EISCONN; 1185 1185 else { 1186 - svsk = svc_setup_socket(serv, so, &err, SVC_SOCK_DEFAULTS); 1186 + if (!try_module_get(THIS_MODULE)) 1187 + err = -ENOENT; 1188 + else 1189 + svsk = svc_setup_socket(serv, so, &err, 1190 + SVC_SOCK_DEFAULTS); 1187 1191 if (svsk) { 1188 1192 struct sockaddr_storage addr; 1189 1193 struct sockaddr *sin = (struct sockaddr *)&addr; ··· 1200 1196 spin_unlock_bh(&serv->sv_lock); 1201 1197 svc_xprt_received(&svsk->sk_xprt); 1202 1198 err = 0; 1203 - } 1199 + } else 1200 + module_put(THIS_MODULE); 1204 1201 } 1205 1202 if (err) { 1206 1203 sockfd_put(so);