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, Logan