|
@@ -220,10 +220,19 @@ reclaimer(void *ptr)
|
|
|
{
|
|
|
struct nlm_host *host = (struct nlm_host *) ptr;
|
|
|
struct nlm_wait *block;
|
|
|
+ struct nlm_rqst *req;
|
|
|
struct file_lock *fl, *next;
|
|
|
u32 nsmstate;
|
|
|
struct net *net = host->net;
|
|
|
|
|
|
+ req = kmalloc(sizeof(*req), GFP_KERNEL);
|
|
|
+ if (!req) {
|
|
|
+ printk(KERN_ERR "lockd: reclaimer unable to alloc memory."
|
|
|
+ " Locks for %s won't be reclaimed!\n",
|
|
|
+ host->h_name);
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+
|
|
|
allow_signal(SIGKILL);
|
|
|
|
|
|
down_write(&host->h_rwsem);
|
|
@@ -253,7 +262,7 @@ restart:
|
|
|
*/
|
|
|
if (signalled())
|
|
|
continue;
|
|
|
- if (nlmclnt_reclaim(host, fl) != 0)
|
|
|
+ if (nlmclnt_reclaim(host, fl, req) != 0)
|
|
|
continue;
|
|
|
list_add_tail(&fl->fl_u.nfs_fl.list, &host->h_granted);
|
|
|
if (host->h_nsmstate != nsmstate) {
|
|
@@ -279,5 +288,6 @@ restart:
|
|
|
/* Release host handle after use */
|
|
|
nlmclnt_release_host(host);
|
|
|
lockd_down(net);
|
|
|
+ kfree(req);
|
|
|
return 0;
|
|
|
}
|