[dm-devel] dm-snap deadlock in pending_complete()
Mikulas Patocka
mpatocka at redhat.com
Wed Aug 12 16:25:42 UTC 2015
On Wed, 12 Aug 2015, NeilBrown wrote:
> On Tue, 11 Aug 2015 05:14:33 -0400 (EDT) Mikulas Patocka
> <mpatocka at redhat.com> wrote:
>
> > Hi
> >
> > On Mon, 10 Aug 2015, NeilBrown wrote:
> >
> > >
> > > Hi Mikulas,
> > > I have a customer hitting the deadlock you described over a year ago
> > > in:
> > >
> > > Subject: [dm-devel] [PATCH] block: flush queued bios when the process
> > > blocks
> >
> > Ask block layer maintainers to accept that patch.
>
> Unfortunately I don't really like the patch ... or the bioset rescue
> workqueues that it is based on. Sorry.
>
> So I might keep looking for a more localised approach....
The problem here is that other dm targets may deadlock in a similar way
too - for example, dm-thin could deadlock on pmd->pool_lock.
The cause of the bug is bio queuing on current->bio_list. There is an
assumption that if a dm target submits a bio to a lower-level target, the
bio finishes in finite time. Queuing on current->bio_list breaks the
assumption, bios can be held indefinitelly on current->bio_list.
The patch that flushes current->bio_list is the correct way to fix it - it
makes sure that a bio can't be held indefinitely.
Another way to fix it would be to abandon current->bio_list --- but then,
there would be problem with stack overflow on deeply nested targets.
Mikulas
More information about the dm-devel
mailing list