diff -rup linux-2.4.24.orig/fs/buffer.c linux-2.4.24.new/fs/buffer.c
--- linux-2.4.24.orig/fs/buffer.c       Fri Nov 28 21:26:21 2003
+++ linux-2.4.24.new/fs/buffer.c        Tue Mar 16 13:12:32 2004
@@ -763,6 +763,7 @@ void init_buffer(struct buffer_head *bh,
       bh->b_list = BUF_CLEAN;
       bh->b_end_io = handler;
       bh->b_private = private;
+       bh->b_journal_head = NULL;
}

static void end_buffer_io_async(struct buffer_head * bh, int uptodate)
diff -rup linux-2.4.24.orig/fs/jbd/journal.c linux-2.4.24.new/fs/jbd/journal.c
--- linux-2.4.24.orig/fs/jbd/journal.c  Fri Nov 28 21:26:21 2003
+++ linux-2.4.24.new/fs/jbd/journal.c   Tue Mar 16 13:12:32 2004
@@ -1802,9 +1802,9 @@ struct journal_head *journal_add_journal

               if (buffer_jbd(bh)) {
                       /* Someone did it for us! */
-                       J_ASSERT_BH(bh, bh->b_private != NULL);
+                       J_ASSERT_BH(bh, bh->b_journal_head != NULL);
                       journal_free_journal_head(jh);
-                       jh = bh->b_private;
+                       jh = bh->b_journal_head;
               } else {
                       /*
                        * We actually don't need jh_splice_lock when
@@ -1812,7 +1812,7 @@ struct journal_head *journal_add_journal
                        */
                       spin_lock(&jh_splice_lock);
                       set_bit(BH_JBD, &bh->b_state);
-                       bh->b_private = jh;
+                       bh->b_journal_head = jh;
                       jh->b_bh = bh;
                       atomic_inc(&bh->b_count);
                       spin_unlock(&jh_splice_lock);
@@ -1821,7 +1821,7 @@ struct journal_head *journal_add_journal
       }
       jh->b_jcount++;
       spin_unlock(&journal_datalist_lock);
-       return bh->b_private;
+       return bh->b_journal_head;
}

/*
@@ -1854,7 +1854,7 @@ void __journal_remove_journal_head(struc
                       J_ASSERT_BH(bh, jh2bh(jh) == bh);
                       BUFFER_TRACE(bh, "remove journal_head");
                       spin_lock(&jh_splice_lock);
-                       bh->b_private = NULL;
+                       bh->b_journal_head = NULL;
                       jh->b_bh = NULL;        /* debug, really */
                       clear_bit(BH_JBD, &bh->b_state);
                       __brelse(bh);
diff -rup linux-2.4.24.orig/include/linux/fs.h linux-2.4.24.new/include/linux/fs.h
--- linux-2.4.24.orig/include/linux/fs.h        Fri Nov 28 21:26:21 2003
+++ linux-2.4.24.new/include/linux/fs.h Tue Mar 16 13:12:32 2004
@@ -265,7 +265,7 @@ struct buffer_head {
       struct page *b_page;            /* the page this bh is mapped to */
       void (*b_end_io)(struct buffer_head *bh, int uptodate); /* I/O completion */
       void *b_private;                /* reserved for b_end_io */
-
+       void *b_journal_head;           /* ext3 journal_heads */
       unsigned long b_rsector;        /* Real buffer location on disk */
       wait_queue_head_t b_wait;

diff -rup linux-2.4.24.orig/include/linux/jbd.h linux-2.4.24.new/include/linux/jbd.h
--- linux-2.4.24.orig/include/linux/jbd.h       Fri Jun 13 18:51:38 2003
+++ linux-2.4.24.new/include/linux/jbd.h        Tue Mar 16 13:12:32 2004
@@ -311,7 +311,7 @@ static inline struct buffer_head *jh2bh(

static inline struct journal_head *bh2jh(struct buffer_head *bh)
{
-       return bh->b_private;
+       return bh->b_journal_head;
}

#define HAVE_JOURNAL_CALLBACK_STATUS