lkml.org 
[lkml]   [2012]   [May]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Subject[PATCH RFC 03/13] LockD: manage garbage collection timeout per networks namespace
    From
    Date
    This patch moves next_gc to per-net data.

    Note: passed network can be NULL (when Lockd kthread is exiting of Lockd
    module is removing).

    Signed-off-by: Stanislav Kinsbursky <skinsbursky@parallels.com>
    ---
    fs/lockd/host.c | 12 +++++++++---
    fs/lockd/netns.h | 1 +
    2 files changed, 10 insertions(+), 3 deletions(-)

    diff --git a/fs/lockd/host.c b/fs/lockd/host.c
    index 991274a..3636734 100644
    --- a/fs/lockd/host.c
    +++ b/fs/lockd/host.c
    @@ -21,6 +21,8 @@

    #include <net/ipv6.h>

    +#include "netns.h"
    +
    #define NLMDBG_FACILITY NLMDBG_HOSTCACHE
    #define NLM_HOST_NRHASH 32
    #define NLM_HOST_REBIND (60 * HZ)
    @@ -41,7 +43,6 @@ static struct hlist_head nlm_client_hosts[NLM_HOST_NRHASH];
    hlist_for_each_entry_safe((host), (pos), (next), \
    (chain), h_hash)

    -static unsigned long next_gc;
    static unsigned long nrhosts;
    static DEFINE_MUTEX(nlm_host_mutex);

    @@ -337,6 +338,7 @@ struct nlm_host *nlmsvc_lookup_host(const struct svc_rqst *rqstp,
    .hostname_len = hostname_len,
    .net = net,
    };
    + struct lockd_net *ln = net_generic(net, lockd_net_id);

    dprintk("lockd: %s(host='%*s', vers=%u, proto=%s)\n", __func__,
    (int)hostname_len, hostname, rqstp->rq_vers,
    @@ -344,7 +346,7 @@ struct nlm_host *nlmsvc_lookup_host(const struct svc_rqst *rqstp,

    mutex_lock(&nlm_host_mutex);

    - if (time_after_eq(jiffies, next_gc))
    + if (time_after_eq(jiffies, ln->next_gc))
    nlm_gc_hosts(net);

    chain = &nlm_server_hosts[nlm_hash_address(ni.sap)];
    @@ -653,5 +655,9 @@ nlm_gc_hosts(struct net *net)
    nlm_destroy_host_locked(host);
    }

    - next_gc = jiffies + NLM_HOST_COLLECT;
    + if (net) {
    + struct lockd_net *ln = net_generic(net, lockd_net_id);
    +
    + ln->next_gc = jiffies + NLM_HOST_COLLECT;
    + }
    }
    diff --git a/fs/lockd/netns.h b/fs/lockd/netns.h
    index ce227e0..97c6c77 100644
    --- a/fs/lockd/netns.h
    +++ b/fs/lockd/netns.h
    @@ -5,6 +5,7 @@

    struct lockd_net {
    unsigned int nlmsvc_users;
    + unsigned long next_gc;
    };

    extern int lockd_net_id;


    \
     
     \ /
      Last update: 2012-05-05 20:01    [W:0.023 / U:2.188 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site