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

+12 -4
+2 -1
fs/lockd/host.c
··· 167 167 continue; 168 168 if (host->h_server != ni->server) 169 169 continue; 170 - if (!nlm_cmp_addr(nlm_srcaddr(host), ni->src_sap)) 170 + if (ni->server && 171 + !nlm_cmp_addr(nlm_srcaddr(host), ni->src_sap)) 171 172 continue; 172 173 173 174 /* Move to head of hash chain. */
+1
fs/lockd/svc.c
··· 181 181 } 182 182 flush_signals(current); 183 183 cancel_delayed_work_sync(&grace_period_end); 184 + locks_end_grace(&lockd_manager); 184 185 if (nlmsvc_ops) 185 186 nlmsvc_invalidate_all(); 186 187 nlm_shutdown_hosts();
+1 -1
fs/nfsd/nfs4recover.c
··· 225 225 return 0; 226 226 227 227 nfs4_save_user(&uid, &gid); 228 + INIT_LIST_HEAD(dentries); 228 229 229 230 filp = dentry_open(dget(dir), mntget(rec_dir.mnt), O_RDONLY); 230 231 status = PTR_ERR(filp); 231 232 if (IS_ERR(filp)) 232 233 goto out; 233 - INIT_LIST_HEAD(dentries); 234 234 status = vfs_readdir(filp, nfsd4_build_dentrylist, &dla); 235 235 fput(filp); 236 236 while (!list_empty(dentries)) {
+1
fs/nfsd/nfs4state.c
··· 3261 3261 { 3262 3262 cancel_rearming_delayed_workqueue(laundry_wq, &laundromat_work); 3263 3263 destroy_workqueue(laundry_wq); 3264 + locks_end_grace(&nfsd4_manager); 3264 3265 nfs4_lock_state(); 3265 3266 nfs4_release_reclaim(); 3266 3267 __nfs4_state_shutdown();
+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);