From: Mike Snitzer <snitzer@redhat.com>
To: axboe@kernel.dk
Cc: Robert Elliott <elliott@hp.com>,
dm-devel@redhat.com, Jan Kara <jack@suse.cz>,
hch@lst.de, Kent Overstreet <kent.overstreet@gmail.com>
Subject: Re: linux-next dm-thinp regression due to "bio: skip atomic inc/dec of ->bi_remaining for non-chains"
Date: Wed, 13 May 2015 23:29:53 -0400 [thread overview]
Message-ID: <20150514032953.GB17947@redhat.com> (raw)
In-Reply-To: <20150514024953.GA17947@redhat.com>
On Wed, May 13 2015 at 10:49pm -0400,
Mike Snitzer <snitzer@redhat.com> wrote:
> As you know commit c4cf5261 avoids the atomic operations during endio
> unless BIO_CHAIN is set. It only gets set if bio_inc_remaining() is
> used. But bio_inc_remaining() is only used _after_ the initial endio --
> we needed BIO_CHAIN set earlier for these cases. Seems we need a new
> function to register the intent to cascade endios (to allow for proper
> accounting)?
>
> We could then switch callers to something like:
>
> bio_set_chain(bio); // establishes BIO_CHAIN iff __bio_remaining is 1?
> old = io->bi_end_io;
> bio->bi_end_io = new;
>
> in new():
> bio->bi_end_io = old;
> bio_inc_remaining(bio)
>
> Anyway, not sure about the proper fix -- I do know this commit is a
> definite regression (but it does nicely avoid the costly atomics ;)
Just adding this to dm-thin.c:save_and_set_endio() fixed it:
bio->bi_flags |= (1 << BIO_CHAIN);
(setting a bit doesn't need a bio_set_chain fn like I suggested above).
But, all relevant callers would need this treatment (I'd imagine
bio_endio_nodec callers need help too? -- either that or __bi_remaining
is completely irrelevant for all old users except for bio_chain()).
next prev parent reply other threads:[~2015-05-14 3:29 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-05-13 19:28 linux-next dm-thinp regression due to "bio: skip atomic inc/dec of ->bi_remaining for non-chains" Mike Snitzer
2015-05-14 2:49 ` Mike Snitzer
2015-05-14 3:29 ` Mike Snitzer [this message]
2015-05-14 7:58 ` Jan Kara
2015-05-14 15:05 ` Mike Snitzer
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=20150514032953.GB17947@redhat.com \
--to=snitzer@redhat.com \
--cc=axboe@kernel.dk \
--cc=dm-devel@redhat.com \
--cc=elliott@hp.com \
--cc=hch@lst.de \
--cc=jack@suse.cz \
--cc=kent.overstreet@gmail.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 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.