summaryrefslogtreecommitdiffstats
path: root/fs/lockd/host.c
diff options
context:
space:
mode:
authorTrond Myklebust <Trond.Myklebust@netapp.com>2006-06-09 09:40:27 -0400
committerTrond Myklebust <Trond.Myklebust@netapp.com>2006-06-09 09:40:27 -0400
commit28df955a2ad484d602314b30183ea8496a9aa34a (patch)
treec62632b2a0a49df114283f10764244c1b1b5f506 /fs/lockd/host.c
parent5046791417dcac1ba126b77b8062af15a2f0b8e1 (diff)
downloadop-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.c1
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;
OpenPOWER on IntegriCloud