diff options
author | Trond Myklebust <Trond.Myklebust@netapp.com> | 2010-09-12 19:55:25 -0400 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2010-09-12 19:55:25 -0400 |
commit | 006abe887c5e637d059c44310de6c92f36aded3b (patch) | |
tree | 542ab0f1d56b4d9681c8d61fbf77c9a46062e661 /include | |
parent | 5a67657a2e90c9e4a48518f95d4ba7777aa20fbb (diff) | |
download | linux-006abe887c5e637d059c44310de6c92f36aded3b.tar.gz linux-006abe887c5e637d059c44310de6c92f36aded3b.tar.bz2 linux-006abe887c5e637d059c44310de6c92f36aded3b.zip |
SUNRPC: Fix a race in rpc_info_open
There is a race between rpc_info_open and rpc_release_client()
in that nothing stops a process from opening the file after
the clnt->cl_kref goes to zero.
Fix this by using atomic_inc_unless_zero()...
Reported-by: J. Bruce Fields <bfields@redhat.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Cc: stable@kernel.org
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/sunrpc/clnt.h | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/include/linux/sunrpc/clnt.h b/include/linux/sunrpc/clnt.h index 569dc722a600..85f38a63f098 100644 --- a/include/linux/sunrpc/clnt.h +++ b/include/linux/sunrpc/clnt.h @@ -30,7 +30,7 @@ struct rpc_inode; * The high-level client handle */ struct rpc_clnt { - struct kref cl_kref; /* Number of references */ + atomic_t cl_count; /* Number of references */ struct list_head cl_clients; /* Global list of clients */ struct list_head cl_tasks; /* List of tasks */ spinlock_t cl_lock; /* spinlock */ |