[Lustre-discuss] Problems patching fs/jbd/checkpoint.c in RHEL4 2.6.9-67.0.4 kernel
Chris Worley
worleys at gmail.com
Tue Mar 18 10:44:55 PDT 2008
My manual patching of the rejects in checkpoint.c didn't work out; a
delete of 10,000 files caused a panic (in any ext fs, not just
Lustre).
In the new checkpoint.c, two routines expected by the patch no longer
exist: __cleanup_transaction and __flush_buffer.
I can avoid the panic if I omit (don't try to manually patch) the following:
Index: linux-2.6.9/fs/jbd/checkpoint.c
===================================================================
--- linux-2.6.9.orig/fs/jbd/checkpoint.c
+++ linux-2.6.9/fs/jbd/checkpoint.c
@@ -166,6 +166,7 @@ static int __cleanup_transaction(journal
transaction_t *t = jh->b_transaction;
tid_t tid = t->t_tid;
+ transaction->t_chp_stats.cs_forced_to_close++;
spin_unlock(&journal->j_list_lock);
jbd_unlock_bh_state(bh);
log_start_commit(journal, tid);
@@ -226,7 +227,7 @@ __flush_batch(journal_t *journal, struct
*/
static int __flush_buffer(journal_t *journal, struct journal_head *jh,
struct buffer_head **bhs, int *batch_count,
- int *drop_count)
+ int *drop_count, transaction_t *transaction)
{
struct buffer_head *bh = jh2bh(jh);
int ret = 0;
@@ -247,6 +248,7 @@ static int __flush_buffer(journal_t *jou
set_buffer_jwrite(bh);
bhs[*batch_count] = bh;
jbd_unlock_bh_state(bh);
+ transaction->t_chp_stats.cs_written++;
(*batch_count)++;
if (*batch_count == NR_BATCH) {
__flush_batch(journal, bhs, batch_count);
@@ -315,6 +317,8 @@ int log_do_checkpoint(journal_t *journal
tid_t this_tid;
transaction = journal->j_checkpoint_transactions;
+ if (transaction->t_chp_stats.cs_chp_time == 0)
+ transaction->t_chp_stats.cs_chp_time = CURRENT_MSECS;
this_tid = transaction->t_tid;
jh = transaction->t_checkpoint_list;
this_tid = transaction->t_tid;
jh = transaction->t_checkpoint_list;
last_jh = jh->b_cpprev;
@@ -331,7 +335,8 @@ int log_do_checkpoint(journal_t *journal
retry = 1;
break;
}
- retry = __flush_buffer(journal, jh, bhs,
&batch_count, &drop_count);
+ retry = __flush_buffer(journal, jh, bhs, &batch_count,
+ &drop_count, transaction);
} while (jh != last_jh && !retry);
if (batch_count) {
How critical are/were these patches?
Thanks,
Chris
More information about the lustre-discuss
mailing list