Laszlo Ersek
2011-May-12 10:24 UTC
[Xen-devel] [PATCH linux-2.6.18-xen] fix xenbus_transaction_start() hang caused by double xenbus_transaction_end()
fix xenbus_transaction_start() hang caused by double xenbus_transaction_end() vbd_resize() up_read()''s xs_state.suspend_mutex twice in a row via double xenbus_transaction_end() calls. The next down_read() in xenbus_transaction_start() (at eg. the next resize attempt) hangs. See RHBZ#618317. Thanks for considering. Signed-off-by: Laszlo Ersek <lersek@redhat.com> --- drivers/xen/blkback/vbd.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/xen/blkback/vbd.c b/drivers/xen/blkback/vbd.c --- a/drivers/xen/blkback/vbd.c +++ b/drivers/xen/blkback/vbd.c @@ -156,6 +156,7 @@ goto again; if (err) printk(KERN_WARNING "Error ending transaction"); + return; abort: xenbus_transaction_end(xbt, 1); } _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Jan Beulich
2011-May-13 08:15 UTC
Re: [Xen-devel] [PATCH linux-2.6.18-xen] fix xenbus_transaction_start() hang caused by double xenbus_transaction_end()
>>> On 12.05.11 at 12:24, Laszlo Ersek <lersek@redhat.com> wrote: > fix xenbus_transaction_start() hang caused by double xenbus_transaction_end() > > vbd_resize() up_read()''s xs_state.suspend_mutex twice in a row via double > xenbus_transaction_end() calls. The next down_read() in > xenbus_transaction_start() (at eg. the next resize attempt) hangs. > > See RHBZ#618317. > > Thanks for considering. > > Signed-off-by: Laszlo Ersek <lersek@redhat.com>Acked-by: Jan Beulich <jbeulich@novell.com> (I wonder how this ever passed any testing.) The same would be needed for pv-ops too afaics. Jan> --- > drivers/xen/blkback/vbd.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/drivers/xen/blkback/vbd.c b/drivers/xen/blkback/vbd.c > --- a/drivers/xen/blkback/vbd.c > +++ b/drivers/xen/blkback/vbd.c > @@ -156,6 +156,7 @@ > goto again; > if (err) > printk(KERN_WARNING "Error ending transaction"); > + return; > abort: > xenbus_transaction_end(xbt, 1); > } > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xensource.com > http://lists.xensource.com/xen-devel_______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Ian Campbell
2011-May-13 08:41 UTC
Re: [Xen-devel] [PATCH linux-2.6.18-xen] fix xenbus_transaction_start() hang caused by double xenbus_transaction_end()
On Fri, 2011-05-13 at 09:15 +0100, Jan Beulich wrote:> >>> On 12.05.11 at 12:24, Laszlo Ersek <lersek@redhat.com> wrote: > > fix xenbus_transaction_start() hang caused by double xenbus_transaction_end() > > > > vbd_resize() up_read()''s xs_state.suspend_mutex twice in a row via double > > xenbus_transaction_end() calls. The next down_read() in > > xenbus_transaction_start() (at eg. the next resize attempt) hangs. > > > > See RHBZ#618317. > > > > Thanks for considering. > > > > Signed-off-by: Laszlo Ersek <lersek@redhat.com> > > Acked-by: Jan Beulich <jbeulich@novell.com>Acked-by: Ian Campbell <ian.campbell@citrix.com>> (I wonder how this ever passed any testing.)Indeed.> The same would be needed for pv-ops too afaics.Agreed, maintainers CCd. Ian.> > Jan > > > --- > > drivers/xen/blkback/vbd.c | 1 + > > 1 file changed, 1 insertion(+) > > > > diff --git a/drivers/xen/blkback/vbd.c b/drivers/xen/blkback/vbd.c > > --- a/drivers/xen/blkback/vbd.c > > +++ b/drivers/xen/blkback/vbd.c > > @@ -156,6 +156,7 @@ > > goto again; > > if (err) > > printk(KERN_WARNING "Error ending transaction"); > > + return; > > abort: > > xenbus_transaction_end(xbt, 1); > > } > > > > > > _______________________________________________ > > Xen-devel mailing list > > Xen-devel@lists.xensource.com > > http://lists.xensource.com/xen-devel > > > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xensource.com > http://lists.xensource.com/xen-devel_______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Konrad Rzeszutek Wilk
2011-May-13 13:49 UTC
Re: [Xen-devel] [PATCH linux-2.6.18-xen] fix xenbus_transaction_start() hang caused by double xenbus_transaction_end()
> > > fix xenbus_transaction_start() hang caused by double xenbus_transaction_end() > > > > > The same would be needed for pv-ops too afaics. > > Agreed, maintainers CCd.In for-jens/xen-blkback-v3.3 _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Jan Beulich
2011-May-19 09:49 UTC
Re: [Xen-devel] [PATCH linux-2.6.18-xen] fix xenbus_transaction_start() hang caused by double xenbus_transaction_end()
>>> On 13.05.11 at 10:15, "Jan Beulich" <JBeulich@novell.com> wrote: >>>> On 12.05.11 at 12:24, Laszlo Ersek <lersek@redhat.com> wrote: >> fix xenbus_transaction_start() hang caused by double xenbus_transaction_end() >> >> vbd_resize() up_read()''s xs_state.suspend_mutex twice in a row via double >> xenbus_transaction_end() calls. The next down_read() in >> xenbus_transaction_start() (at eg. the next resize attempt) hangs. >> >> See RHBZ#618317. >> >> Thanks for considering. >> >> Signed-off-by: Laszlo Ersek <lersek@redhat.com> > > Acked-by: Jan Beulich <jbeulich@novell.com> > > (I wonder how this ever passed any testing.)Hmm, I think if this really wasn''t *that* bad. In particular I''m finding that neither pv-ops nor the legacy tree has anything called suspend_mutex in drivers/xen/xenbus/xenbus_xs.c, nor is there any other mutex being up_read()-ed in transaction_end(). What got corrupted by the double call was transaction_count, which would have had a negative effect at the next transaction_suspend() (but not at any subsequent transaction_start()). Jan> The same would be needed for pv-ops too afaics. > > Jan > >> --- >> drivers/xen/blkback/vbd.c | 1 + >> 1 file changed, 1 insertion(+) >> >> diff --git a/drivers/xen/blkback/vbd.c b/drivers/xen/blkback/vbd.c >> --- a/drivers/xen/blkback/vbd.c >> +++ b/drivers/xen/blkback/vbd.c >> @@ -156,6 +156,7 @@ >> goto again; >> if (err) >> printk(KERN_WARNING "Error ending transaction"); >> + return; >> abort: >> xenbus_transaction_end(xbt, 1); >> } >> >> >> _______________________________________________ >> Xen-devel mailing list >> Xen-devel@lists.xensource.com >> http://lists.xensource.com/xen-devel > > > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xensource.com > http://lists.xensource.com/xen-devel_______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel