On Fri, Mar 11, 2016 at 05:34:52PM +0100, Christoph Hellwig wrote: > Replace the while loop that unecessarily checks for a NULL bio in the fast > path witch a simple goto loop. s/witch/with/ ? > > Signed-off-by: Christoph Hellwig <hch@xxxxxx> > --- > block/bio.c | 35 +++++++++++++++++------------------ > 1 file changed, 17 insertions(+), 18 deletions(-) > > diff --git a/block/bio.c b/block/bio.c > index 67e51ac..e4682ec 100644 > --- a/block/bio.c > +++ b/block/bio.c > @@ -1745,26 +1745,25 @@ static inline bool bio_remaining_done(struct bio *bio) > **/ > void bio_endio(struct bio *bio) > { > - while (bio) { > - if (unlikely(!bio_remaining_done(bio))) > - break; > +again: > + if (unlikely(!bio_remaining_done(bio))) > + return; > > - /* > - * Need to have a real endio function for chained bios, > - * otherwise various corner cases will break (like stacking > - * block devices that save/restore bi_end_io) - however, we want > - * to avoid unbounded recursion and blowing the stack. Tail call > - * optimization would handle this, but compiling with frame > - * pointers also disables gcc's sibling call optimization. > - */ > - if (bio->bi_end_io == bio_chain_endio) { > - bio = __bio_chain_endio(bio); > - } else { > - if (bio->bi_end_io) > - bio->bi_end_io(bio); > - bio = NULL; > - } > + /* > + * Need to have a real endio function for chained bios, otherwise > + * various corner cases will break (like stacking block devices that > + * save/restore bi_end_io) - however, we want to avoid unbounded > + * recursion and blowing the stack. Tail call optimization would > + * handle this, but compiling with frame pointers also disables > + * gcc's sibling call optimization. > + */ > + if (bio->bi_end_io == bio_chain_endio) { > + bio = __bio_chain_endio(bio); > + goto again; > } > + > + if (bio->bi_end_io) > + bio->bi_end_io(bio); > } > EXPORT_SYMBOL(bio_endio); > > -- > 2.1.4 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-block" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html Just out of curiosity, do you have any numbers for this change? -- Johannes Thumshirn Storage jthumshirn@xxxxxxx +49 911 74053 689 SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg GF: Felix Imendörffer, Jane Smithard, Graham Norton HRB 21284 (AG Nürnberg) Key fingerprint = EC38 9CAB C2C4 F25D 8600 D0D0 0393 969D 2D76 0850 -- To unsubscribe from this list: send the line "unsubscribe linux-block" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html