Re: [PATCH] zonefs: Call zonefs_io_error() on any error from filemap_splice_read()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 5/26/23 08:04, Damien Le Moal wrote:
> On 5/26/23 00:21, Matthew Wilcox wrote:
>> On Thu, May 25, 2023 at 09:38:57AM +0100, David Howells wrote:
>>>     
>>> Call zonefs_io_error() after getting any error from filemap_splice_read()
>>> in zonefs_file_splice_read(), including non-fatal errors such as ENOMEM,
>>> EINTR and EAGAIN.
>>>
>>> Suggested-by: Damien Le Moal <dlemoal@xxxxxxxxxx>
>>> Link: https://lore.kernel.org/r/5d327bed-b532-ad3b-a211-52ad0a3e276a@xxxxxxxxxx/
>>
>> This seems like a bizarre thing to do.  Let's suppose you got an
>> -ENOMEM.  blkdev_report_zones() is also likely to report -ENOMEM in
>> that case, which will cause a zonefs_err() to be called.  Surely
>> that can't be the desired outcome from getting -ENOMEM!
> 
> Right... What I want to make sure here is that the error we get is not the
> result of a failed IO. Beside EIO, are there any other cases ?
> I can think of at least:
> 1) -ETIMEDOUT -> the drive is not responding. In this case, calling
> zonefs_io_error() may not be useful either.
> 2) -ETIME: The IO was done with a duration limit (e.g. active time limit) and
> was aborted by the drive because it took too long. Calling zonefs_io_error() for
> this case is also not useful.
> 
> But I am thinking block layer (blk_status_t to errno conversion) here. Does the
> folio code *always* return EIO if it could not get a page/folio, regardless of
> the actual bio status ?

Replying to myself :)

iomap_read_folio() or iomap_finish_folio_read() -> folio_set_error(), which sets
PG_error. Then filemap_read_folio() will see !folio_test_uptodate(folio) and end
up returning -EIO. So if there was an IO and it failed, we always get EIO,
regardless of the actual reason for the IO failure. Right ?

-- 
Damien Le Moal
Western Digital Research




[Index of Archives]     [Linux RAID]     [Linux SCSI]     [Linux ATA RAID]     [IDE]     [Linux Wireless]     [Linux Kernel]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Device Mapper]

  Powered by Linux