On Mon, Aug 25, 2025 at 08:34:14AM -0700, Darrick J. Wong wrote: > > + case BLK_STS_NOSPC: > > + return -ENOSPC; > > + case BLK_STS_OFFLINE: > > + return -ENODEV; > > + default: > > + return -EIO; > > Well as I pointed out earlier, one interesting "quality" of the current > behavior is that online fsck captures the ENODATA and turns that into a > metadata corruption report. I'd like to keep that behavior. -EIO is just as much of a metadata corruption, so if you only catch ENODATA you're missing most of them. > > if (bio->bi_status) > > - xfs_buf_ioerror(bp, blk_status_to_errno(bio->bi_status)); > > + xfs_buf_ioerror(bp, xfs_buf_bio_status(bio)); > > I think you'd also want to wrap all the submit_bio_wait here too, right? > > Hrm, only discard bios, log writes, and zonegc use that function. Maybe > not? I think a failed log write takes down the system no matter what > error code, nobody cares about failing discard, and I think zonegc write > failures just lead to the gc ... aborting? Yes. In Linux -EIO means an unrecoverable I/O error that the lower layers gave up retrying. Not much we can do about that.