On Thu, Oct 16, 2008 at 12:40:11PM -0700, Joel Becker wrote: > On Thu, Oct 16, 2008 at 01:42:41PM -0400, Theodore Tso wrote: > > On Wed, Oct 08, 2008 at 04:17:52PM -0700, Joel Becker wrote: > > > In other words, I think that the commit trigger is safe in all > > > circumstances once moved up in journal_commit_transaction(). I'll be > > > cooking that up shortly. > > > > Have you had a chance to look at this? Here's something which hasn't > > been compile-tested yet, but it didn't take me long... > > Actually, I've had the fixed up patch for a week, tested even. The testing was with this simple printk patch. I just watched the journal blocks go out. Things like kernel untars, etc. Joel From: Joel Becker <joel.becker@xxxxxxxxxx> Date: Thu, 11 Sep 2008 15:53:07 -0700 Subject: [PATCH] ocfs2: Use the new jbd_journal_set_commit_trigger() to printk. Just a placeholder trigger set that prints Signed-off-by: Joel Becker <joel.becker@xxxxxxxxxx> --- fs/ocfs2/journal.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 51 insertions(+), 0 deletions(-) diff --git a/fs/ocfs2/journal.c b/fs/ocfs2/journal.c index 81e4067..f56666b 100644 --- a/fs/ocfs2/journal.c +++ b/fs/ocfs2/journal.c @@ -357,6 +357,51 @@ bail: return status; } +struct ocfs2_triggers { + struct jbd2_buffer_trigger_type ot_triggers; + int ot_offset; +}; + +static inline struct ocfs2_triggers *to_ocfs2_trigger(struct jbd2_buffer_trigger_type *triggers) +{ + return container_of(triggers, struct ocfs2_triggers, ot_triggers); +} + +static void ocfs2_commit_trigger(struct jbd2_buffer_trigger_type *triggers, + struct buffer_head *bh, + void *data, size_t size) +{ + struct ocfs2_triggers *ot = to_ocfs2_trigger(triggers); + + mlog(ML_NOTICE, "bh = 0x%lx, data = 0x%lx, size = %u, offset = %d\n", + (unsigned long)bh, (unsigned long)data, size, ot->ot_offset); +} + +static void ocfs2_abort_trigger(struct jbd2_buffer_trigger_type *triggers, + struct buffer_head *bh) +{ + struct ocfs2_triggers *ot = to_ocfs2_trigger(triggers); + + mlog(ML_NOTICE, "bh = 0x%lx, offset = %d\n", (unsigned long)bh, ot->ot_offset); +} + +static struct ocfs2_triggers inode_triggers = { + .ot_triggers = { + .t_commit = ocfs2_commit_trigger, + .t_abort = ocfs2_abort_trigger, + }, + .ot_offset = 10, /* Garbage */ +}; + +static struct ocfs2_triggers other_triggers = { + .ot_triggers = { + .t_commit = ocfs2_commit_trigger, + .t_abort = ocfs2_abort_trigger, + }, + .ot_offset = 20, /* Different garbage */ +}; + + int ocfs2_journal_access(handle_t *handle, struct inode *inode, struct buffer_head *bh, @@ -406,6 +451,12 @@ int ocfs2_journal_access(handle_t *handle, status = -EINVAL; mlog(ML_ERROR, "Uknown access type!\n"); } + if (!status) + jbd2_journal_set_triggers(bh, + bh->b_blocknr == + OCFS2_I(inode)->ip_blkno ? + &inode_triggers.ot_triggers : + &other_triggers.ot_triggers); mutex_unlock(&OCFS2_I(inode)->ip_io_mutex); if (status < 0) -- 1.5.6.5 -- "In a crisis, don't hide behind anything or anybody. They're going to find you anyway." - Paul "Bear" Bryant Joel Becker Principal Software Developer Oracle E-mail: joel.becker@xxxxxxxxxx Phone: (650) 506-8127 -- To unsubscribe from this list: send the line "unsubscribe linux-ext4" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html