diff options
author | Stanislav Kinsbursky | 2013-06-26 08:15:14 +0200 |
---|---|---|
committer | Trond Myklebust | 2013-06-28 21:42:02 +0200 |
commit | adb6fa7ffe9031857ec14b8aab75c9ab65556cbc (patch) | |
tree | 4d13bd7bf95d0c24478e95f429d6b4e6bbf5a6a5 /drivers/mfd/stmpe.h | |
parent | SUNRPC: fix races on PipeFS MOUNT notifications (diff) | |
download | kernel-qcow2-linux-adb6fa7ffe9031857ec14b8aab75c9ab65556cbc.tar.gz kernel-qcow2-linux-adb6fa7ffe9031857ec14b8aab75c9ab65556cbc.tar.xz kernel-qcow2-linux-adb6fa7ffe9031857ec14b8aab75c9ab65556cbc.zip |
SUNRPC: fix races on PipeFS UMOUNT notifications
CPU#0 CPU#1
----------------------------- -----------------------------
rpc_kill_sb
sn->pipefs_sb = NULL rpc_release_client
(UMOUNT_EVENT) rpc_free_auth
rpc_pipefs_event
rpc_get_client_for_event
!atomic_inc_not_zero(cl_count)
<skip the client>
atomic_inc(cl_count)
rpc_free_client
rpc_clnt_remove_pipedir
<skip client dir removing>
To fix this, this patch does the following:
1) Calls RPC_PIPEFS_UMOUNT notification with sn->pipefs_sb_lock being held.
2) Removes SUNRPC client from the list AFTER pipes destroying.
3) Doesn't hold RPC client on notification: if client in the list, then it
can't be destroyed while sn->pipefs_sb_lock in hold by notification caller.
Signed-off-by: Stanislav Kinsbursky <skinsbursky@parallels.com>
Cc: stable@vger.kernel.org
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'drivers/mfd/stmpe.h')
0 files changed, 0 insertions, 0 deletions