[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 12/14] xen-blkback: safely unmap grants in case they are still in use
On 23/01/15 16:00, David Vrabel wrote: > On 23/01/15 15:47, Roger Pau Monné wrote: >> El 23/01/15 a les 15.54, David Vrabel ha escrit: >>> On 23/01/15 14:31, Roger Pau Monné wrote: >>>> El 19/01/15 a les 16.51, David Vrabel ha escrit: >>>>> + if (invcount) { >>>>> + ret = gnttab_unmap_refs(unmap, NULL, unmap_pages, >>>>> invcount); >>>>> BUG_ON(ret); >>>>> - put_free_pages(blkif, unmap_pages, invcount); >>>>> - invcount = 0; >>>>> + xen_blkbk_unmap_done(blkif, unmap_pages, invcount); >>>>> } >>>>> - } >>>>> - if (invcount) { >>>>> - ret = gnttab_unmap_refs(unmap, NULL, unmap_pages, invcount); >>>>> - BUG_ON(ret); >>>>> - put_free_pages(blkif, unmap_pages, invcount); >>>>> + pages += batch; >>>>> + num -= batch; >> >> This should be fixed to at least be (which is still not fully correct, >> but it's better): >> >> pages += invcount; >> num -= invcount; >> >> I hope an example will clarify this, suppose we have the following pages >> array: >> >> pages[0] = persistent grant >> pages[1] = persistent grant >> pages[2] = regular grant >> pages[3] = persistent grant >> pages[4] = regular grant >> >> And batch is 1. In this case, the unmapped grant will be pages[2], but >> then due to the code below pages will be updated to point to &pages[1], >> which has already been scanned. If this was done correctly pages should >> point to &pages[3]. As said, it's not really a bug, but the loop is >> sub-optimal. > > Ah ha. Thanks for the clear explanation. > > gnttab_blkback_unmap_prepare() stops once its been through the whole > batch regardless of whether it filled the array with ops so we don't > check a page twice but this does mean we have a sub-optimal number of ops. This is not a hot path (it's only called during error recovery). Are you happy to leave this as is? David _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |