iomap: handle error conditions more gracefully in iomap_to_bh
authorChristoph Hellwig <hch@lst.de>
Tue, 12 Sep 2023 17:05:48 +0000 (10:05 -0700)
committerDarrick J. Wong <djwong@kernel.org>
Tue, 12 Sep 2023 17:05:48 +0000 (10:05 -0700)
commit4aa8cdd5e523d2d8ec8df29dcd696bf207d7a494
tree2db21c6cdd86acbe43a8dec894160096f832e65a
parent0bb80ecc33a8fb5a682236443c1e740d5c917d1d
iomap: handle error conditions more gracefully in iomap_to_bh

iomap_to_bh currently BUG()s when the passed in block number is not
in the iomap.  For file systems that have proper synchronization this
should never happen and so far hasn't in mainline, but for block devices
size changes aren't fully synchronized against ongoing I/O.  Instead
of BUG()ing in this case, return -EIO to the caller, which already has
proper error handling.  While we're at it, also return -EIO for an
unknown iomap state instead of returning garbage.

Fixes: 487c607df790 ("block: use iomap for writes to block devices")
Reported-by: syzbot+4a08ffdf3667b36650a1@syzkaller.appspotmail.com
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Damien Le Moal <dlemoal@kernel.org>
fs/buffer.c