All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ritesh Harjani <riteshh@linux.ibm.com>
To: Jan Kara <jack@suse.cz>
Cc: linux-ext4@vger.kernel.org,
	Harshad Shirwadkar <harshadshirwadkar@gmail.com>,
	"Theodore Ts'o" <tytso@mit.edu>,
	linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [RFC 3/9] ext4: Add couple of more fast_commit tracepoints
Date: Wed, 23 Feb 2022 15:41:59 +0530	[thread overview]
Message-ID: <20220223101159.ekwbylvbmec5v35q@riteshh-domain> (raw)
In-Reply-To: <20220223094057.53zcovnazrqwbngw@quack3.lan>

On 22/02/23 10:40AM, Jan Kara wrote:
> On Wed 23-02-22 02:04:11, Ritesh Harjani wrote:
> > This adds two more tracepoints for ext4_fc_track_template() &
> > ext4_fc_cleanup() which are helpful in debugging some fast_commit issues.
> >
> > Signed-off-by: Ritesh Harjani <riteshh@linux.ibm.com>
>
> So why is this more useful than trace_ext4_fc_track_range() and other
> tracepoints? I don't think it provides any more information? What am I
> missing?

Thanks Jan for all the reviews.

So ext4_fc_track_template() adds almost all required information
(including the caller info) in this one trace point along with transaction tid
which is useful for tracking issue similar to what is mentioned in Patch-9.

(race with if inode is part of two transactions tid where jbd2 full commit
may begin for txn n-1 while inode is still in sbi->s_fc_q[MAIN])

And similarly ext4_fc_cleanup() helps with that information about which tid
completed and whether it was called from jbd2 full commit or from fast_commit.

-ritesh

