mirror of
https://github.com/torvalds/linux.git
synced 2024-11-21 19:41:42 +00:00
block: Rework bio_split() return value
Instead of returning an inconclusive value of NULL for an error in calling bio_split(), return a ERR_PTR() always. Also remove the BUG_ON() calls, and WARN_ON_ONCE() instead. Indeed, since almost all callers don't check the return code from bio_split(), we'll crash anyway (for those failures). Fix up the only user which checks bio_split() return code today (directly or indirectly), blk_crypto_fallback_split_bio_if_needed(). The md/bcache code does check the return code in cached_dev_cache_miss() -> bio_next_split() -> bio_split(), but only to see if there was a split, so there would be no change in behaviour here (when returning a ERR_PTR()). Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com> Signed-off-by: John Garry <john.g.garry@oracle.com> Link: https://lore.kernel.org/r/20241111112150.3756529-2-john.g.garry@oracle.com Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
d369735e02
commit
e546fe1da9
10
block/bio.c
10
block/bio.c
@ -1665,16 +1665,18 @@ struct bio *bio_split(struct bio *bio, int sectors,
|
||||
{
|
||||
struct bio *split;
|
||||
|
||||
BUG_ON(sectors <= 0);
|
||||
BUG_ON(sectors >= bio_sectors(bio));
|
||||
if (WARN_ON_ONCE(sectors <= 0))
|
||||
return ERR_PTR(-EINVAL);
|
||||
if (WARN_ON_ONCE(sectors >= bio_sectors(bio)))
|
||||
return ERR_PTR(-EINVAL);
|
||||
|
||||
/* Zone append commands cannot be split */
|
||||
if (WARN_ON_ONCE(bio_op(bio) == REQ_OP_ZONE_APPEND))
|
||||
return NULL;
|
||||
return ERR_PTR(-EINVAL);
|
||||
|
||||
split = bio_alloc_clone(bio->bi_bdev, bio, gfp, bs);
|
||||
if (!split)
|
||||
return NULL;
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
split->bi_iter.bi_size = sectors << 9;
|
||||
|
||||
|
@ -226,7 +226,7 @@ static bool blk_crypto_fallback_split_bio_if_needed(struct bio **bio_ptr)
|
||||
|
||||
split_bio = bio_split(bio, num_sectors, GFP_NOIO,
|
||||
&crypto_bio_split);
|
||||
if (!split_bio) {
|
||||
if (IS_ERR(split_bio)) {
|
||||
bio->bi_status = BLK_STS_RESOURCE;
|
||||
return false;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user