mirror of
https://github.com/torvalds/linux.git
synced 2024-11-23 20:51:44 +00:00
ocfs2/dlm: Remove BUG_ON from migration in the rare case of a down node
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. However, if the node is down, dlm_migration_can_proceed() will also return "go ahead". In this rare case, the DLM_LOCK_RES_MIGRATING flag might not be set yet. Remove the BUG_ON() that trips over this condition. Signed-off-by: Wengang Wang <wen.gang.wang@oracle.com> Signed-off-by: Joel Becker <joel.becker@oracle.com>
This commit is contained in:
parent
f5e27b6ddf
commit
a39953dd95
@ -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)) {
|
||||
@ -2825,10 +2819,22 @@ 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
|
||||
|
Loading…
Reference in New Issue
Block a user