[libvirt] [PATCH 3/3] Implement non-pool-blocking volume allocation for FS volumes

Daniel Veillard veillard at redhat.com
Thu Apr 16 13:57:52 UTC 2009


On Wed, Apr 15, 2009 at 03:26:44PM -0400, Cole Robinson wrote:
> Implement non-pool-blocking volume allocation for FS volumes.
> 
> We setup the volume object, then drop the pool lock, and start the
> actual storage allocation. Certain pool operations will be blocked
> (start, stop, destroy, refresh), but the basic things like volume
> listings will still work.
> 
> This also allows storage allocation progress reporting: the API user can
> watch the volume object in a separate thread, polling it's 'info' for
> update to date capacity/allocation reporting.

  Okay, that one is far more complex :-)

[...]
> +        /* Make a shallow copy of the 'defined' volume definition, since the
> +         * original allocation value will change as the user polls 'info',
> +         * but we only need the initial requested values
> +         */
> +        memcpy(buildvoldef, voldef, sizeof(*voldef));
> +        voldef = NULL;
> +
> +        /* Drop the pool lock during volume allocation */
> +        pool->asyncjobs++;
> +        virStoragePoolObjUnlock(pool);
> +
> +        buildvoldef->building = 1;
> +        buildret = backend->buildVol(obj->conn, buildvoldef);
> +        buildvoldef->building = 0;
> +
> +        virStoragePoolObjLock(pool);
> +        pool->asyncjobs--;

  since buildvoldef->building is a condition, maybe it's safer to (un)set
it while the lock is taken.
  I think the scheme works, but one thing we need to be careful about if
that if adding new operations they should also look at that ->building
condition.

Daniel

-- 
Daniel Veillard      | libxml Gnome XML XSLT toolkit  http://xmlsoft.org/
daniel at veillard.com  | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library  http://libvirt.org/




More information about the libvir-list mailing list