• Stanislav Kinsbursky's avatar
    SUNRPC: fix races on PipeFS MOUNT notifications · 38481605
    Stanislav Kinsbursky authored
    Below are races, when RPC client can be created without PiepFS dentries
    
    CPU#0					CPU#1
    -----------------------------		-----------------------------
    rpc_new_client				rpc_fill_super
    rpc_setup_pipedir
    mutex_lock(&sn->pipefs_sb_lock)
    rpc_get_sb_net == NULL
    (no per-net PipeFS superblock)
    					sn->pipefs_sb = sb;
    					notifier_call_chain(MOUNT)
    					(client is not in the list)
    rpc_register_client
    (client without pipes dentries)
    
    To fix this patch:
    1) makes PipeFS mount notification call with pipefs_sb_lock being held.
    2) releases pipefs_sb_lock on new SUNRPC client creation only after
    registration.
    Signed-off-by: default avatarStanislav Kinsbursky <skinsbursky@parallels.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
    38481605
clnt.c 54.8 KB