summaryrefslogtreecommitdiff
path: root/net/netlabel
diff options
context:
space:
mode:
authorStanislav Kinsbursky <skinsbursky@parallels.com>2013-06-26 06:15:14 (GMT)
committerTrond Myklebust <Trond.Myklebust@netapp.com>2013-06-28 19:42:02 (GMT)
commitadb6fa7ffe9031857ec14b8aab75c9ab65556cbc (patch)
tree4d13bd7bf95d0c24478e95f429d6b4e6bbf5a6a5 /net/netlabel
parent384816051ca9125cd54750e59c780c2a2655fa4f (diff)
downloadlinux-adb6fa7ffe9031857ec14b8aab75c9ab65556cbc.tar.xz
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 'net/netlabel')
0 files changed, 0 insertions, 0 deletions