lkml.org 
[lkml]   [2012]   [Jan]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Subject[PATCH v2 4/6] SUNRPC: remove RPC client pipefs dentries after unregister
    From
    Date
    Without this patch we have races:

    rpc_fill_super rpc_free_client
    rpc_pipefs_event(MOUNT) rpc_remove_pipedir
    spin_lock(&rpc_client_lock);
    rpc_setup_pipedir_sb
    spin_unlock(&rpc_client_lock);
    spin_lock(&rpc_client_lock);
    (remove from list)
    spin_unlock(&rpc_client_lock);
    MEAMORY LEAKED

    Signed-off-by: Stanislav Kinsbursky <skinsbursky@parallels.com>

    ---
    net/sunrpc/clnt.c | 2 +-
    1 files changed, 1 insertions(+), 1 deletions(-)

    diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c
    index 4170745..c89ceb8 100644
    --- a/net/sunrpc/clnt.c
    +++ b/net/sunrpc/clnt.c
    @@ -578,7 +578,6 @@ rpc_free_client(struct rpc_clnt *clnt)
    {
    dprintk("RPC: destroying %s client for %s\n",
    clnt->cl_protname, clnt->cl_server);
    - rpc_clnt_remove_pipedir(clnt);
    if (clnt->cl_parent != clnt) {
    rpc_release_client(clnt->cl_parent);
    goto out_free;
    @@ -587,6 +586,7 @@ rpc_free_client(struct rpc_clnt *clnt)
    kfree(clnt->cl_server);
    out_free:
    rpc_unregister_client(clnt);
    + rpc_clnt_remove_pipedir(clnt);
    rpc_free_iostats(clnt->cl_metrics);
    kfree(clnt->cl_principal);
    clnt->cl_metrics = NULL;


    \
     
     \ /
      Last update: 2012-01-11 16:21    [W:0.036 / U:0.408 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site