On 2022-08-22 13:12, Song Liu wrote: > On Mon, Aug 22, 2022 at 9:28 AM Logan Gunthorpe <logang@xxxxxxxxxxxx> wrote: >> >> >> >> On 2022-08-22 01:04, Song Liu wrote: >>> Could you please add some printk so that we know which condition triggered >>> handle_stripe_fill() here: >>> >>> if (s.to_read || s.non_overwrite >>> || (s.to_write && s.failed) >>> || (s.syncing && (s.uptodate + s.compute < disks)) >>> || s.replacing >>> || s.expanding) >>> handle_stripe_fill(sh, &s, disks); >>> >>> This would help us narrow down to the exact condition. I guess it is >>> "(s.to_write && s.failed)", but I am not quite sure. >> >> Ok, I hit this bug on a stripe and got these values for the call: >> >> to_read = 0 >> non_overwrite = 0 >> to_write = 0 >> failed = 1 >> syncing = 1 >> uptodate = 2 >> compute = 0 >> disks = 3 >> replacing = 0 >> expanding = 0 >> >> So it's actually the "(s.syncing && (s.uptodate + s.compute < disks))" >> condition that is getting hit. > > Thanks for the information! So the stripe is syncing. Could you please > try whether the following fixes the issue? Yup, thanks! Looks like that fixes my test case. I can do more general testing on it later this week. Logan