qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH for-2.9?] 9pfs: fix multiple flush for same requ


From: Greg Kurz
Subject: Re: [Qemu-devel] [PATCH for-2.9?] 9pfs: fix multiple flush for same request
Date: Thu, 30 Mar 2017 17:07:32 +0200

On Thu, 30 Mar 2017 08:18:34 -0500
Eric Blake <address@hidden> wrote:

> On 03/30/2017 03:26 AM, Greg Kurz wrote:
> > If a client tries to flush the same outstanding request several times, only
> > the first flush completes. Subsequent ones keep waiting for the request
> > completion in v9fs_flush() and, therefore, leak a PDU. This will cause QEMU
> > to hang when draining active PDUs the next time the device is reset.  
> 
> Since this fixes a hang, is it 2.9 material?
> 

Yes, definitely, I just forgot to add the for-2.9 tag :)

> > 
> > Let have each flush request wake up the next one if any. The last waiter
> > frees the cancelled PDU.
> > 
> > Signed-off-by: Greg Kurz <address@hidden>
> > ---
> >  hw/9pfs/9p.c |    6 ++++--
> >  1 file changed, 4 insertions(+), 2 deletions(-)
> >   
> 
> Reviewed-by: Eric Blake <address@hidden>
> 
> > diff --git a/hw/9pfs/9p.c b/hw/9pfs/9p.c
> > index 48babce836b6..ef47a0a5ad6f 100644
> > --- a/hw/9pfs/9p.c
> > +++ b/hw/9pfs/9p.c
> > @@ -2387,8 +2387,10 @@ static void coroutine_fn v9fs_flush(void *opaque)
> >           * Wait for pdu to complete.
> >           */
> >          qemu_co_queue_wait(&cancel_pdu->complete, NULL);
> > -        cancel_pdu->cancelled = 0;
> > -        pdu_free(cancel_pdu);
> > +        if (!qemu_co_queue_next(&cancel_pdu->complete)) {
> > +            cancel_pdu->cancelled = 0;
> > +            pdu_free(cancel_pdu);
> > +        }
> >      }
> >      pdu_complete(pdu, 7);
> >  }
> > 
> > 
> >   
> 

Attachment: pgpPt1wxTT9j8.pgp
Description: OpenPGP digital signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]