[PATCH v3 07/12] md: suspend i/o during runtime blk_integrity_unregister
Mike Snitzer
snitzer at redhat.com
Tue Jan 12 18:59:33 PST 2016
On Tue, Jan 12 2016 at 9:24pm -0500,
Dan Williams <dan.j.williams at intel.com> wrote:
> On Tue, Jan 12, 2016 at 6:14 PM, NeilBrown <neilb at suse.com> wrote:
> >
> > Hi Dan,
> >
> > Somewhat belatedly I am testing this code, and it deadlocks. Which is
> > obvious once I think about it.
> >
> > raid10_add_disk() is called from
> > raid10d -> md_check_recovery -> remove_and_add_spares
> >
> > so this call to mddev_suspend() will block raid10d until all pending IO
> > completes. But raid10d might be needed to complete some IO -
> > particularly in the case of errors. I don't know exactly what is
> > deadlocking in my test, but it doesn't surprise me that something does.
>
> Ugh.
>
> > Can you explain in more detail what needs to be synchronised here? If
> > the synchronisation doesn't happen, what can do wrong?
> > Because I cannot imagine what this might actually be protecting against.
>
> My thinking is that if the integrity profile changes while i/o is in
> flight we can get spurious errors. For example when enabling
> integrity a checksum for in-flight commands will be missing, so wait
> for those to complete.
DM avoids this because it doesn't allow changing the integrity profile
once one is established.
More information about the Linux-nvme
mailing list