[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