|
@@ -2468,17 +2468,22 @@ static void nilfs_segctor_notify(struct nilfs_sc_info *sci,
|
|
|
/* Clear requests (even when the construction failed) */
|
|
|
spin_lock(&sci->sc_state_lock);
|
|
|
|
|
|
- sci->sc_state &= ~NILFS_SEGCTOR_COMMIT;
|
|
|
-
|
|
|
if (req->mode == SC_LSEG_SR) {
|
|
|
+ sci->sc_state &= ~NILFS_SEGCTOR_COMMIT;
|
|
|
sci->sc_seq_done = req->seq_accepted;
|
|
|
nilfs_segctor_wakeup(sci, req->sc_err ? : req->sb_err);
|
|
|
sci->sc_flush_request = 0;
|
|
|
- } else if (req->mode == SC_FLUSH_FILE)
|
|
|
- sci->sc_flush_request &= ~FLUSH_FILE_BIT;
|
|
|
- else if (req->mode == SC_FLUSH_DAT)
|
|
|
- sci->sc_flush_request &= ~FLUSH_DAT_BIT;
|
|
|
+ } else {
|
|
|
+ if (req->mode == SC_FLUSH_FILE)
|
|
|
+ sci->sc_flush_request &= ~FLUSH_FILE_BIT;
|
|
|
+ else if (req->mode == SC_FLUSH_DAT)
|
|
|
+ sci->sc_flush_request &= ~FLUSH_DAT_BIT;
|
|
|
|
|
|
+ /* re-enable timer if checkpoint creation was not done */
|
|
|
+ if (sci->sc_timer && (sci->sc_state & NILFS_SEGCTOR_COMMIT) &&
|
|
|
+ time_before(jiffies, sci->sc_timer->expires))
|
|
|
+ add_timer(sci->sc_timer);
|
|
|
+ }
|
|
|
spin_unlock(&sci->sc_state_lock);
|
|
|
}
|
|
|
|