tid_t tid = 0;
        unsigned long nr_freed = 0;
        unsigned long freed;
+       bool first_set = false;
 
 again:
        spin_lock(&journal->j_list_lock);
        else
                transaction = journal->j_checkpoint_transactions;
 
-       if (!first_tid)
+       if (!first_set) {
                first_tid = transaction->t_tid;
+               first_set = true;
+       }
        last_transaction = journal->j_checkpoint_transactions->t_cpprev;
        next_transaction = transaction;
        last_tid = last_transaction->t_tid;
        spin_unlock(&journal->j_list_lock);
        cond_resched();
 
-       if (*nr_to_scan && next_tid)
+       if (*nr_to_scan && journal->j_shrink_transaction)
                goto again;
 out:
        trace_jbd2_shrink_checkpoint_list(journal, first_tid, tid, last_tid,