Message ID | 20240119163434.1357155-1-willy@infradead.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | block: Remove unnecessary unlikely() | expand |
On 1/19/24 9:34 AM, Matthew Wilcox (Oracle) wrote: > Jens added unlikely() thinking that this was an error path. It's > actually just the end of the iteration, so does not warrant an > unlikely(). This is because the previous fix (or my attempt at least) didn't do the i >= vcnt, it checked for an empty bio instead. Which then definitely did make it an error/unlikely path, but obviously this one is not. The bio iterator stuff has gotten terribly unwieldy and complicated, and not very efficient either. But I guess that's a story for another investigation...
On 1/19/24 9:41 AM, Jens Axboe wrote: > On 1/19/24 9:34 AM, Matthew Wilcox (Oracle) wrote: >> Jens added unlikely() thinking that this was an error path. It's >> actually just the end of the iteration, so does not warrant an >> unlikely(). > > This is because the previous fix (or my attempt at least) didn't do the > i >= vcnt, it checked for an empty bio instead. Which then definitely > did make it an error/unlikely path, but obviously this one is not. Just out of curiosity, I did some branch profiling on just normal operations of on my box. Of the ~900K times we hit this path, 10% of them ended up in that branch, and 90% of them did not. While it's not an error path, that does seem rather unlikely. Sure, for single entries, it'll be hit 50% of the time, but for most normal IO it'd definitely be less than 50%, and as per above non-scientif profiling, it's around 10%.
diff --git a/include/linux/bio.h b/include/linux/bio.h index 875d792bffff..1518f1201ddd 100644 --- a/include/linux/bio.h +++ b/include/linux/bio.h @@ -286,7 +286,7 @@ static inline void bio_first_folio(struct folio_iter *fi, struct bio *bio, { struct bio_vec *bvec = bio_first_bvec_all(bio) + i; - if (unlikely(i >= bio->bi_vcnt)) { + if (i >= bio->bi_vcnt) { fi->folio = NULL; return; }
Jens added unlikely() thinking that this was an error path. It's actually just the end of the iteration, so does not warrant an unlikely(). Fixes: 7bed6f3d08b7 ("block: Fix iterating over an empty bio with bio_for_each_folio_all") Cc: stable@vger.kernel.org Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> --- include/linux/bio.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)