[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH RFC 2/3] xen_disk: fix memory leak
On Mon, 31 Dec 2012, Roger Pau Monne wrote: > On ioreq_release the full ioreq was memset to 0, loosing all the data > and memory allocations inside the QEMUIOVector, which leads to a > memory leak. Create a new function to specifically reset ioreq. > > Reported-by: Maik Wessler <maik.wessler@xxxxxxxxx> > Signed-off-by: Roger Pau Monnà <roger.pau@xxxxxxxxxx> > Cc: xen-devel@xxxxxxxxxxxxx > Cc: Stefano Stabellini <Stefano.Stabellini@xxxxxxxxxxxxx> > Cc: Anthony PERARD <anthony.perard@xxxxxxxxxx> > Nice catch! Acked-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx> > --- > hw/xen_disk.c | 28 ++++++++++++++++++++++++++-- > 1 files changed, 26 insertions(+), 2 deletions(-) > > diff --git a/hw/xen_disk.c b/hw/xen_disk.c > index a159ee5..1eb485a 100644 > --- a/hw/xen_disk.c > +++ b/hw/xen_disk.c > @@ -113,6 +113,31 @@ struct XenBlkDev { > > /* ------------------------------------------------------------- */ > > +static void ioreq_reset(struct ioreq *ioreq) > +{ > + memset(&ioreq->req, 0, sizeof(ioreq->req)); > + ioreq->status = 0; > + ioreq->start = 0; > + ioreq->presync = 0; > + ioreq->postsync = 0; > + ioreq->mapped = 0; > + > + memset(ioreq->domids, 0, sizeof(ioreq->domids)); > + memset(ioreq->refs, 0, sizeof(ioreq->refs)); > + ioreq->prot = 0; > + memset(ioreq->page, 0, sizeof(ioreq->page)); > + ioreq->pages = NULL; > + > + ioreq->aio_inflight = 0; > + ioreq->aio_errors = 0; > + > + ioreq->blkdev = NULL; > + memset(&ioreq->list, 0, sizeof(ioreq->list)); > + memset(&ioreq->acct, 0, sizeof(ioreq->acct)); > + > + qemu_iovec_reset(&ioreq->v); > +} > + > static struct ioreq *ioreq_start(struct XenBlkDev *blkdev) > { > struct ioreq *ioreq = NULL; > @@ -130,7 +155,6 @@ static struct ioreq *ioreq_start(struct XenBlkDev *blkdev) > /* get one from freelist */ > ioreq = QLIST_FIRST(&blkdev->freelist); > QLIST_REMOVE(ioreq, list); > - qemu_iovec_reset(&ioreq->v); > } > QLIST_INSERT_HEAD(&blkdev->inflight, ioreq, list); > blkdev->requests_inflight++; > @@ -154,7 +178,7 @@ static void ioreq_release(struct ioreq *ioreq, bool > finish) > struct XenBlkDev *blkdev = ioreq->blkdev; > > QLIST_REMOVE(ioreq, list); > - memset(ioreq, 0, sizeof(*ioreq)); > + ioreq_reset(ioreq); > ioreq->blkdev = blkdev; > QLIST_INSERT_HEAD(&blkdev->freelist, ioreq, list); > if (finish) { > -- > 1.7.7.5 (Apple Git-26) > > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |