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: Jan Kara <jack@suse.cz> Signed-off-by: Theodore Ts'o <tytso@mit.edu>
This commit is contained in:
parent
cc97f1a7c7
commit
50849db32a
@ -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)
|
|||||||
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)
|
|||||||
* 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);
|
|||||||
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 *);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user