public inbox for linux-xfs@vger.kernel.org
 help / color / mirror / Atom feed
From: Dave Chinner <david@fromorbit.com>
To: Christoph Hellwig <hch@infradead.org>
Cc: xfs@oss.sgi.com
Subject: Re: [PATCH 8/9] xfs: introduce xfs_buf_submit[_wait]
Date: Sat, 16 Aug 2014 09:37:43 +1000	[thread overview]
Message-ID: <20140815233743.GX26465@dastard> (raw)
In-Reply-To: <20140815131020.GB27856@infradead.org>

On Fri, Aug 15, 2014 at 06:10:20AM -0700, Christoph Hellwig wrote:
> > diff --git a/fs/xfs/xfs_bmap_util.c b/fs/xfs/xfs_bmap_util.c
> > index 2f1e30d..c53cc03 100644
> > --- a/fs/xfs/xfs_bmap_util.c
> > +++ b/fs/xfs/xfs_bmap_util.c
> > @@ -1157,12 +1157,7 @@ xfs_zero_remaining_bytes(
> 
> xfs_zero_remaining_bytes really should be switched to
> xfs_buf_read_uncached + xfs_bwrite instead of all this mess just to
> micro-optimize a few memory allocation away that don't even happen for
> the common case of blocksize == PAGE_SIZE.  I'm not even sure we
> should be using the buffer cache at all for something inside a regular
> file, but that's a discussion for another time.

xfs_zero_remaining_bytes is uses an uncached buffer, so we're not
using the buffer cache at all for the blocks being zeroed. That is
why it does the flag twiddling dance it does. However, consolidation
all the different block zeroing functions we have is an exercise for
a different day....

> 
> >  void
> > +xfs_buf_submit(
> > +	struct xfs_buf	*bp)
> >  {
> >  	trace_xfs_buf_iorequest(bp, _RET_IP_);
> 
> I suspect these two should have properly name and separate trace
> points now?

Yes. Just haven't got to it.

> It also seems like a lot of the guts of the two functions are
> still the same, so factoring that into a __xfs_buf_submit helper
> would be useful.

Possibly, if we can ensure that the helper it never called directly
by any other code. Then we end up back in the mess we are currently
in.

> > +	 * If _xfs_buf_ioapply failed, 
> > +	 * we can get back here with only the IO
> >  	 * reference we took above.  _xfs_buf_ioend will drop it to zero, so
> >  	 * we'd better run completion processing synchronously so that the we
> > +	 * don't return to the caller with completion still pending.
> > +	 * this allows the caller to check b_error safely without
> > +	 * waiting
> >  	 */
> >  	if (atomic_dec_and_test(&bp->b_io_remaining) == 1) {
> >  		if (bp->b_error || !(bp->b_flags & XBF_ASYNC))
> 
> I don't think the !ASYNC case can happen here, can it?

Right, I forget to clean that part up when I was splitting up the
functions.

> 
> > +		if (!wait)
> >  			list_del_init(&bp->b_list);
> > +		else
> > +			xfs_buf_hold(bp);
> 
> Maybe switch this around to avoid the negated condition in the if else?
> 
> Also might this be worth a change of it's own?

Yeah, that's probably a good idea - the algorithm change is not
directly related to the interface change.

Cheers,

Dave.
-- 
Dave Chinner
david@fromorbit.com

_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs

  reply	other threads:[~2014-08-15 23:37 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-08-15  6:38 [RFC PATCH 0/9] xfs: clean up xfs_buf io interfaces Dave Chinner
2014-08-15  6:38 ` [PATCH 1/9] xfs: synchronous buffer IO needs a reference Dave Chinner
2014-08-15 13:18   ` Brian Foster
2014-08-15 23:17     ` Dave Chinner
2014-08-18 14:15       ` Brian Foster
2014-08-29  0:18   ` Christoph Hellwig
2014-08-15  6:39 ` [PATCH 2/9] xfs: xfs_buf_ioend and xfs_buf_iodone_work duplicate functionality Dave Chinner
2014-08-15 13:18   ` Brian Foster
2014-08-15 23:21     ` Dave Chinner
2014-08-18 14:15       ` Brian Foster
2014-08-29  0:22   ` Christoph Hellwig
2014-08-29  0:55     ` Dave Chinner
2014-08-15  6:39 ` [PATCH 3/9] xfs: rework xfs_buf_bio_endio error handling Dave Chinner
2014-08-15 13:18   ` Brian Foster
2014-08-15 23:25     ` Dave Chinner
2014-08-29  0:23   ` Christoph Hellwig
2014-08-15  6:39 ` [PATCH 4/9] xfs: kill xfs_bdstrat_cb Dave Chinner
2014-08-29  0:24   ` Christoph Hellwig
2014-08-15  6:39 ` [PATCH 5/9] xfs: xfs_bioerror can die Dave Chinner
2014-08-15 14:35   ` Brian Foster
2014-08-15 23:27     ` Dave Chinner
2014-08-29  0:28   ` Christoph Hellwig
2014-08-29  1:05     ` Dave Chinner
2014-08-15  6:39 ` [PATCH 6/9] xfs: kill xfs_bioerror_relse Dave Chinner
2014-08-29  0:32   ` Christoph Hellwig
2014-08-29  1:12     ` Dave Chinner
2014-08-29 18:26       ` Christoph Hellwig
2014-08-30  0:05         ` Dave Chinner
2014-08-15  6:39 ` [PATCH 7/9] xfs: clean up xfs_trans_buf_read_map Dave Chinner
2014-08-15  6:39 ` [PATCH 8/9] xfs: introduce xfs_buf_submit[_wait] Dave Chinner
2014-08-15 13:10   ` Christoph Hellwig
2014-08-15 23:37     ` Dave Chinner [this message]
2014-08-16  4:55       ` Christoph Hellwig
2014-08-15 14:35   ` Brian Foster
2014-08-15 23:39     ` Dave Chinner
2014-08-18 14:16       ` Brian Foster
2014-08-15 16:13   ` Brian Foster
2014-08-15 23:58     ` Dave Chinner
2014-08-18 14:26       ` Brian Foster
2014-08-15  6:39 ` [PATCH 9/9] xfs: check xfs_buf_read_uncached returns correctly Dave Chinner
2014-08-15 12:56   ` Christoph Hellwig
2014-08-15 23:58     ` Dave Chinner
2014-08-29  0:37       ` Christoph Hellwig

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=20140815233743.GX26465@dastard \
    --to=david@fromorbit.com \
    --cc=hch@infradead.org \
    --cc=xfs@oss.sgi.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox