OBDF_ATTACHED, /* finished attach */
OBDF_SET_UP, /* finished setup */
OBDF_RECOVERING, /* there are recoverable clients */
+ OBDF_ABORT_RECOVERY, /* abort client and MDT recovery */
OBDF_NUM_FLAGS,
};
/* bitfield modification is protected by obd_dev_lock */
DECLARE_BITMAP(obd_flags, OBDF_NUM_FLAGS);
unsigned long
- obd_abort_recovery:1, /* abort client and MDT recovery */
obd_abort_mdt_recovery:1, /* abort recovery between MDTs */
obd_version_recov:1, /* obd uses version checking */
obd_replayable:1, /* recovery enabled; inform clients */
/* both client and MDT recovery are aborted, or MDT is stopping */
static inline bool obd_recovery_abort(struct obd_device *obd)
{
- return obd->obd_stopping || obd->obd_abort_recovery;
+ return obd->obd_stopping || test_bit(OBDF_ABORT_RECOVERY, obd->obd_flags);
}
/* MDT recovery is aborted, or MDT is stopping */
static inline bool obd_mdt_recovery_abort(struct obd_device *obd)
{
- return obd->obd_stopping || obd->obd_abort_recovery ||
+ return obd->obd_stopping || test_bit(OBDF_ABORT_RECOVERY, obd->obd_flags) ||
obd->obd_abort_mdt_recovery;
}
#endif
spin_lock(&target->obd_dev_lock);
if (test_bit(OBDF_RECOVERING, target->obd_flags)) {
CERROR("%s: Aborting recovery\n", target->obd_name);
- target->obd_abort_recovery = 1;
+ set_bit(OBDF_ABORT_RECOVERY, target->obd_flags);
wake_up(&target->obd_next_transno_waitq);
}
spin_unlock(&target->obd_dev_lock);
return;
}
clear_bit(OBDF_RECOVERING, obd->obd_flags);
- obd->obd_abort_recovery = 0;
+ clear_bit(OBDF_ABORT_RECOVERY, obd->obd_flags);
obd->obd_abort_mdt_recovery = 0;
spin_unlock(&obd->obd_dev_lock);
return;
spin_lock(&obd->obd_dev_lock);
- if (!test_bit(OBDF_RECOVERING, obd->obd_flags) || obd->obd_abort_recovery) {
+ if (!test_bit(OBDF_RECOVERING, obd->obd_flags) ||
+ test_bit(OBDF_ABORT_RECOVERY, obd->obd_flags)) {
spin_unlock(&obd->obd_dev_lock);
return;
}
timeout_t left;
spin_lock(&obd->obd_dev_lock);
- if (!test_bit(OBDF_RECOVERING, obd->obd_flags) || obd->obd_abort_recovery ||
+ if (!test_bit(OBDF_RECOVERING, obd->obd_flags) ||
+ test_bit(OBDF_ABORT_RECOVERY, obd->obd_flags) ||
obd->obd_stopping) {
spin_unlock(&obd->obd_dev_lock);
return;
} else if (atomic_read(&obd->obd_lock_replay_clients) == 0) {
CDEBUG(D_HA, "waking for completed lock replay\n");
wake_up = 1;
- } else if (obd->obd_abort_recovery) {
+ } else if (test_bit(OBDF_ABORT_RECOVERY, obd->obd_flags)) {
CDEBUG(D_HA, "waking for aborted recovery\n");
wake_up = 1;
} else if (obd->obd_recovery_expired) {
"%s: there are still update replay (%#llx)in the queue.\n",
obd->obd_name, next_update_transno);
} else {
- obd->obd_abort_recovery = 1;
+ set_bit(OBDF_ABORT_RECOVERY, obd->obd_flags);
spin_unlock(&obd->obd_recovery_task_lock);
CWARN("%s recovery is aborted by hard timeout\n",
obd->obd_name);
"connected %d stale %d max_recoverable_clients %d abort %d expired %d\n",
clnts, obd->obd_stale_clients,
atomic_read(&obd->obd_max_recoverable_clients),
- obd->obd_abort_recovery, obd->obd_recovery_expired);
+ test_bit(OBDF_ABORT_RECOVERY, obd->obd_flags), obd->obd_recovery_expired);
if (!obd_recovery_abort(obd) && !obd->obd_recovery_expired) {
LASSERT(clnts <=
tgt_boot_epoch_update(lut);
/* cancel update llogs upon recovery abort */
- if (obd->obd_abort_recovery || obd->obd_abort_mdt_recovery)
+ if (test_bit(OBDF_ABORT_RECOVERY, obd->obd_flags) || obd->obd_abort_mdt_recovery)
obd->obd_type->typ_dt_ops->o_iocontrol(OBD_IOC_LLOG_CANCEL,
obd->obd_self_export,
0, trd, NULL);
*/
spin_lock(&obd->obd_dev_lock);
clear_bit(OBDF_RECOVERING, obd->obd_flags);
- obd->obd_abort_recovery = 0;
+ clear_bit(OBDF_ABORT_RECOVERY, obd->obd_flags);
obd->obd_abort_mdt_recovery = 0;
spin_unlock(&obd->obd_dev_lock);
spin_lock(&obd->obd_recovery_task_lock);
spin_lock(&obd->obd_dev_lock);
if (test_bit(OBDF_RECOVERING, obd->obd_flags)) {
CERROR("%s: Aborting recovery\n", obd->obd_name);
- obd->obd_abort_recovery = 1;
+ set_bit(OBDF_ABORT_RECOVERY, obd->obd_flags);
wake_up(&obd->obd_next_transno_waitq);
}
spin_unlock(&obd->obd_dev_lock);