Loading fs/ocfs2/dlm/dlmthread.c +35 −2 Original line number Diff line number Diff line Loading @@ -54,6 +54,8 @@ #include "cluster/masklog.h" static int dlm_thread(void *data); static void dlm_purge_lockres_now(struct dlm_ctxt *dlm, struct dlm_lock_resource *lockres); static void dlm_flush_asts(struct dlm_ctxt *dlm); Loading Loading @@ -111,10 +113,23 @@ void __dlm_lockres_calc_usage(struct dlm_ctxt *dlm, res->last_used = jiffies; list_add_tail(&res->purge, &dlm->purge_list); dlm->purge_count++; /* if this node is not the owner, there is * no way to keep track of who the owner could be. * unhash it to avoid serious problems. */ if (res->owner != dlm->node_num) { mlog(0, "%s:%.*s: doing immediate " "purge of lockres owned by %u\n", dlm->name, res->lockname.len, res->lockname.name, res->owner); dlm_purge_lockres_now(dlm, res); } } } else if (!list_empty(&res->purge)) { mlog(0, "removing lockres %.*s from purge list\n", res->lockname.len, res->lockname.name); mlog(0, "removing lockres %.*s from purge list, " "owner=%u\n", res->lockname.len, res->lockname.name, res->owner); list_del_init(&res->purge); dlm->purge_count--; Loading Loading @@ -180,6 +195,24 @@ void dlm_purge_lockres(struct dlm_ctxt *dlm, struct dlm_lock_resource *lockres) __dlm_unhash_lockres(lockres); } /* make an unused lockres go away immediately. * as soon as the dlm spinlock is dropped, this lockres * will not be found. kfree still happens on last put. */ static void dlm_purge_lockres_now(struct dlm_ctxt *dlm, struct dlm_lock_resource *lockres) { assert_spin_locked(&dlm->spinlock); assert_spin_locked(&lockres->spinlock); BUG_ON(!__dlm_lockres_unused(lockres)); if (!list_empty(&lockres->purge)) { list_del_init(&lockres->purge); dlm->purge_count--; } __dlm_unhash_lockres(lockres); } static void dlm_run_purge_list(struct dlm_ctxt *dlm, int purge_now) { Loading Loading
fs/ocfs2/dlm/dlmthread.c +35 −2 Original line number Diff line number Diff line Loading @@ -54,6 +54,8 @@ #include "cluster/masklog.h" static int dlm_thread(void *data); static void dlm_purge_lockres_now(struct dlm_ctxt *dlm, struct dlm_lock_resource *lockres); static void dlm_flush_asts(struct dlm_ctxt *dlm); Loading Loading @@ -111,10 +113,23 @@ void __dlm_lockres_calc_usage(struct dlm_ctxt *dlm, res->last_used = jiffies; list_add_tail(&res->purge, &dlm->purge_list); dlm->purge_count++; /* if this node is not the owner, there is * no way to keep track of who the owner could be. * unhash it to avoid serious problems. */ if (res->owner != dlm->node_num) { mlog(0, "%s:%.*s: doing immediate " "purge of lockres owned by %u\n", dlm->name, res->lockname.len, res->lockname.name, res->owner); dlm_purge_lockres_now(dlm, res); } } } else if (!list_empty(&res->purge)) { mlog(0, "removing lockres %.*s from purge list\n", res->lockname.len, res->lockname.name); mlog(0, "removing lockres %.*s from purge list, " "owner=%u\n", res->lockname.len, res->lockname.name, res->owner); list_del_init(&res->purge); dlm->purge_count--; Loading Loading @@ -180,6 +195,24 @@ void dlm_purge_lockres(struct dlm_ctxt *dlm, struct dlm_lock_resource *lockres) __dlm_unhash_lockres(lockres); } /* make an unused lockres go away immediately. * as soon as the dlm spinlock is dropped, this lockres * will not be found. kfree still happens on last put. */ static void dlm_purge_lockres_now(struct dlm_ctxt *dlm, struct dlm_lock_resource *lockres) { assert_spin_locked(&dlm->spinlock); assert_spin_locked(&lockres->spinlock); BUG_ON(!__dlm_lockres_unused(lockres)); if (!list_empty(&lockres->purge)) { list_del_init(&lockres->purge); dlm->purge_count--; } __dlm_unhash_lockres(lockres); } static void dlm_run_purge_list(struct dlm_ctxt *dlm, int purge_now) { Loading