forked from Minki/linux
Merge branch 'for-2.6.28' of git://linux-nfs.org/~bfields/linux
* 'for-2.6.28' of git://linux-nfs.org/~bfields/linux: NLM: client-side nlm_lookup_host() should avoid matching on srcaddr nfsd: use of unitialized list head on error exit in nfs4recover.c Add a reference to sunrpc in svc_addsock nfsd: clean up grace period on early exit
This commit is contained in:
commit
2433c41789
@ -167,7 +167,8 @@ static struct nlm_host *nlm_lookup_host(struct nlm_lookup_host_info *ni)
|
||||
continue;
|
||||
if (host->h_server != ni->server)
|
||||
continue;
|
||||
if (!nlm_cmp_addr(nlm_srcaddr(host), ni->src_sap))
|
||||
if (ni->server &&
|
||||
!nlm_cmp_addr(nlm_srcaddr(host), ni->src_sap))
|
||||
continue;
|
||||
|
||||
/* Move to head of hash chain. */
|
||||
|
@ -181,6 +181,7 @@ lockd(void *vrqstp)
|
||||
}
|
||||
flush_signals(current);
|
||||
cancel_delayed_work_sync(&grace_period_end);
|
||||
locks_end_grace(&lockd_manager);
|
||||
if (nlmsvc_ops)
|
||||
nlmsvc_invalidate_all();
|
||||
nlm_shutdown_hosts();
|
||||
|
@ -225,12 +225,12 @@ nfsd4_list_rec_dir(struct dentry *dir, recdir_func *f)
|
||||
return 0;
|
||||
|
||||
nfs4_save_user(&uid, &gid);
|
||||
INIT_LIST_HEAD(dentries);
|
||||
|
||||
filp = dentry_open(dget(dir), mntget(rec_dir.mnt), O_RDONLY);
|
||||
status = PTR_ERR(filp);
|
||||
if (IS_ERR(filp))
|
||||
goto out;
|
||||
INIT_LIST_HEAD(dentries);
|
||||
status = vfs_readdir(filp, nfsd4_build_dentrylist, &dla);
|
||||
fput(filp);
|
||||
while (!list_empty(dentries)) {
|
||||
|
@ -3261,6 +3261,7 @@ nfs4_state_shutdown(void)
|
||||
{
|
||||
cancel_rearming_delayed_workqueue(laundry_wq, &laundromat_work);
|
||||
destroy_workqueue(laundry_wq);
|
||||
locks_end_grace(&nfsd4_manager);
|
||||
nfs4_lock_state();
|
||||
nfs4_release_reclaim();
|
||||
__nfs4_state_shutdown();
|
||||
|
@ -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