ocfs2/dlm: remove BUG_ON in a rare case
PATCH 1/1 ocfs2/dlm: remove BUG_ON in a rare case
For migration, we are waiting for DLM_LOCK_RES_MIGRATING flag to be set before sending DLM_MIG_LOCKRES_MSG message to the target. We are using dlm_migration_can_proceed() for that purpose. while, dlm_migration_can_proceed() also returns "go ahead" if target node is down. In this rare case, the DLM_LOCK_RES_MIGRATING maybe is not set yet. Remove the BUG_ON() in this case.
--- fs/ocfs2/dlm/dlmmaster.c | 22 ++++++++++++++-------- 1 files changed, 14 insertions(+), 8 deletions(-)
fs/ocfs2/dlm/dlmmaster.c +14 -8
@@ -2808,14 +2808,8 @@ again:mlog (0 ,"trying again...\n" ); goto again; } -/* now that we are sure the MIGRATING state is there, drop -* the unneded state which blocked threads trying to DIRTY */ -spin_lock (&res->spinlock); -BUG_ON (!(res->state &DLM_LOCK_RES_BLOCK_DIRTY )); -BUG_ON (!(res->state &DLM_LOCK_RES_MIGRATING )); - res->state &= ~DLM_LOCK_RES_BLOCK_DIRTY ; -spin_unlock (&res->spinlock); + ret =0 ;/* did the target go down or die? */ spin_lock (&dlm->spinlock);if (!test_bit (target, dlm->domain_map)) {
@@ -2826,9 +2820,21 @@ again:spin_unlock (&dlm->spinlock);/* +* if target is down, we need to clear DLM_LOCK_RES_BLOCK_DIRTY for +* another try; otherwise, we are sure the MIGRATING state is there, +* drop the unneded state which blocked threads trying to DIRTY +*/ +spin_lock (&res->spinlock); +BUG_ON (!(res->state &DLM_LOCK_RES_BLOCK_DIRTY )); + res->state &= ~DLM_LOCK_RES_BLOCK_DIRTY ; +if (!ret) +BUG_ON (!(res->state &DLM_LOCK_RES_MIGRATING )); +spin_unlock (&res->spinlock); + +/* * at this point: * -* o the DLM_LOCK_RES_MIGRATING flag is set +* o the DLM_LOCK_RES_MIGRATING flag is set if target not down * o there are no pending asts on this lockres * o all processes trying to reserve an ast on this * lockres must wait for the MIGRATING flag to clear
Signature · 1 line
1.6.6.1
PATCH 1/1 ocfs2/dlm: remove BUG_ON in a rare case
Quoted 55 lines · Wengang Wang
For migration, we are waiting for
DLM_LOCK_RES_MIGRATINGflag to be set before sendingDLM_MIG_LOCKRES_MSGmessage to the target. We are usingdlm_migration_can_proceed()for that purpose. while,dlm_migration_can_proceed()also returns "go ahead" if target node is down. In this rare case, theDLM_LOCK_RES_MIGRATINGmaybe is not set yet. Remove theBUG_ON()in this case.Signed-off-by Wengang Wang<[email protected]>--- fs/ocfs2/dlm/dlmmaster.c | 22 ++++++++++++++-------- 1 files changed, 14 insertions(+), 8 deletions(-)fs/ocfs2/dlm/dlmmaster.c +14
-8@@ -2808,14 +2808,8 @@ again:mlog (0 ,"trying again...\n" ); goto again; } -/* now that we are sure the MIGRATING state is there, drop -* the unneded state which blocked threads trying to DIRTY */ -spin_lock (&res->spinlock); -BUG_ON (!(res->state&DLM_LOCK_RES_BLOCK_DIRTY )); -BUG_ON (!(res->state&DLM_LOCK_RES_MIGRATING )); - res->state&= ~DLM_LOCK_RES_BLOCK_DIRTY ; -spin_unlock (&res->spinlock); + ret =0 ;/* did the target go down or die? */ spin_lock (&dlm->spinlock);if (!test_bit (target, dlm->domain_map)) {@@ -2826,9 +2820,21 @@ again:spin_unlock (&dlm->spinlock);/* +* if target is down, we need to clear DLM_LOCK_RES_BLOCK_DIRTY for +* another try; otherwise, we are sure the MIGRATING state is there, +* drop the unneded state which blocked threads trying to DIRTY +*/ +spin_lock (&res->spinlock); +BUG_ON (!(res->state&DLM_LOCK_RES_BLOCK_DIRTY )); + res->state&= ~DLM_LOCK_RES_BLOCK_DIRTY ; +if (!ret) +BUG_ON (!(res->state&DLM_LOCK_RES_MIGRATING )); +spin_unlock (&res->spinlock); + +/* * at this point: * -* o the DLM_LOCK_RES_MIGRATING flag is set +* o the DLM_LOCK_RES_MIGRATING flag is set if target not down * o there are no pending asts on this lockres * o all processes trying to reserve an ast on this * lockres must wait for the MIGRATING flag to clear
PATCH 1/1 ocfs2/dlm: remove BUG_ON in a rare case
In reply to Wengang WangQuoted 7 lines · Wengang Wang
For migration, we are waiting for
DLM_LOCK_RES_MIGRATINGflag to be set before sendingDLM_MIG_LOCKRES_MSGmessage to the target. We are usingdlm_migration_can_proceed()for that purpose. while,dlm_migration_can_proceed()also returns "go ahead" if target node is down. In this rare case, theDLM_LOCK_RES_MIGRATINGmaybe is not set yet. Remove theBUG_ON()in this case.Signed-off-by Wengang Wang <[email protected]>
This patch is now in the 'fixes' branch of ocfs2.git.
Joel
Signature · 9 lines
"The whole problem with the world is that fools and fanatics are always so certain of themselves, and wiser people so full of doubts." - Bertrand Russell Joel Becker Consulting Software Developer Oracle E-mail: joel.becker at oracle.com Phone: (650) 506-8127