From: Dor L. <dor...@gm...> - 2008-01-10 13:11:07
|
On Thu, 2008-01-10 at 21:27 +0900, Akio Takebe wrote: > Hi, Marcelo > > >> >+static int kvm_balloon_inflate(struct virtballoon *v, int32_t npages) > >> >+{ > >> >+ LIST_HEAD(tmp_list); > >> >+ struct page *page, *tmp; > >> >+ struct balloon_buf *buf; > >> >+ u32 *pfn; > >> >+ int allocated = 0; > >> >+ int i, r = -ENOMEM; > >> >+ > >> >+ buf = alloc_balloon_buf(v->vdev, GFP_KERNEL); > >> When does balloon driver free the buf? > > > >Hi Akio, > > > >The buffers are passed from the virtio handling routine to the balloon_thread > >through the balloon_work list, and then freed here: > > > >+ spin_lock_irq(&v->queue_lock); > >+ while (!list_empty(&v->balloon_work)) { > >+ struct balloon_work *work; > >+ struct balloon_buf *buf; > >+ > >+ work = list_entry(v->balloon_work.next, > >+ struct balloon_work, list); > >+ list_del(&work->list); > >+ spin_unlock_irq(&v->queue_lock); > >+ buf = work->buf; > >+ kfree(work); > >+ > >+ switch(buf->hdr.cmd) { > >+ case CMD_BALLOON_DEFLATE: > >+ deflate_done(v, buf); > >+ break; > >+ case CMD_BALLOON_INFLATE: > >+ inflate_done(v, buf); > >+ break; > >+ default: > >+ printk("%s: unknown cmd 0x%x\n", __func__, > >+ buf->hdr.cmd); > >+ } > >+ kfree(buf); > Thank you for your exlanation. > Does balloon free the buf when kvm_balloon_xflate() retrun -ENOMEM? It return -ENOMEM only when kvm_balloon_inflate fails. We just need to handle this case a little better - there is no leak but the xflate function or the balloon thread need to check the value and update the host that it failed to reach the requested balloon size. > Akio Takebe > > > ------------------------------------------------------------------------- > Check out the new SourceForge.net Marketplace. > It's the best place to buy or sell services for > just about anything Open Source. > http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace > _______________________________________________ > kvm-devel mailing list > kvm...@li... > https://lists.sourceforge.net/lists/listinfo/kvm-devel |