Loading fs/ocfs2/dlm/dlmcommon.h +11 −3 Original line number Diff line number Diff line Loading @@ -235,18 +235,26 @@ struct dlm_lock_resource struct qstr lockname; struct kref refs; /* please keep these next 3 in this order * some funcs want to iterate over all lists */ /* * Please keep granted, converting, and blocked in this order, * as some funcs want to iterate over all lists. * * All four lists are protected by the hash's reference. */ struct list_head granted; struct list_head converting; struct list_head blocked; struct list_head purge; /* * These two lists require you to hold an additional reference * while they are on the list. */ struct list_head dirty; struct list_head recovering; // dlm_recovery_ctxt.resources list /* unused lock resources have their last_used stamped and are * put on a list for the dlm thread to run. */ struct list_head purge; unsigned long last_used; unsigned migration_pending:1; Loading fs/ocfs2/dlm/dlmthread.c +6 −0 Original line number Diff line number Diff line Loading @@ -455,6 +455,8 @@ void __dlm_dirty_lockres(struct dlm_ctxt *dlm, struct dlm_lock_resource *res) /* don't shuffle secondary queues */ if ((res->owner == dlm->node_num) && !(res->state & DLM_LOCK_RES_DIRTY)) { /* ref for dirty_list */ dlm_lockres_get(res); list_add_tail(&res->dirty, &dlm->dirty_list); res->state |= DLM_LOCK_RES_DIRTY; } Loading Loading @@ -639,6 +641,8 @@ static int dlm_thread(void *data) list_del_init(&res->dirty); spin_unlock(&res->spinlock); spin_unlock(&dlm->spinlock); /* Drop dirty_list ref */ dlm_lockres_put(res); /* lockres can be re-dirtied/re-added to the * dirty_list in this gap, but that is ok */ Loading Loading @@ -691,6 +695,8 @@ static int dlm_thread(void *data) /* if the lock was in-progress, stick * it on the back of the list */ if (delay) { /* ref for dirty_list */ dlm_lockres_get(res); spin_lock(&res->spinlock); list_add_tail(&res->dirty, &dlm->dirty_list); res->state |= DLM_LOCK_RES_DIRTY; Loading Loading
fs/ocfs2/dlm/dlmcommon.h +11 −3 Original line number Diff line number Diff line Loading @@ -235,18 +235,26 @@ struct dlm_lock_resource struct qstr lockname; struct kref refs; /* please keep these next 3 in this order * some funcs want to iterate over all lists */ /* * Please keep granted, converting, and blocked in this order, * as some funcs want to iterate over all lists. * * All four lists are protected by the hash's reference. */ struct list_head granted; struct list_head converting; struct list_head blocked; struct list_head purge; /* * These two lists require you to hold an additional reference * while they are on the list. */ struct list_head dirty; struct list_head recovering; // dlm_recovery_ctxt.resources list /* unused lock resources have their last_used stamped and are * put on a list for the dlm thread to run. */ struct list_head purge; unsigned long last_used; unsigned migration_pending:1; Loading
fs/ocfs2/dlm/dlmthread.c +6 −0 Original line number Diff line number Diff line Loading @@ -455,6 +455,8 @@ void __dlm_dirty_lockres(struct dlm_ctxt *dlm, struct dlm_lock_resource *res) /* don't shuffle secondary queues */ if ((res->owner == dlm->node_num) && !(res->state & DLM_LOCK_RES_DIRTY)) { /* ref for dirty_list */ dlm_lockres_get(res); list_add_tail(&res->dirty, &dlm->dirty_list); res->state |= DLM_LOCK_RES_DIRTY; } Loading Loading @@ -639,6 +641,8 @@ static int dlm_thread(void *data) list_del_init(&res->dirty); spin_unlock(&res->spinlock); spin_unlock(&dlm->spinlock); /* Drop dirty_list ref */ dlm_lockres_put(res); /* lockres can be re-dirtied/re-added to the * dirty_list in this gap, but that is ok */ Loading Loading @@ -691,6 +695,8 @@ static int dlm_thread(void *data) /* if the lock was in-progress, stick * it on the back of the list */ if (delay) { /* ref for dirty_list */ dlm_lockres_get(res); spin_lock(&res->spinlock); list_add_tail(&res->dirty, &dlm->dirty_list); res->state |= DLM_LOCK_RES_DIRTY; Loading