Commit 50849db3 authored by Jan Kara's avatar Jan Kara Committed by Theodore Ts'o

jbd2: simplify calling convention around __jbd2_journal_clean_checkpoint_list

__jbd2_journal_clean_checkpoint_list() returns number of buffers it
freed but noone was using the value so just stop doing that. This
also allows for simplifying the calling convention for
journal_clean_once_cp_list().
Signed-off-by: default avatarJan Kara <jack@suse.cz>
Signed-off-by: default avatarTheodore Ts'o <tytso@mit.edu>
parent cc97f1a7
...@@ -421,16 +421,15 @@ int jbd2_cleanup_journal_tail(journal_t *journal) ...@@ -421,16 +421,15 @@ int jbd2_cleanup_journal_tail(journal_t *journal)
* release them. * release them.
* *
* Called with j_list_lock held. * Called with j_list_lock held.
* Returns number of buffers reaped (for debug) * Returns 1 if we freed the transaction, 0 otherwise.
*/ */
static int journal_clean_one_cp_list(struct journal_head *jh)
static int journal_clean_one_cp_list(struct journal_head *jh, int *released)
{ {
struct journal_head *last_jh; struct journal_head *last_jh;
struct journal_head *next_jh = jh; struct journal_head *next_jh = jh;
int ret, freed = 0; int ret;
int freed = 0;
*released = 0;
if (!jh) if (!jh)
return 0; return 0;
...@@ -441,11 +440,9 @@ static int journal_clean_one_cp_list(struct journal_head *jh, int *released) ...@@ -441,11 +440,9 @@ static int journal_clean_one_cp_list(struct journal_head *jh, int *released)
ret = __try_to_free_cp_buf(jh); ret = __try_to_free_cp_buf(jh);
if (!ret) if (!ret)
return freed; return freed;
freed++; if (ret == 2)
if (ret == 2) { return 1;
*released = 1; freed = 1;
return freed;
}
/* /*
* This function only frees up some memory * This function only frees up some memory
* if possible so we dont have an obligation * if possible so we dont have an obligation
...@@ -465,53 +462,48 @@ static int journal_clean_one_cp_list(struct journal_head *jh, int *released) ...@@ -465,53 +462,48 @@ static int journal_clean_one_cp_list(struct journal_head *jh, int *released)
* Find all the written-back checkpoint buffers in the journal and release them. * Find all the written-back checkpoint buffers in the journal and release them.
* *
* Called with j_list_lock held. * Called with j_list_lock held.
* Returns number of buffers reaped (for debug)
*/ */
void __jbd2_journal_clean_checkpoint_list(journal_t *journal)
int __jbd2_journal_clean_checkpoint_list(journal_t *journal)
{ {
transaction_t *transaction, *last_transaction, *next_transaction; transaction_t *transaction, *last_transaction, *next_transaction;
int ret; int ret;
int freed = 0;
int released;
transaction = journal->j_checkpoint_transactions; transaction = journal->j_checkpoint_transactions;
if (!transaction) if (!transaction)
goto out; return;
last_transaction = transaction->t_cpprev; last_transaction = transaction->t_cpprev;
next_transaction = transaction; next_transaction = transaction;
do { do {
transaction = next_transaction; transaction = next_transaction;
next_transaction = transaction->t_cpnext; next_transaction = transaction->t_cpnext;
ret = journal_clean_one_cp_list(transaction-> ret = journal_clean_one_cp_list(transaction->t_checkpoint_list);
t_checkpoint_list, &released);
/* /*
* This function only frees up some memory if possible so we * This function only frees up some memory if possible so we
* dont have an obligation to finish processing. Bail out if * dont have an obligation to finish processing. Bail out if
* preemption requested: * preemption requested:
*/ */
if (need_resched()) { if (need_resched())
freed += ret; return;
goto out; if (ret)
}
if (released) {
freed += ret;
continue; continue;
}
/* /*
* It is essential that we are as careful as in the case of * It is essential that we are as careful as in the case of
* t_checkpoint_list with removing the buffer from the list as * t_checkpoint_list with removing the buffer from the list as
* we can possibly see not yet submitted buffers on io_list * we can possibly see not yet submitted buffers on io_list
*/ */
ret += journal_clean_one_cp_list(transaction-> ret = journal_clean_one_cp_list(transaction->
t_checkpoint_io_list, &released); t_checkpoint_io_list);
freed += ret; if (need_resched())
if (need_resched() || !ret) return;
goto out; /*
* Stop scanning if we couldn't free the transaction. This
* avoids pointless scanning of transactions which still
* weren't checkpointed.
*/
if (!ret)
return;
} while (transaction != last_transaction); } while (transaction != last_transaction);
out:
return freed;
} }
/* /*
......
...@@ -1042,7 +1042,7 @@ void jbd2_update_log_tail(journal_t *journal, tid_t tid, unsigned long block); ...@@ -1042,7 +1042,7 @@ void jbd2_update_log_tail(journal_t *journal, tid_t tid, unsigned long block);
extern void jbd2_journal_commit_transaction(journal_t *); extern void jbd2_journal_commit_transaction(journal_t *);
/* Checkpoint list management */ /* Checkpoint list management */
int __jbd2_journal_clean_checkpoint_list(journal_t *journal); void __jbd2_journal_clean_checkpoint_list(journal_t *journal);
int __jbd2_journal_remove_checkpoint(struct journal_head *); int __jbd2_journal_remove_checkpoint(struct journal_head *);
void __jbd2_journal_insert_checkpoint(struct journal_head *, transaction_t *); void __jbd2_journal_insert_checkpoint(struct journal_head *, transaction_t *);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment