* [PATCH RFC] xfs: remap block layer ENODATA read errors to EIO
@ 2025-08-18 20:22 Eric Sandeen
2025-08-18 20:45 ` Darrick J. Wong
` (2 more replies)
0 siblings, 3 replies; 21+ messages in thread
From: Eric Sandeen @ 2025-08-18 20:22 UTC (permalink / raw)
To: linux-xfs@vger.kernel.org; +Cc: Donald Douwsma
We had a report that a failing scsi disk was oopsing XFS when an xattr
read encountered a media error. This is because the media error returned
-ENODATA, which we map in xattr code to -ENOATTR and treat specially.
In this particular case, it looked like:
xfs_attr_leaf_get()
error = xfs_attr_leaf_hasname(args, &bp);
// here bp is NULL, error == -ENODATA from disk failure
// but we define ENOATTR as ENODATA, so ...
if (error == -ENOATTR) {
// whoops, surprise! bp is NULL, OOPS here
xfs_trans_brelse(args->trans, bp);
return error;
} ...
To avoid whack-a-mole "test for null bp" or "which -ENODATA do we really
mean in this function?" throughout the xattr code, my first thought is
that we should simply map -ENODATA in lower level read functions back to
-EIO, which is unambiguous, even if we lose the nuance of the underlying
error code. (The block device probably already squawked.) Thoughts?
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
---
diff --git a/fs/xfs/xfs_buf.c b/fs/xfs/xfs_buf.c
index f9ef3b2a332a..6ba57ccaa25f 100644
--- a/fs/xfs/xfs_buf.c
+++ b/fs/xfs/xfs_buf.c
@@ -747,6 +747,9 @@ xfs_buf_read_map(
/* bad CRC means corrupted metadata */
if (error == -EFSBADCRC)
error = -EFSCORRUPTED;
+ /* ENODATA == ENOATTR which confuses xattr layers */
+ if (error == -ENODATA)
+ error = -EIO;
return error;
}
^ permalink raw reply related [flat|nested] 21+ messages in thread
* Re: [PATCH RFC] xfs: remap block layer ENODATA read errors to EIO
2025-08-18 20:22 [PATCH RFC] xfs: remap block layer ENODATA read errors to EIO Eric Sandeen
@ 2025-08-18 20:45 ` Darrick J. Wong
2025-08-18 21:11 ` Eric Sandeen
2025-08-21 9:16 ` Donald Douwsma
2025-08-18 22:09 ` Dave Chinner
2025-08-19 8:08 ` Christoph Hellwig
2 siblings, 2 replies; 21+ messages in thread
From: Darrick J. Wong @ 2025-08-18 20:45 UTC (permalink / raw)
To: Eric Sandeen; +Cc: linux-xfs@vger.kernel.org, Donald Douwsma
On Mon, Aug 18, 2025 at 03:22:02PM -0500, Eric Sandeen wrote:
> We had a report that a failing scsi disk was oopsing XFS when an xattr
> read encountered a media error. This is because the media error returned
> -ENODATA, which we map in xattr code to -ENOATTR and treat specially.
>
> In this particular case, it looked like:
>
> xfs_attr_leaf_get()
> error = xfs_attr_leaf_hasname(args, &bp);
> // here bp is NULL, error == -ENODATA from disk failure
> // but we define ENOATTR as ENODATA, so ...
> if (error == -ENOATTR) {
> // whoops, surprise! bp is NULL, OOPS here
> xfs_trans_brelse(args->trans, bp);
> return error;
> } ...
>
> To avoid whack-a-mole "test for null bp" or "which -ENODATA do we really
> mean in this function?" throughout the xattr code, my first thought is
> that we should simply map -ENODATA in lower level read functions back to
> -EIO, which is unambiguous, even if we lose the nuance of the underlying
> error code. (The block device probably already squawked.) Thoughts?
Uhhhh where does this ENODATA come from? Is it the block layer?
$ git grep -w ENODATA block/
block/blk-core.c:146: [BLK_STS_MEDIUM] = { -ENODATA, "critical medium" },
--D
> Signed-off-by: Eric Sandeen <sandeen@redhat.com>
> ---
>
> diff --git a/fs/xfs/xfs_buf.c b/fs/xfs/xfs_buf.c
> index f9ef3b2a332a..6ba57ccaa25f 100644
> --- a/fs/xfs/xfs_buf.c
> +++ b/fs/xfs/xfs_buf.c
> @@ -747,6 +747,9 @@ xfs_buf_read_map(
> /* bad CRC means corrupted metadata */
> if (error == -EFSBADCRC)
> error = -EFSCORRUPTED;
> + /* ENODATA == ENOATTR which confuses xattr layers */
> + if (error == -ENODATA)
> + error = -EIO;
> return error;
> }
>
>
>
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH RFC] xfs: remap block layer ENODATA read errors to EIO
2025-08-18 20:45 ` Darrick J. Wong
@ 2025-08-18 21:11 ` Eric Sandeen
2025-08-18 23:04 ` Darrick J. Wong
2025-08-21 9:16 ` Donald Douwsma
1 sibling, 1 reply; 21+ messages in thread
From: Eric Sandeen @ 2025-08-18 21:11 UTC (permalink / raw)
To: Darrick J. Wong, Eric Sandeen; +Cc: linux-xfs@vger.kernel.org, Donald Douwsma
On 8/18/25 3:45 PM, Darrick J. Wong wrote:
> On Mon, Aug 18, 2025 at 03:22:02PM -0500, Eric Sandeen wrote:
>> We had a report that a failing scsi disk was oopsing XFS when an xattr
>> read encountered a media error. This is because the media error returned
>> -ENODATA, which we map in xattr code to -ENOATTR and treat specially.
>>
>> In this particular case, it looked like:
>>
>> xfs_attr_leaf_get()
>> error = xfs_attr_leaf_hasname(args, &bp);
>> // here bp is NULL, error == -ENODATA from disk failure
>> // but we define ENOATTR as ENODATA, so ...
>> if (error == -ENOATTR) {
>> // whoops, surprise! bp is NULL, OOPS here
>> xfs_trans_brelse(args->trans, bp);
>> return error;
>> } ...
>>
>> To avoid whack-a-mole "test for null bp" or "which -ENODATA do we really
>> mean in this function?" throughout the xattr code, my first thought is
>> that we should simply map -ENODATA in lower level read functions back to
>> -EIO, which is unambiguous, even if we lose the nuance of the underlying
>> error code. (The block device probably already squawked.) Thoughts?
>
> Uhhhh where does this ENODATA come from? Is it the block layer?
>
> $ git grep -w ENODATA block/
> block/blk-core.c:146: [BLK_STS_MEDIUM] = { -ENODATA, "critical medium" },
That, probably, though I don't speak block layer very well. As mentioned, it was a
SCSI disk error, and it appeared in XFS as -ENODATA:
sd 0:0:23:0: [sdad] tag#937 FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_OK cmd_age=2s
sd 0:0:23:0: [sdad] tag#937 Sense Key : Medium Error [current]
sd 0:0:23:0: [sdad] tag#937 Add. Sense: Read retries exhausted
sd 0:0:23:0: [sdad] tag#937 CDB: Read(16) 88 00 00 00 00 00 9b df 5e 78 00 00 00 08 00 00
critical medium error, dev sdad, sector 2615107192 op 0x0:(READ) flags 0x1000 phys_seg 1 prio class 2
XFS (sdad1): metadata I/O error in "xfs_da_read_buf+0xe1/0x140 [xfs]" at daddr 0x9bdf5678 len 8 error 61
(see error 61, ENODATA)
> --D
>
>> Signed-off-by: Eric Sandeen <sandeen@redhat.com>
>> ---
>>
>> diff --git a/fs/xfs/xfs_buf.c b/fs/xfs/xfs_buf.c
>> index f9ef3b2a332a..6ba57ccaa25f 100644
>> --- a/fs/xfs/xfs_buf.c
>> +++ b/fs/xfs/xfs_buf.c
>> @@ -747,6 +747,9 @@ xfs_buf_read_map(
>> /* bad CRC means corrupted metadata */
>> if (error == -EFSBADCRC)
>> error = -EFSCORRUPTED;
>> + /* ENODATA == ENOATTR which confuses xattr layers */
>> + if (error == -ENODATA)
>> + error = -EIO;
>> return error;
>> }
>>
>>
>>
>
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH RFC] xfs: remap block layer ENODATA read errors to EIO
2025-08-18 20:22 [PATCH RFC] xfs: remap block layer ENODATA read errors to EIO Eric Sandeen
2025-08-18 20:45 ` Darrick J. Wong
@ 2025-08-18 22:09 ` Dave Chinner
2025-08-19 2:27 ` Eric Sandeen
2025-08-19 8:08 ` Christoph Hellwig
2 siblings, 1 reply; 21+ messages in thread
From: Dave Chinner @ 2025-08-18 22:09 UTC (permalink / raw)
To: Eric Sandeen; +Cc: linux-xfs@vger.kernel.org, Donald Douwsma
On Mon, Aug 18, 2025 at 03:22:02PM -0500, Eric Sandeen wrote:
> We had a report that a failing scsi disk was oopsing XFS when an xattr
> read encountered a media error. This is because the media error returned
> -ENODATA, which we map in xattr code to -ENOATTR and treat specially.
>
> In this particular case, it looked like:
>
> xfs_attr_leaf_get()
> error = xfs_attr_leaf_hasname(args, &bp);
> // here bp is NULL, error == -ENODATA from disk failure
> // but we define ENOATTR as ENODATA, so ...
> if (error == -ENOATTR) {
> // whoops, surprise! bp is NULL, OOPS here
> xfs_trans_brelse(args->trans, bp);
> return error;
> } ...
>
> To avoid whack-a-mole "test for null bp" or "which -ENODATA do we really
> mean in this function?" throughout the xattr code, my first thought is
> that we should simply map -ENODATA in lower level read functions back to
> -EIO, which is unambiguous, even if we lose the nuance of the underlying
> error code. (The block device probably already squawked.) Thoughts?
>
> Signed-off-by: Eric Sandeen <sandeen@redhat.com>
> ---
>
> diff --git a/fs/xfs/xfs_buf.c b/fs/xfs/xfs_buf.c
> index f9ef3b2a332a..6ba57ccaa25f 100644
> --- a/fs/xfs/xfs_buf.c
> +++ b/fs/xfs/xfs_buf.c
> @@ -747,6 +747,9 @@ xfs_buf_read_map(
> /* bad CRC means corrupted metadata */
> if (error == -EFSBADCRC)
> error = -EFSCORRUPTED;
> + /* ENODATA == ENOATTR which confuses xattr layers */
> + if (error == -ENODATA)
> + error = -EIO;
Not sure this is the right place to map this. It is only relevant to
the XFS xattr layer in the kernel, so mapping it for everything
seems like overkill.
I suspect that this error mapping should really be in
xfs_attr3_leaf_read() and xfs_da_read_buf() so it is done for
xattr fork metadata read IO only...
-Dave.
--
Dave Chinner
david@fromorbit.com
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH RFC] xfs: remap block layer ENODATA read errors to EIO
2025-08-18 21:11 ` Eric Sandeen
@ 2025-08-18 23:04 ` Darrick J. Wong
0 siblings, 0 replies; 21+ messages in thread
From: Darrick J. Wong @ 2025-08-18 23:04 UTC (permalink / raw)
To: Eric Sandeen; +Cc: Eric Sandeen, linux-xfs@vger.kernel.org, Donald Douwsma
On Mon, Aug 18, 2025 at 04:11:41PM -0500, Eric Sandeen wrote:
> On 8/18/25 3:45 PM, Darrick J. Wong wrote:
> > On Mon, Aug 18, 2025 at 03:22:02PM -0500, Eric Sandeen wrote:
> >> We had a report that a failing scsi disk was oopsing XFS when an xattr
> >> read encountered a media error. This is because the media error returned
> >> -ENODATA, which we map in xattr code to -ENOATTR and treat specially.
> >>
> >> In this particular case, it looked like:
> >>
> >> xfs_attr_leaf_get()
> >> error = xfs_attr_leaf_hasname(args, &bp);
> >> // here bp is NULL, error == -ENODATA from disk failure
> >> // but we define ENOATTR as ENODATA, so ...
> >> if (error == -ENOATTR) {
> >> // whoops, surprise! bp is NULL, OOPS here
> >> xfs_trans_brelse(args->trans, bp);
> >> return error;
> >> } ...
> >>
> >> To avoid whack-a-mole "test for null bp" or "which -ENODATA do we really
> >> mean in this function?" throughout the xattr code, my first thought is
> >> that we should simply map -ENODATA in lower level read functions back to
> >> -EIO, which is unambiguous, even if we lose the nuance of the underlying
> >> error code. (The block device probably already squawked.) Thoughts?
> >
> > Uhhhh where does this ENODATA come from? Is it the block layer?
> >
> > $ git grep -w ENODATA block/
> > block/blk-core.c:146: [BLK_STS_MEDIUM] = { -ENODATA, "critical medium" },
>
> That, probably, though I don't speak block layer very well. As mentioned, it was a
> SCSI disk error, and it appeared in XFS as -ENODATA:
>
> sd 0:0:23:0: [sdad] tag#937 FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_OK cmd_age=2s
> sd 0:0:23:0: [sdad] tag#937 Sense Key : Medium Error [current]
> sd 0:0:23:0: [sdad] tag#937 Add. Sense: Read retries exhausted
> sd 0:0:23:0: [sdad] tag#937 CDB: Read(16) 88 00 00 00 00 00 9b df 5e 78 00 00 00 08 00 00
> critical medium error, dev sdad, sector 2615107192 op 0x0:(READ) flags 0x1000 phys_seg 1 prio class 2
Ah, yup, critical error, we ran out of retries.
> XFS (sdad1): metadata I/O error in "xfs_da_read_buf+0xe1/0x140 [xfs]" at daddr 0x9bdf5678 len 8 error 61
> (see error 61, ENODATA)
>
> > --D
> >
> >> Signed-off-by: Eric Sandeen <sandeen@redhat.com>
> >> ---
> >>
> >> diff --git a/fs/xfs/xfs_buf.c b/fs/xfs/xfs_buf.c
> >> index f9ef3b2a332a..6ba57ccaa25f 100644
> >> --- a/fs/xfs/xfs_buf.c
> >> +++ b/fs/xfs/xfs_buf.c
> >> @@ -747,6 +747,9 @@ xfs_buf_read_map(
> >> /* bad CRC means corrupted metadata */
> >> if (error == -EFSBADCRC)
> >> error = -EFSCORRUPTED;
> >> + /* ENODATA == ENOATTR which confuses xattr layers */
Can this comment mention that ENODATA comes from the block layer?
/*
* ENODATA means critical medium error, don't let it
* get mixed up with the xattr usage
*/
With that changed,
Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>
--D
> >> + if (error == -ENODATA)
> >> + error = -EIO;
> >> return error;
> >> }
> >>
> >>
> >>
> >
>
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH RFC] xfs: remap block layer ENODATA read errors to EIO
2025-08-18 22:09 ` Dave Chinner
@ 2025-08-19 2:27 ` Eric Sandeen
0 siblings, 0 replies; 21+ messages in thread
From: Eric Sandeen @ 2025-08-19 2:27 UTC (permalink / raw)
To: Dave Chinner, Eric Sandeen; +Cc: linux-xfs@vger.kernel.org, Donald Douwsma
On 8/18/25 5:09 PM, Dave Chinner wrote:
>> diff --git a/fs/xfs/xfs_buf.c b/fs/xfs/xfs_buf.c
>> index f9ef3b2a332a..6ba57ccaa25f 100644
>> --- a/fs/xfs/xfs_buf.c
>> +++ b/fs/xfs/xfs_buf.c
>> @@ -747,6 +747,9 @@ xfs_buf_read_map(
>> /* bad CRC means corrupted metadata */
>> if (error == -EFSBADCRC)
>> error = -EFSCORRUPTED;
>> + /* ENODATA == ENOATTR which confuses xattr layers */
>> + if (error == -ENODATA)
>> + error = -EIO;
> Not sure this is the right place to map this. It is only relevant to
> the XFS xattr layer in the kernel, so mapping it for everything
> seems like overkill.
>
> I suspect that this error mapping should really be in
> xfs_attr3_leaf_read() and xfs_da_read_buf() so it is done for
> xattr fork metadata read IO only...
yeah, that's partly why RFC. The higher up it gets added, the more
risk of adding another caller later that doesn't handle it. I didn't
see much downside to doing it lower, and just saying well, ENODATA
is kinda another way to spell EIO.
So I don't really care, but doing it in one place seemed better
than doing it in several.
Doing it lower might also be more consistent - only remapping ENODATA
for xattr reads is a little strange? But you're right that other
IOs shouldn't need it. *shrug*
-Eric
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH RFC] xfs: remap block layer ENODATA read errors to EIO
2025-08-18 20:22 [PATCH RFC] xfs: remap block layer ENODATA read errors to EIO Eric Sandeen
2025-08-18 20:45 ` Darrick J. Wong
2025-08-18 22:09 ` Dave Chinner
@ 2025-08-19 8:08 ` Christoph Hellwig
2025-08-19 14:34 ` Darrick J. Wong
2025-08-19 15:14 ` Eric Sandeen
2 siblings, 2 replies; 21+ messages in thread
From: Christoph Hellwig @ 2025-08-19 8:08 UTC (permalink / raw)
To: Eric Sandeen; +Cc: linux-xfs@vger.kernel.org, Donald Douwsma
On Mon, Aug 18, 2025 at 03:22:02PM -0500, Eric Sandeen wrote:
> diff --git a/fs/xfs/xfs_buf.c b/fs/xfs/xfs_buf.c
> index f9ef3b2a332a..6ba57ccaa25f 100644
> --- a/fs/xfs/xfs_buf.c
> +++ b/fs/xfs/xfs_buf.c
> @@ -747,6 +747,9 @@ xfs_buf_read_map(
> /* bad CRC means corrupted metadata */
> if (error == -EFSBADCRC)
> error = -EFSCORRUPTED;
> + /* ENODATA == ENOATTR which confuses xattr layers */
> + if (error == -ENODATA)
> + error = -EIO;
I think we need to stop passing random errors through here (same
for the write side). Unless we have an explicit handler (which we
have for a tiny number of errors), passing random stuff we got through
and which higher layers use for their own purpose will cause trouble.
Btw, your patch is timely as I've just seen something that probably
is the same root cause when running XFS on a device with messed up
PI, which is another of those cases where the block layer returns
"odd" error codes.
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH RFC] xfs: remap block layer ENODATA read errors to EIO
2025-08-19 8:08 ` Christoph Hellwig
@ 2025-08-19 14:34 ` Darrick J. Wong
2025-08-19 14:48 ` Christoph Hellwig
2025-08-19 15:14 ` Eric Sandeen
1 sibling, 1 reply; 21+ messages in thread
From: Darrick J. Wong @ 2025-08-19 14:34 UTC (permalink / raw)
To: Christoph Hellwig; +Cc: Eric Sandeen, linux-xfs@vger.kernel.org, Donald Douwsma
On Tue, Aug 19, 2025 at 01:08:47AM -0700, Christoph Hellwig wrote:
> On Mon, Aug 18, 2025 at 03:22:02PM -0500, Eric Sandeen wrote:
> > diff --git a/fs/xfs/xfs_buf.c b/fs/xfs/xfs_buf.c
> > index f9ef3b2a332a..6ba57ccaa25f 100644
> > --- a/fs/xfs/xfs_buf.c
> > +++ b/fs/xfs/xfs_buf.c
> > @@ -747,6 +747,9 @@ xfs_buf_read_map(
> > /* bad CRC means corrupted metadata */
> > if (error == -EFSBADCRC)
> > error = -EFSCORRUPTED;
> > + /* ENODATA == ENOATTR which confuses xattr layers */
> > + if (error == -ENODATA)
> > + error = -EIO;
>
> I think we need to stop passing random errors through here (same
> for the write side). Unless we have an explicit handler (which we
> have for a tiny number of errors), passing random stuff we got through
> and which higher layers use for their own purpose will cause trouble.
>
> Btw, your patch is timely as I've just seen something that probably
> is the same root cause when running XFS on a device with messed up
> PI, which is another of those cases where the block layer returns
> "odd" error codes.
Maybe xfs should translate bi_status into whatever error codes it wants
directly instead of relying on blk_status_to_errno, which can change in
subtle ways?
Though how many of those status codes actually need a different error?
BLK_STS_MEDIUM (ENODATA) and BLK_STS_NOTSUPP (EOPNOTSUPP) are the only
ones that look (to me) like they could be confused easily.
--D
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH RFC] xfs: remap block layer ENODATA read errors to EIO
2025-08-19 14:34 ` Darrick J. Wong
@ 2025-08-19 14:48 ` Christoph Hellwig
0 siblings, 0 replies; 21+ messages in thread
From: Christoph Hellwig @ 2025-08-19 14:48 UTC (permalink / raw)
To: Darrick J. Wong
Cc: Christoph Hellwig, Eric Sandeen, linux-xfs@vger.kernel.org,
Donald Douwsma
On Tue, Aug 19, 2025 at 07:34:43AM -0700, Darrick J. Wong wrote:
> Maybe xfs should translate bi_status into whatever error codes it wants
> directly instead of relying on blk_status_to_errno, which can change in
> subtle ways?
We could do that. In fact that's what I'm effectively suggesting.
Pick the ones we care about (and document why while we're at it) and
map everything else to -EIO.
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH RFC] xfs: remap block layer ENODATA read errors to EIO
2025-08-19 8:08 ` Christoph Hellwig
2025-08-19 14:34 ` Darrick J. Wong
@ 2025-08-19 15:14 ` Eric Sandeen
2025-08-19 15:23 ` Christoph Hellwig
1 sibling, 1 reply; 21+ messages in thread
From: Eric Sandeen @ 2025-08-19 15:14 UTC (permalink / raw)
To: Christoph Hellwig, Eric Sandeen; +Cc: linux-xfs@vger.kernel.org, Donald Douwsma
On 8/19/25 3:08 AM, Christoph Hellwig wrote:
> On Mon, Aug 18, 2025 at 03:22:02PM -0500, Eric Sandeen wrote:
>> diff --git a/fs/xfs/xfs_buf.c b/fs/xfs/xfs_buf.c
>> index f9ef3b2a332a..6ba57ccaa25f 100644
>> --- a/fs/xfs/xfs_buf.c
>> +++ b/fs/xfs/xfs_buf.c
>> @@ -747,6 +747,9 @@ xfs_buf_read_map(
>> /* bad CRC means corrupted metadata */
>> if (error == -EFSBADCRC)
>> error = -EFSCORRUPTED;
>> + /* ENODATA == ENOATTR which confuses xattr layers */
>> + if (error == -ENODATA)
>> + error = -EIO;
>
> I think we need to stop passing random errors through here (same
> for the write side). Unless we have an explicit handler (which we
> have for a tiny number of errors), passing random stuff we got through
> and which higher layers use for their own purpose will cause trouble.
>
> Btw, your patch is timely as I've just seen something that probably
> is the same root cause when running XFS on a device with messed up
> PI, which is another of those cases where the block layer returns
> "odd" error codes.
Ok, yeah, I had thought about just doing basically
else
return -EIO;
as well.
Though you and Dave seem to have different visions here, I do think that
for XFS's purposes, a failed IO is -EIO unless we explicitly need something
different. Anything finer grained or distributed to higher layers sounds
like a bit of a maintenance and correctness nightmare, to me.
-Eric
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH RFC] xfs: remap block layer ENODATA read errors to EIO
2025-08-19 15:14 ` Eric Sandeen
@ 2025-08-19 15:23 ` Christoph Hellwig
2025-08-19 15:38 ` Eric Sandeen
0 siblings, 1 reply; 21+ messages in thread
From: Christoph Hellwig @ 2025-08-19 15:23 UTC (permalink / raw)
To: Eric Sandeen
Cc: Christoph Hellwig, Eric Sandeen, linux-xfs@vger.kernel.org,
Donald Douwsma
On Tue, Aug 19, 2025 at 10:14:01AM -0500, Eric Sandeen wrote:
> Though you and Dave seem to have different visions here,
We've already clashed on a slightly different twist of this a few weeks
ago :)
> I do think that
> for XFS's purposes, a failed IO is -EIO unless we explicitly need something
> different. Anything finer grained or distributed to higher layers sounds
> like a bit of a maintenance and correctness nightmare, to me.
Mostly, but not entirely yes. In general I/O errors that bubble up
to the file system are just that: I/O errors that are not retryable
at this point, as otherwise the drivers / midlayers would have already
delt with it.
But there are a few exceptions to that:
The one thing we had a discussion about was ENOSPC, which can happen
with some thing provisioning solutions (and apparently redhat cares
about dm-thin there). For this we do want retry metadata writes
based on that design, and special casing it would be good, because
an escaping ENOSPC would do the entirely wrong thing in all layers
about the buffer cache.
Another one is EAGAIN for non-blocking I/O. That's mostly a data
path thing, and we can't really deal with it, but if we make full
use of it, it needs to be special cased.
And then EOPNOTSUP if we want to try optional operations that we
can't query ahead of time. SCSI WRITE_SAME is one of them, but
we fortunately hide that behind block layer helpers.
For file system directly dealing with persistent reservations
BLK_STS_RESV_CONFLICT might be another one, but I hope we don't
get there :)
If the file system ever directly makes use of Command duration
limits, BLK_STS_DURATION_LIMIT might be another one.
As you see very little of that is actually relevant for XFS,
and even less for the buffer cache.
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH RFC] xfs: remap block layer ENODATA read errors to EIO
2025-08-19 15:23 ` Christoph Hellwig
@ 2025-08-19 15:38 ` Eric Sandeen
2025-08-19 15:41 ` Christoph Hellwig
` (2 more replies)
0 siblings, 3 replies; 21+ messages in thread
From: Eric Sandeen @ 2025-08-19 15:38 UTC (permalink / raw)
To: Christoph Hellwig; +Cc: Eric Sandeen, linux-xfs@vger.kernel.org, Donald Douwsma
On 8/19/25 10:23 AM, Christoph Hellwig wrote:
...
> The one thing we had a discussion about was ENOSPC, which can happen
> with some thing provisioning solutions (and apparently redhat cares
> about dm-thin there). For this we do want retry metadata writes
> based on that design, and special casing it would be good, because
> an escaping ENOSPC would do the entirely wrong thing in all layers
> about the buffer cache.
>
> Another one is EAGAIN for non-blocking I/O. That's mostly a data
> path thing, and we can't really deal with it, but if we make full
> use of it, it needs to be special cased.
>
> And then EOPNOTSUP if we want to try optional operations that we
> can't query ahead of time. SCSI WRITE_SAME is one of them, but
> we fortunately hide that behind block layer helpers.
>
> For file system directly dealing with persistent reservations
> BLK_STS_RESV_CONFLICT might be another one, but I hope we don't
> get there :)
>
> If the file system ever directly makes use of Command duration
> limits, BLK_STS_DURATION_LIMIT might be another one.
>
> As you see very little of that is actually relevant for XFS,
> and even less for the buffer cache.
Ok, this is getting a little more complex. The ENODATA problem is
very specific, and has (oddly) been reported by users/customers twice
in recent days. Maybe I can send an acceptable fix for that specific,
observed problem (also suitable for -stable etc), then another
one that is more ambitious on top of that.
-Eric
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH RFC] xfs: remap block layer ENODATA read errors to EIO
2025-08-19 15:38 ` Eric Sandeen
@ 2025-08-19 15:41 ` Christoph Hellwig
2025-08-19 21:45 ` Dave Chinner
2025-08-25 7:51 ` Christoph Hellwig
2 siblings, 0 replies; 21+ messages in thread
From: Christoph Hellwig @ 2025-08-19 15:41 UTC (permalink / raw)
To: Eric Sandeen
Cc: Christoph Hellwig, Eric Sandeen, linux-xfs@vger.kernel.org,
Donald Douwsma
On Tue, Aug 19, 2025 at 10:38:54AM -0500, Eric Sandeen wrote:
> Ok, this is getting a little more complex. The ENODATA problem is
> very specific, and has (oddly) been reported by users/customers twice
> in recent days. Maybe I can send an acceptable fix for that specific,
> observed problem (also suitable for -stable etc), then another
> one that is more ambitious on top of that.
The summary of the above is that for xfs_buf concerns any error
leaking out of xfs_buf.c should be turned into -EIO. We might
want to treat ENOSPC special inside of xfs_buf.c, but that would
be a separate enhancement.
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH RFC] xfs: remap block layer ENODATA read errors to EIO
2025-08-19 15:38 ` Eric Sandeen
2025-08-19 15:41 ` Christoph Hellwig
@ 2025-08-19 21:45 ` Dave Chinner
2025-08-20 0:16 ` Eric Sandeen
2025-08-25 7:51 ` Christoph Hellwig
2 siblings, 1 reply; 21+ messages in thread
From: Dave Chinner @ 2025-08-19 21:45 UTC (permalink / raw)
To: Eric Sandeen
Cc: Christoph Hellwig, Eric Sandeen, linux-xfs@vger.kernel.org,
Donald Douwsma
On Tue, Aug 19, 2025 at 10:38:54AM -0500, Eric Sandeen wrote:
> On 8/19/25 10:23 AM, Christoph Hellwig wrote:
>
> ...
>
> > The one thing we had a discussion about was ENOSPC, which can happen
> > with some thing provisioning solutions (and apparently redhat cares
> > about dm-thin there). For this we do want retry metadata writes
> > based on that design, and special casing it would be good, because
> > an escaping ENOSPC would do the entirely wrong thing in all layers
> > about the buffer cache.
> >
> > Another one is EAGAIN for non-blocking I/O. That's mostly a data
> > path thing, and we can't really deal with it, but if we make full
> > use of it, it needs to be special cased.
> >
> > And then EOPNOTSUP if we want to try optional operations that we
> > can't query ahead of time. SCSI WRITE_SAME is one of them, but
> > we fortunately hide that behind block layer helpers.
> >
> > For file system directly dealing with persistent reservations
> > BLK_STS_RESV_CONFLICT might be another one, but I hope we don't
> > get there :)
> >
> > If the file system ever directly makes use of Command duration
> > limits, BLK_STS_DURATION_LIMIT might be another one.
> >
> > As you see very little of that is actually relevant for XFS,
> > and even less for the buffer cache.
>
> Ok, this is getting a little more complex. The ENODATA problem is
> very specific, and has (oddly) been reported by users/customers twice
> in recent days. Maybe I can send an acceptable fix for that specific,
> observed problem (also suitable for -stable etc), then another
> one that is more ambitious on top of that.
Right, the lowest risk, minimal targetted fix for the problem
reported is to remap the error in the attr layers. Nothing else is
then affected (ie. global changes of behaviour have significant
potential for unexpected regressions), but the issue is solved for
the users that are tripping over it.
Then, if someone really wants to completely rearchitect how we
handle IO errors in XFS, that can be done as a separate project,
with it's own justification, design review, planning for
integration/deprecation/removal of existing error handling
infrastructure, etc.
We do not tie acceptance of trivial bug fixes with a requirement to
completely rearchitect fundamental filesystem behaviours that are
only vaguely related to the bug that needs to be fixed.
-Dave.
--
Dave Chinner
david@fromorbit.com
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH RFC] xfs: remap block layer ENODATA read errors to EIO
2025-08-19 21:45 ` Dave Chinner
@ 2025-08-20 0:16 ` Eric Sandeen
0 siblings, 0 replies; 21+ messages in thread
From: Eric Sandeen @ 2025-08-20 0:16 UTC (permalink / raw)
To: Dave Chinner, Eric Sandeen
Cc: Christoph Hellwig, linux-xfs@vger.kernel.org, Donald Douwsma
On 8/19/25 4:45 PM, Dave Chinner wrote:
> On Tue, Aug 19, 2025 at 10:38:54AM -0500, Eric Sandeen wrote:
...
>> Ok, this is getting a little more complex. The ENODATA problem is
>> very specific, and has (oddly) been reported by users/customers twice
>> in recent days. Maybe I can send an acceptable fix for that specific,
>> observed problem (also suitable for -stable etc), then another
>> one that is more ambitious on top of that.
>
> Right, the lowest risk, minimal targetted fix for the problem
> reported is to remap the error in the attr layers. Nothing else is
> then affected (ie. global changes of behaviour have significant
> potential for unexpected regressions), but the issue is solved for
> the users that are tripping over it.
>
> Then, if someone really wants to completely rearchitect how we
> handle IO errors in XFS, that can be done as a separate project,
> with it's own justification, design review, planning for
> integration/deprecation/removal of existing error handling
> infrastructure, etc.
>
> We do not tie acceptance of trivial bug fixes with a requirement to
> completely rearchitect fundamental filesystem behaviours that are
> only vaguely related to the bug that needs to be fixed.
Agree, though I don't think (I hope) that any of this discussion was
a NAK, just a "there might be a bigger problem to solve here, too" and
I agree with that. I do want to push to get the demonstrable bug fixed
in a direct, safe way first, though, and not bog it down with grander
plans.
I'll try to find time to do that, and look at the bigger problem,
if I have the time and ability. :)
Thanks,
-Eric
> -Dave.
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH RFC] xfs: remap block layer ENODATA read errors to EIO
2025-08-18 20:45 ` Darrick J. Wong
2025-08-18 21:11 ` Eric Sandeen
@ 2025-08-21 9:16 ` Donald Douwsma
2025-08-21 9:29 ` [PATCH] xfs: test case for handling io errors when reading extended attributes Donald Douwsma
2025-08-21 12:52 ` [PATCH RFC] xfs: remap block layer ENODATA read errors to EIO Carlos Maiolino
1 sibling, 2 replies; 21+ messages in thread
From: Donald Douwsma @ 2025-08-21 9:16 UTC (permalink / raw)
To: Darrick J. Wong, Eric Sandeen; +Cc: linux-xfs@vger.kernel.org
On 19/8/25 06:45, Darrick J. Wong wrote:
> On Mon, Aug 18, 2025 at 03:22:02PM -0500, Eric Sandeen wrote:
>> We had a report that a failing scsi disk was oopsing XFS when an xattr
>> read encountered a media error. This is because the media error returned
>> -ENODATA, which we map in xattr code to -ENOATTR and treat specially.
>>
>> In this particular case, it looked like:
>>
>> xfs_attr_leaf_get()
>> error = xfs_attr_leaf_hasname(args, &bp);
>> // here bp is NULL, error == -ENODATA from disk failure
>> // but we define ENOATTR as ENODATA, so ...
>> if (error == -ENOATTR) {
>> // whoops, surprise! bp is NULL, OOPS here
>> xfs_trans_brelse(args->trans, bp);
>> return error;
>> } ...
>>
>> To avoid whack-a-mole "test for null bp" or "which -ENODATA do we really
>> mean in this function?" throughout the xattr code, my first thought is
>> that we should simply map -ENODATA in lower level read functions back to
>> -EIO, which is unambiguous, even if we lose the nuance of the underlying
>> error code. (The block device probably already squawked.) Thoughts?
>
> Uhhhh where does this ENODATA come from? Is it the block layer?
>
> $ git grep -w ENODATA block/
> block/blk-core.c:146: [BLK_STS_MEDIUM] = { -ENODATA, "critical medium" },
>
I had been working on a test case for this based on dmerror, but It
never successfully triggered this, since dmerror returned EIO.
At least it didn't until Eric got creative mapping the the error back to
ENODATA.
I'll was in the process of turning this into an xfstest based on your
tests/xfs/556, I'll reply here with it in case its useful to anyone, but
it would need to be modified to somehow inject ENODATA into the return
path.
Don
It should work with a systemtap to map the error, though I think Eric
was considering alternatives.
^ permalink raw reply [flat|nested] 21+ messages in thread
* [PATCH] xfs: test case for handling io errors when reading extended attributes
2025-08-21 9:16 ` Donald Douwsma
@ 2025-08-21 9:29 ` Donald Douwsma
2025-08-21 12:52 ` [PATCH RFC] xfs: remap block layer ENODATA read errors to EIO Carlos Maiolino
1 sibling, 0 replies; 21+ messages in thread
From: Donald Douwsma @ 2025-08-21 9:29 UTC (permalink / raw)
To: linux-xfs; +Cc: Darrick J . Wong, Eric Sandeen, Donald Douwsma
We've seen reports from the field panicing in xfs_trans_brelse after
an io error for an attribute block.
sd 0:0:23:0: [sdx] tag#271 CDB: Read(16) 88 00 00 00 00 00 9b df 5e 78 00 00 00 08 00 00
critical medium error, dev sdx, sector 2615107192 op 0x0:(READ) flags 0x1000 phys_seg 1 prio class 2
XFS (sdx1): metadata I/O error in "xfs_da_read_buf+0xe1/0x140 [xfs]" at daddr 0x9bdf5678 len 8 error 61
BUG: kernel NULL pointer dereference, address: 00000000000000e0
...
RIP: 0010:xfs_trans_brelse+0xb/0xe0 [xfs]
...
Call Trace:
<TASK>
...
? xfs_trans_brelse+0xb/0xe0 [xfs]
xfs_attr_leaf_get+0xb6/0xc0 [xfs]
xfs_attr_get+0xa0/0xd0 [xfs]
xfs_xattr_get+0x75/0xb0 [xfs]
__vfs_getxattr+0x53/0x70
inode_doinit_use_xattr+0x63/0x180
inode_doinit_with_dentry+0x196/0x510
security_d_instantiate+0x2f/0x50
d_splice_alias+0x46/0x2b0
xfs_vn_lookup+0x8b/0xb0 [xfs]
__lookup_slow+0x84/0x130
walk_component+0x158/0x1d0
path_lookupat+0x6e/0x1c0
filename_lookup+0xcf/0x1d0
vfs_statx+0x8d/0x170
vfs_fstatat+0x54/0x70
__do_sys_newfstatat+0x26/0x60
This was an unsuccessful attempt to reproduce this using dmerror.
It should provoke the problem if a system tap or custom kernel is used
to return ENODATA as seen above, and not EIO as returned by dmerror.
Signed-off-by: Donald Douwsma <ddouwsma@redhat.com>
---
tests/xfs/999 | 107 ++++++++++++++++++++++++++++++++++++++++++++++
tests/xfs/999.out | 2 +
2 files changed, 109 insertions(+)
create mode 100755 tests/xfs/999
create mode 100644 tests/xfs/999.out
diff --git a/tests/xfs/999 b/tests/xfs/999
new file mode 100755
index 00000000..627ca14e
--- /dev/null
+++ b/tests/xfs/999
@@ -0,0 +1,107 @@
+#! /bin/bash
+# SPDX-License-Identifier: GPL-2.0
+# Copyright (c) 2025 YOUR NAME HERE. All Rights Reserved.
+#
+# FS QA Test 601
+#
+# what am I here for?
+# Test for panic during ioerror reading xattr blocks
+#
+. ./common/preamble
+_begin_fstest auto
+
+# Override the default cleanup function.
+_cleanup()
+{
+ cd /
+ rm -f $tmp.*
+ _dmerror_cleanup
+}
+
+# Import common functions.
+# . ./common/filter
+. ./common/dmerror
+
+# real QA test starts here
+
+# Modify as appropriate.
+_require_scratch
+_require_dm_target error
+
+_scratch_mkfs >> $seqres.full
+_scratch_mount
+
+# TODO: Avoid assumptions about inode size using _xfs_get_inode_size and
+# _xfs_get_inode_core_bytes, currently assuming 512 byte inodes.
+
+# Shortform
+# Include shortform for completeness, we can only inject errors for attributes
+# stored outside of the inode.
+testfile="$SCRATCH_MNT/attr_shortform"
+touch $testfile
+ls -i $testfile >> $seqres.full
+setfattr -n user.test_shortform -v $(printf "%0.12d" 12) $testfile
+
+# leaf with single block extent
+testfile="$SCRATCH_MNT/attr_leaf_oneblock"
+touch $testfile
+ls -i $testfile >> $seqres.full
+setfattr -n user.test_leaf -v $(printf "%0.512d" 512) $testfile
+
+# leaf with single multiple block extent
+testfile="$SCRATCH_MNT/attr_leaf_twoblocks"
+touch $testfile
+ls -i $testfile >> $seqres.full
+inode=$(ls -i $testfile|awk '{print $1}')
+setfattr -n user.test_leaf -v $(printf "%0.5000d" 5000) $testfile
+
+# Generalise to for multiple attributes accross many blocks
+# size_name=
+# size_val=256 # how dows value>block-size work out?
+# num_attrs=2022
+# testfile="$SCRATCH_MNT/attr_leaf_manyblocks"
+# touch $testfile
+# ls -li $testfile
+# inode=$(ls -i $testfile|awk '{print $1}')
+#
+# for n_attr in $(seq 0 $num_attrs); do
+# echo $n_attr;
+# setfattr -n $(printf "user.test_leaf_%04d" $n_attr) \
+# -v $(printf "%0.${size_val}d" $size_val) \
+# $testfile
+# done
+
+$XFS_IO_PROG -c "bmap -al" $testfile >> $seqres.full
+attrblocks=($($XFS_IO_PROG -c "bmap -al" $testfile | awk 'match($3, /[0-9]+/, a) {print a[0]}'))
+echo Attribute fork at blocks ${attrblocks[*]} >> $seqres.full
+
+_scratch_unmount
+
+echo "Dump inode $inode details with xfs_db" >> $seqres.full
+# _scratch_xfs_db -c "inode $inode" -c "print core.aformat core.naextents a" >> $seqres.full
+_scratch_xfs_db -c "inode $inode" -c print >> $seqres.full
+
+_dmerror_init >> $seqres.full 2>&1
+_dmerror_reset_table >> $seqres.full 2>&1
+_dmerror_mount >> $seqres.full 2>&1
+
+echo "Setup dm-error when reading the second attribute block ${attrblocks[1]}" >> $seqres.full
+_dmerror_mark_range_bad ${attrblocks[1]} 1 $SCRATCH_DEV
+
+# Debug from tests/xfs/556
+cat >> $seqres.full << ENDL
+dmerror after marking bad:
+$DMERROR_TABLE
+$DMERROR_RTTABLE
+<end table>
+ENDL
+
+_dmerror_load_error_table
+
+# Panic here if failure
+echo "Re-read the extended attribute, panics on unandled ioerrors" >> $seqres.full
+getfattr -d -m - $testfile >> $seqres.full
+
+# success, all done
+status=0
+exit
diff --git a/tests/xfs/999.out b/tests/xfs/999.out
new file mode 100644
index 00000000..e7f4becf
--- /dev/null
+++ b/tests/xfs/999.out
@@ -0,0 +1,2 @@
+QA output created by 999
+Silence is golden
--
2.47.3
^ permalink raw reply related [flat|nested] 21+ messages in thread
* Re: [PATCH RFC] xfs: remap block layer ENODATA read errors to EIO
2025-08-21 9:16 ` Donald Douwsma
2025-08-21 9:29 ` [PATCH] xfs: test case for handling io errors when reading extended attributes Donald Douwsma
@ 2025-08-21 12:52 ` Carlos Maiolino
2025-08-21 20:06 ` Eric Sandeen
1 sibling, 1 reply; 21+ messages in thread
From: Carlos Maiolino @ 2025-08-21 12:52 UTC (permalink / raw)
To: Donald Douwsma; +Cc: Darrick J. Wong, Eric Sandeen, linux-xfs@vger.kernel.org
On Thu, Aug 21, 2025 at 07:16:49PM +1000, Donald Douwsma wrote:
>
>
> On 19/8/25 06:45, Darrick J. Wong wrote:
> > On Mon, Aug 18, 2025 at 03:22:02PM -0500, Eric Sandeen wrote:
> >> We had a report that a failing scsi disk was oopsing XFS when an xattr
> >> read encountered a media error. This is because the media error returned
> >> -ENODATA, which we map in xattr code to -ENOATTR and treat specially.
scsi_debug can be configured to return a MEDIUM error which if I follow
the discussion properly, would result in the block layer converting it
to ENODATA.
Carlos
P.S.
I'm pretty sure I heard somebody suggesting scsi_debug before,
I just don't remember who and where.
> >>
> >> In this particular case, it looked like:
> >>
> >> xfs_attr_leaf_get()
> >> error = xfs_attr_leaf_hasname(args, &bp);
> >> // here bp is NULL, error == -ENODATA from disk failure
> >> // but we define ENOATTR as ENODATA, so ...
> >> if (error == -ENOATTR) {
> >> // whoops, surprise! bp is NULL, OOPS here
> >> xfs_trans_brelse(args->trans, bp);
> >> return error;
> >> } ...
> >>
> >> To avoid whack-a-mole "test for null bp" or "which -ENODATA do we really
> >> mean in this function?" throughout the xattr code, my first thought is
> >> that we should simply map -ENODATA in lower level read functions back to
> >> -EIO, which is unambiguous, even if we lose the nuance of the underlying
> >> error code. (The block device probably already squawked.) Thoughts?
> >
> > Uhhhh where does this ENODATA come from? Is it the block layer?
> >
> > $ git grep -w ENODATA block/
> > block/blk-core.c:146: [BLK_STS_MEDIUM] = { -ENODATA, "critical medium" },
> >
>
> I had been working on a test case for this based on dmerror, but It
> never successfully triggered this, since dmerror returned EIO.
>
> At least it didn't until Eric got creative mapping the the error back to
> ENODATA.
>
> I'll was in the process of turning this into an xfstest based on your
> tests/xfs/556, I'll reply here with it in case its useful to anyone, but
> it would need to be modified to somehow inject ENODATA into the return
> path.
>
> Don
>
>
>
> It should work with a systemtap to map the error, though I think Eric
> was considering alternatives.
>
>
>
>
>
>
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH RFC] xfs: remap block layer ENODATA read errors to EIO
2025-08-21 12:52 ` [PATCH RFC] xfs: remap block layer ENODATA read errors to EIO Carlos Maiolino
@ 2025-08-21 20:06 ` Eric Sandeen
2025-08-22 7:38 ` Donald Douwsma
0 siblings, 1 reply; 21+ messages in thread
From: Eric Sandeen @ 2025-08-21 20:06 UTC (permalink / raw)
To: Carlos Maiolino, Donald Douwsma
Cc: Darrick J. Wong, Eric Sandeen, linux-xfs@vger.kernel.org
On 8/21/25 7:52 AM, Carlos Maiolino wrote:
> On Thu, Aug 21, 2025 at 07:16:49PM +1000, Donald Douwsma wrote:
>>
>>
>> On 19/8/25 06:45, Darrick J. Wong wrote:
>>> On Mon, Aug 18, 2025 at 03:22:02PM -0500, Eric Sandeen wrote:
>>>> We had a report that a failing scsi disk was oopsing XFS when an xattr
>>>> read encountered a media error. This is because the media error returned
>>>> -ENODATA, which we map in xattr code to -ENOATTR and treat specially.
>
> scsi_debug can be configured to return a MEDIUM error which if I follow
> the discussion properly, would result in the block layer converting it
> to ENODATA.
Yep that does work though very old scsi_debug modules can't control
which sector returns ENODATA. But for semi-modern scsi_debug it should
work quite well.
-Eric
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH RFC] xfs: remap block layer ENODATA read errors to EIO
2025-08-21 20:06 ` Eric Sandeen
@ 2025-08-22 7:38 ` Donald Douwsma
0 siblings, 0 replies; 21+ messages in thread
From: Donald Douwsma @ 2025-08-22 7:38 UTC (permalink / raw)
To: Eric Sandeen, Carlos Maiolino
Cc: Darrick J. Wong, Eric Sandeen, linux-xfs@vger.kernel.org
On 22/8/25 06:06, Eric Sandeen wrote:
> On 8/21/25 7:52 AM, Carlos Maiolino wrote:
>> On Thu, Aug 21, 2025 at 07:16:49PM +1000, Donald Douwsma wrote:
>>>
>>>
>>> On 19/8/25 06:45, Darrick J. Wong wrote:
>>>> On Mon, Aug 18, 2025 at 03:22:02PM -0500, Eric Sandeen wrote:
>>>>> We had a report that a failing scsi disk was oopsing XFS when an xattr
>>>>> read encountered a media error. This is because the media error returned
>>>>> -ENODATA, which we map in xattr code to -ENOATTR and treat specially.
>>
>> scsi_debug can be configured to return a MEDIUM error which if I follow
>> the discussion properly, would result in the block layer converting it
>> to ENODATA.
>
> Yep that does work though very old scsi_debug modules can't control
> which sector returns ENODATA. But for semi-modern scsi_debug it should
> work quite well.
>
> -Eric
>
Thanks Carlos, Eric, that works well.
I should able to make it work without knowing the sector if I stat the
inode before enabling the error if we need support for older kernels.
I'll file off the rough edges and post it for review.
Don
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH RFC] xfs: remap block layer ENODATA read errors to EIO
2025-08-19 15:38 ` Eric Sandeen
2025-08-19 15:41 ` Christoph Hellwig
2025-08-19 21:45 ` Dave Chinner
@ 2025-08-25 7:51 ` Christoph Hellwig
2 siblings, 0 replies; 21+ messages in thread
From: Christoph Hellwig @ 2025-08-25 7:51 UTC (permalink / raw)
To: Eric Sandeen
Cc: Christoph Hellwig, Eric Sandeen, linux-xfs@vger.kernel.org,
Donald Douwsma
On Tue, Aug 19, 2025 at 10:38:54AM -0500, Eric Sandeen wrote:
> Ok, this is getting a little more complex. The ENODATA problem is
> very specific, and has (oddly) been reported by users/customers twice
> in recent days.
That's probably when you started deploying a kernel to them that
contained a backport of
07120f1abdff80f3d1351f733661abe28d609535
Author: Allison Collins <allison.henderson@oracle.com>
Date: Mon Jul 20 21:47:22 2020 -0700
xfs: Add xfs_has_attr and subroutines
which added this check. So anything fixing that should probably
add a Fixes tag, even if that commit only made the issue show up
and did not actually cause it.
^ permalink raw reply [flat|nested] 21+ messages in thread
end of thread, other threads:[~2025-08-25 7:51 UTC | newest]
Thread overview: 21+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-08-18 20:22 [PATCH RFC] xfs: remap block layer ENODATA read errors to EIO Eric Sandeen
2025-08-18 20:45 ` Darrick J. Wong
2025-08-18 21:11 ` Eric Sandeen
2025-08-18 23:04 ` Darrick J. Wong
2025-08-21 9:16 ` Donald Douwsma
2025-08-21 9:29 ` [PATCH] xfs: test case for handling io errors when reading extended attributes Donald Douwsma
2025-08-21 12:52 ` [PATCH RFC] xfs: remap block layer ENODATA read errors to EIO Carlos Maiolino
2025-08-21 20:06 ` Eric Sandeen
2025-08-22 7:38 ` Donald Douwsma
2025-08-18 22:09 ` Dave Chinner
2025-08-19 2:27 ` Eric Sandeen
2025-08-19 8:08 ` Christoph Hellwig
2025-08-19 14:34 ` Darrick J. Wong
2025-08-19 14:48 ` Christoph Hellwig
2025-08-19 15:14 ` Eric Sandeen
2025-08-19 15:23 ` Christoph Hellwig
2025-08-19 15:38 ` Eric Sandeen
2025-08-19 15:41 ` Christoph Hellwig
2025-08-19 21:45 ` Dave Chinner
2025-08-20 0:16 ` Eric Sandeen
2025-08-25 7:51 ` Christoph Hellwig
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).