Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 124707
b: refs/heads/master
c: df94f00
h: refs/heads/master
i:
  124705: 2740801
  124703: c0e1b46
v: v3
  • Loading branch information
Jeff Layton authored and Trond Myklebust committed Dec 23, 2008
1 parent fa941b9 commit e1173df
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 7 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 2de59872a7842143f4507832e7c1f5123c47feb7
refs/heads/master: df94f000c46c055cf439f5b92807cd827557ffbc
21 changes: 15 additions & 6 deletions trunk/fs/lockd/clntlock.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
#include <linux/sunrpc/svc.h>
#include <linux/lockd/lockd.h>
#include <linux/smp_lock.h>
#include <linux/kthread.h>

#define NLMDBG_FACILITY NLMDBG_CLIENT

Expand Down Expand Up @@ -191,11 +192,15 @@ __be32 nlmclnt_grant(const struct sockaddr *addr, const struct nlm_lock *lock)
void
nlmclnt_recovery(struct nlm_host *host)
{
struct task_struct *task;

if (!host->h_reclaiming++) {
nlm_get_host(host);
__module_get(THIS_MODULE);
if (kernel_thread(reclaimer, host, CLONE_FS | CLONE_FILES) < 0)
module_put(THIS_MODULE);
task = kthread_run(reclaimer, host, "%s-reclaim", host->h_name);
if (IS_ERR(task))
printk(KERN_ERR "lockd: unable to spawn reclaimer "
"thread. Locks for %s won't be reclaimed! "
"(%ld)\n", host->h_name, PTR_ERR(task));
}
}

Expand All @@ -207,7 +212,6 @@ reclaimer(void *ptr)
struct file_lock *fl, *next;
u32 nsmstate;

daemonize("%s-reclaim", host->h_name);
allow_signal(SIGKILL);

down_write(&host->h_rwsem);
Expand All @@ -233,7 +237,12 @@ reclaimer(void *ptr)
list_for_each_entry_safe(fl, next, &host->h_reclaim, fl_u.nfs_fl.list) {
list_del_init(&fl->fl_u.nfs_fl.list);

/* Why are we leaking memory here? --okir */
/*
* sending this thread a SIGKILL will result in any unreclaimed
* locks being removed from the h_granted list. This means that
* the kernel will not attempt to reclaim them again if a new
* reclaimer thread is spawned for this host.
*/
if (signalled())
continue;
if (nlmclnt_reclaim(host, fl) != 0)
Expand Down Expand Up @@ -261,5 +270,5 @@ reclaimer(void *ptr)
nlm_release_host(host);
lockd_down();
unlock_kernel();
module_put_and_exit(0);
return 0;
}

0 comments on commit e1173df

Please sign in to comment.