diff options
author | Trond Myklebust <Trond.Myklebust@netapp.com> | 2006-06-09 09:40:27 -0400 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2006-06-09 09:40:27 -0400 |
commit | 28df955a2ad484d602314b30183ea8496a9aa34a (patch) | |
tree | c62632b2a0a49df114283f10764244c1b1b5f506 /fs/lockd/host.c | |
parent | 5046791417dcac1ba126b77b8062af15a2f0b8e1 (diff) | |
download | op-kernel-dev-28df955a2ad484d602314b30183ea8496a9aa34a.zip op-kernel-dev-28df955a2ad484d602314b30183ea8496a9aa34a.tar.gz |
NLM: Fix reclaim races
Currently it is possible for a task to remove its locks at the same time as
the NLM recovery thread is trying to recover them. This quickly leads to an
Oops.
Protect the locks using an rw semaphore while they are being recovered.
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'fs/lockd/host.c')
-rw-r--r-- | fs/lockd/host.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/fs/lockd/host.c b/fs/lockd/host.c index 5242743..38b0e8a 100644 --- a/fs/lockd/host.c +++ b/fs/lockd/host.c @@ -117,6 +117,7 @@ nlm_lookup_host(int server, struct sockaddr_in *sin, host->h_expires = jiffies + NLM_HOST_EXPIRE; atomic_set(&host->h_count, 1); init_waitqueue_head(&host->h_gracewait); + init_rwsem(&host->h_rwsem); host->h_state = 0; /* pseudo NSM state */ host->h_nsmstate = 0; /* real NSM state */ host->h_server = server; |