[libvirt] [PATCH] Access qemu backing_file with relative pool path
Jesse J Cook
jesse.cook at eads-na-security.com
Wed Mar 9 18:42:20 UTC 2011
On Wed, 2011-03-09 at 16:07 +0000, Daniel P. Berrange wrote:
> On Thu, Mar 03, 2011 at 09:06:25PM -0600, Jesse Cook wrote:
> > This patch enables the relative backing file path support provided by
> > qemu-img create.
> >
> > If the storage pool is not found with the specified path, check if the
> > file exists relative to the pool where the new image will be created by
> > prepending the storage pool path.
> > ---
> > src/storage/storage_backend.c | 32 ++++++++++++++++++++++++++++----
> > 1 files changed, 28 insertions(+), 4 deletions(-)
> >
> > diff --git a/src/storage/storage_backend.c b/src/storage/storage_backend.c
> > index 2eede74..bb49f22 100644
> > --- a/src/storage/storage_backend.c
> > +++ b/src/storage/storage_backend.c
> > @@ -687,10 +687,34 @@ virStorageBackendCreateQemuImg(virConnectPtr conn,
> > return -1;
> > }
> > if (access(vol->backingStore.path, R_OK) != 0) {
> > - virReportSystemError(errno,
> > - _("inaccessible backing store volume %s"),
> > - vol->backingStore.path);
> > - return -1;
> > + /* If the backing store image is not found with the specified path,
> > + * check for the file relative to the pool path. */
> > + int accessRetCode = -1;
> > +
> > + char *absolutePath = NULL;
> > +
> > + virBuffer absPathBuf = VIR_BUFFER_INITIALIZER;
> > +
> > + virBufferVSprintf(&absPathBuf,
> > + "%s/%s",
> > + pool->def->target.path,
> > + vol->backingStore.path);
> > +
> > + if (virBufferError(&absPathBuf)) {
> > + virBufferFreeAndReset(&absPathBuf);
> > + virReportOOMError();
> > + return -1;
> > + }
> > +
> > + absolutePath = virBufferContentAndReset(&absPathBuf);
>
> Since you're only doing one single virBufferVSprintf() call, using
> virBuffer is overkill. You can get away with the simpler
>
> virAsprintf(&absolutePath, "%s/%s",
> pool->def->target.path,
> vol->backingStore.path);
Thank you. I will incorporate that into the new patch.
>
> > + accessRetCode = access(absolutePath, R_OK);
> > + VIR_FREE(absolutePath);
> > + if (accessRetCode != 0) {
> > + virReportSystemError(errno,
> > + _("inaccessible backing store volume %s"),
> > + vol->backingStore.path);
> > + return -1;
> > + }
> > }
> > }
>
> Regards,
> Daniel
--
Jesse Cook
Research Scientist
EADS NA Defense Security & Systems Solutions, Inc. (DS3)
1476 N. Green Mount Rd
O'Fallon, Illinois 62269
Office: 618.206.4032 x436
Email: jesse.cook at eads-na-security.com
http://www.eads-na-security.com
More information about the libvir-list
mailing list