>
> 								Honza
>
> > ---
> >  fs/ext4/fast_commit.c       |  3 ++
> >  include/trace/events/ext4.h | 67 +++++++++++++++++++++++++++++++++++++
> >  2 files changed, 70 insertions(+)
> >
> > diff --git a/fs/ext4/fast_commit.c b/fs/ext4/fast_commit.c
> > index 5ac594e03402..bf70879bb4fe 100644
> > --- a/fs/ext4/fast_commit.c
> > +++ b/fs/ext4/fast_commit.c
> > @@ -386,6 +386,8 @@ static int ext4_fc_track_template(
> >  	if (ext4_test_mount_flag(inode->i_sb, EXT4_MF_FC_INELIGIBLE))
> >  		return -EINVAL;
> >
> > +	trace_ext4_fc_track_template(handle, inode, __fc_track_fn, enqueue);
> > +
> >  	tid = handle->h_transaction->t_tid;
> >  	mutex_lock(&ei->i_fc_lock);
> >  	if (tid == ei->i_sync_tid) {
> > @@ -1241,6 +1243,7 @@ static void ext4_fc_cleanup(journal_t *journal, int full, tid_t tid)
> >  	if (full && sbi->s_fc_bh)
> >  		sbi->s_fc_bh = NULL;
> >
> > +	trace_ext4_fc_cleanup(journal, full, tid);
> >  	jbd2_fc_release_bufs(journal);
> >
> >  	spin_lock(&sbi->s_fc_lock);
> > diff --git a/include/trace/events/ext4.h b/include/trace/events/ext4.h
> > index 17fb9c506e8a..cd09dccea502 100644
> > --- a/include/trace/events/ext4.h
> > +++ b/include/trace/events/ext4.h
> > @@ -2855,6 +2855,73 @@ TRACE_EVENT(ext4_fc_track_range,
> >  		      __entry->end)
> >  	);
> >
> > +TRACE_EVENT(ext4_fc_track_template,
> > +	TP_PROTO(handle_t *handle, struct inode *inode,
> > +		 void *__fc_track_fn, int enqueue),
> > +
> > +	TP_ARGS(handle, inode, __fc_track_fn, enqueue),
> > +
> > +	TP_STRUCT__entry(
> > +		__field(dev_t, dev)
> > +		__field(tid_t, t_tid)
> > +		__field(ino_t, i_ino)
> > +		__field(tid_t, i_sync_tid)
> > +		__field(void *, __fc_track_fn)
> > +		__field(int, enqueue)
> > +		__field(bool, jbd2_ongoing)
> > +		__field(bool, fc_ongoing)
> > +	),
> > +
> > +	TP_fast_assign(
> > +		struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
> > +		struct ext4_inode_info *ei = EXT4_I(inode);
> > +
> > +		__entry->dev = inode->i_sb->s_dev;
> > +		__entry->t_tid = handle->h_transaction->t_tid;
> > +		__entry->i_ino = inode->i_ino;
> > +		__entry->i_sync_tid = ei->i_sync_tid;
> > +		__entry->__fc_track_fn = __fc_track_fn;
> > +		__entry->enqueue = enqueue;
> > +		__entry->jbd2_ongoing =
> > +		    sbi->s_journal->j_flags & JBD2_FULL_COMMIT_ONGOING;
> > +		__entry->fc_ongoing =
> > +		    sbi->s_journal->j_flags & JBD2_FAST_COMMIT_ONGOING;
> > +	),
> > +
> > +	TP_printk("dev %d,%d, t_tid %u, ino %lu, i_sync_tid %u, "
> > +		  "track_fn %pS, enqueue %d, jbd2_ongoing %d, fc_ongoing %d",
> > +		  MAJOR(__entry->dev), MINOR(__entry->dev),
> > +		  __entry->t_tid, __entry->i_ino, __entry->i_sync_tid,
> > +		  (void *)__entry->__fc_track_fn, __entry->enqueue,
> > +		  __entry->jbd2_ongoing, __entry->fc_ongoing)
> > +	);
> > +
> > +TRACE_EVENT(ext4_fc_cleanup,
> > +	TP_PROTO(journal_t *journal, int full, tid_t tid),
> > +
> > +	TP_ARGS(journal, full, tid),
> > +
> > +	TP_STRUCT__entry(
> > +		__field(dev_t, dev)
> > +		__field(int, j_fc_off)
> > +		__field(int, full)
> > +		__field(tid_t, tid)
> > +	),
> > +
> > +	TP_fast_assign(
> > +		struct super_block *sb = journal->j_private;
> > +
> > +		__entry->dev = sb->s_dev;
> > +		__entry->j_fc_off = journal->j_fc_off;
> > +		__entry->full = full;
> > +		__entry->tid = tid;
> > +	),
> > +
> > +	TP_printk("dev %d,%d, j_fc_off %d, full %d, tid %u",
> > +		  MAJOR(__entry->dev), MINOR(__entry->dev),
> > +		  __entry->j_fc_off, __entry->full, __entry->tid)
> > +	);
> > +
> >  TRACE_EVENT(ext4_update_sb,
> >  	TP_PROTO(struct super_block *sb, ext4_fsblk_t fsblk,
> >  		 unsigned int flags),
> > --
> > 2.31.1
> >
> --
> Jan Kara <jack@suse.com>
> SUSE Labs, CR

  reply	other threads:[~2022-02-23 10:12 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-02-22 20:34 [RFC 0/9] ext4: Improve FC trace events and discuss one FC failure Ritesh Harjani
2022-02-22 20:34 ` [RFC 1/9] ext4: Remove unused enum EXT4_FC_COMMIT_FAILED Ritesh Harjani
2022-02-23  9:37   ` Jan Kara
2022-02-27 18:27     ` harshad shirwadkar
2022-02-22 20:34 ` [RFC 2/9] ext4: Fix ext4_fc_stats trace point Ritesh Harjani
2022-02-22 20:52   ` Steven Rostedt
2022-02-23  9:54   ` Jan Kara
2022-02-27 18:29     ` harshad shirwadkar
2022-02-22 20:34 ` [RFC 3/9] ext4: Add couple of more fast_commit tracepoints Ritesh Harjani
2022-02-23  9:40   ` Jan Kara
2022-02-23 10:11     ` Ritesh Harjani [this message]
2022-02-23 11:53       ` Jan Kara
2022-02-23 12:04         ` Ritesh Harjani
2022-02-22 20:34 ` [RFC 4/9] ext4: Do not call FC trace event if FS does not support FC Ritesh Harjani
2022-02-23  9:41   ` Jan Kara
2022-02-27 18:30     ` harshad shirwadkar
2022-02-22 20:34 ` [RFC 5/9] ext4: Add commit_tid info in jbd debug log Ritesh Harjani
2022-02-23  9:42   ` Jan Kara
2022-02-27 18:31     ` harshad shirwadkar
2022-02-22 20:34 ` [RFC 6/9] ext4: Add commit tid info in ext4_fc_commit_start/stop trace events Ritesh Harjani
2022-02-23  9:44   ` Jan Kara
2022-02-27 18:31     ` harshad shirwadkar
2022-02-22 20:34 ` [RFC 7/9] ext4: Fix remaining two trace events to use same printk convention Ritesh Harjani
2022-02-23  9:45   ` Jan Kara
2022-02-27 18:32     ` harshad shirwadkar
2022-02-22 20:34 ` [RFC 8/9] ext4: Convert ext4_fc_track_dentry type events to use event class Ritesh Harjani
2022-02-23  9:49   ` Jan Kara
2022-02-27 18:35     ` harshad shirwadkar
2022-02-22 20:34 ` [RFC 9/9] ext4: fast_commit missing tracking updates to a file Ritesh Harjani
2022-02-23  3:50   ` [External] " Xin Yin
2022-02-23 13:58     ` Ritesh Harjani
2022-02-24 11:43       ` Xin Yin
2022-02-27 20:51         ` harshad shirwadkar
2022-03-09 17:48 ` [RFC 0/9] ext4: Improve FC trace events and discuss one FC failure Theodore Ts'o
2022-03-10  1:22   ` Ritesh Harjani

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220223101159.ekwbylvbmec5v35q@riteshh-domain \
    --to=riteshh@linux.ibm.com \
    --cc=harshadshirwadkar@gmail.com \
    --cc=jack@suse.cz \
    --cc=linux-ext4@vger.kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=tytso@mit.edu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.