>>>>> "Mikulas" == Mikulas Patocka <mpato...@redhat.com> writes:

> On Thu, 7 Aug 2025, Stuart D Gathman wrote:

>> On Wed, 6 Aug 2025, John Stoffel wrote:
>> 
>> > > > > > > "Mikulas" == Mikulas Patocka <mpato...@redhat.com> writes:
>> > 
>> > > The problem is that the raid1 implementation may freely choose which leg
>> > > to read from. If it chooses to read from the non-corrupted leg, the
>> > > corruption is not detected, the number of mismatches is not incremented
>> > > and the test reports this as a failure.
>> > 
>> > So wait, how is integrity supposed to work in this situation then?  In
>> > real life?  I understand the test is hard, maybe doing it in a loop
>> > three times?  Or configure the RAID1 to prefer one half over another
>> > is the way to make this test work?

> If you want to make sure that you detect (and correct) all mismatches, you 
> have to scrub the raid array.

And how do you know which level of the array is showing the errors?  I
could have a RAID1 array composed of a single partition on the left
side, but then a RAID0 of two smaller disks on the right side.  So how
would this read() flag know what to do?  

I would assume the integrity sub-system would be reading from both
sides and comparing them to look for errors.  When you find a
mis-match, how do you tell which side is wrong?  

>> Linux needs an optional parameter to read() syscall that is "leg index"
>> for the blk interface.  Thus, btrfs scrub can check all legs, and this
>> test can check all legs.  Filesystems with checks can repair corruption
>> by rewriting the block after finding a leg with correct csum.
>> 
>> This only needs a few bits (how many legs can there be?), so can go in
>> the FLAGS argument.

> I think that adding a new bit for the read syscalls is not a
> workable solition. There are so many programs using the read()
> syscall and teaching them to use this new bit is impossible.

It's also the completely wrong level for this type of support.  But
maybe they can convince us with a pseudo-code example of how an
application would use this read() extension to solve the issue?  

But right now, it's just for testing, and if the tests don't work
correctly without a silly workaround like this, then your tests aren't
representative of the real world use!  

John



Reply via email to