[libvirt] [PATCH 1/1] Format FS pools

Daniel P. Berrange berrange at redhat.com
Tue Feb 23 09:03:05 UTC 2010


On Tue, Feb 23, 2010 at 09:15:55AM +0100, Daniel Veillard wrote:
> On Mon, Feb 22, 2010 at 01:44:39PM -0500, David Allan wrote:
> > * Create the filesystem on the partition used by the pool.
> > ---
> >  configure.ac                     |    5 +++++
> >  src/storage/storage_backend_fs.c |   22 ++++++++++++++++++++++
> >  2 files changed, 27 insertions(+), 0 deletions(-)
> > 
> > diff --git a/configure.ac b/configure.ac
> > index 743a357..616bd03 100644
> > --- a/configure.ac
> > +++ b/configure.ac
> > @@ -1252,12 +1252,15 @@ AM_CONDITIONAL([WITH_STORAGE_DIR], [test "$with_storage_dir" = "yes"])
> >  if test "$with_storage_fs" = "yes" -o "$with_storage_fs" = "check"; then
> >    AC_PATH_PROG([MOUNT], [mount], [], [$PATH:/sbin:/usr/sbin])
> >    AC_PATH_PROG([UMOUNT], [umount], [], [$PATH:/sbin:/usr/sbin])
> > +  AC_PATH_PROG([MKE2FS], [mke2fs], [], [$PATH:/sbin:/usr/sbin])
> 
>   Actually I think we need to check for mkfs to be filesystem generic
> 
> >    if test "$with_storage_fs" = "yes" ; then
> >      if test -z "$MOUNT" ; then AC_MSG_ERROR([We need mount for FS storage driver]) ; fi
> >      if test -z "$UMOUNT" ; then AC_MSG_ERROR([We need umount for FS storage driver]) ; fi
> > +    if test -z "$MKE2FS" ; then AC_MSG_ERROR([We need mke2fs for FS storage driver]) ; fi
> >    else
> >      if test -z "$MOUNT" ; then with_storage_fs=no ; fi
> >      if test -z "$UMOUNT" ; then with_storage_fs=no ; fi
> > +    if test -z "$MKE2FS" ; then with_storage_fs=no ; fi
> > 
> >      if test "$with_storage_fs" = "check" ; then with_storage_fs=yes ; fi
> >    fi
> > @@ -1268,6 +1271,8 @@ if test "$with_storage_fs" = "yes" -o "$with_storage_fs" = "check"; then
> >          [Location or name of the mount program])
> >      AC_DEFINE_UNQUOTED([UMOUNT],["$UMOUNT"],
> >          [Location or name of the mount program])
> > +    AC_DEFINE_UNQUOTED([MKE2FS],["$MKE2FS"],
> > +        [Location or name of the mke2fs program])
> >    fi
> >  fi
> >  AM_CONDITIONAL([WITH_STORAGE_FS], [test "$with_storage_fs" = "yes"])
> > diff --git a/src/storage/storage_backend_fs.c b/src/storage/storage_backend_fs.c
> > index 8279d78..eb5da5e 100644
> > --- a/src/storage/storage_backend_fs.c
> > +++ b/src/storage/storage_backend_fs.c
> > @@ -45,6 +45,7 @@
> >  #include "util.h"
> >  #include "memory.h"
> >  #include "xml.h"
> > +#include "logging.h"
> > 
> >  #define VIR_FROM_THIS VIR_FROM_STORAGE
> > 
> > @@ -500,6 +501,7 @@ virStorageBackendFileSystemBuild(virConnectPtr conn ATTRIBUTE_UNUSED,
> >                                   virStoragePoolObjPtr pool,
> >                                   unsigned int flags ATTRIBUTE_UNUSED)
> >  {
> > +    const char *mke2fsargv[5], *device = NULL, *format = NULL;
> >      int err, ret = -1;
> >      char *parent;
> >      char *p;
> > @@ -540,6 +542,26 @@ virStorageBackendFileSystemBuild(virConnectPtr conn ATTRIBUTE_UNUSED,
> >                               pool->def->target.path);
> >          goto error;
> >      }
> > +
> > +    device = pool->def->source.devices[0].path;
> > +    format = virStoragePoolFormatFileSystemTypeToString(pool->def->source.format);
> > +
> > +    VIR_DEBUG("source device: '%s' format: '%s'", device, format);
> > +
> > +    mke2fsargv[0] = MKE2FS;
> > +    mke2fsargv[1] = "-t";
> 
>   mkfs has a -t type argument, not mke2fs on my machine
> 
> > +    mke2fsargv[2] = format;
> > +    mke2fsargv[3] = device;
> > +    mke2fsargv[4] = NULL;
> > +
> > +    if (virRun(mke2fsargv, NULL) < 0) {
> > +        virReportSystemError(errno,
> > +                             _("Failed to make filesystem of "
> > +                               "type '%s' on device '%s'"),
> > +                               format, device);
> > +        goto error;
> > +    }
> > +
> >      ret = 0;
> >  error:
> >      VIR_FREE(parent);
> 
>   So I come up with the following patch instead. Note that /sbin/mkfs
> is provided by util-linux which is alread required for the storage fs
> support so we don't need to add anything (BTW util-linux is now provided
> by util-linux-ng on recent Fedoras, but keeping the old canonical
> require name is probably better).
> 
> 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/

> diff --git a/configure.ac b/configure.ac
> index 743a357..117cb20 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -1252,12 +1252,15 @@ AM_CONDITIONAL([WITH_STORAGE_DIR], [test "$with_storage_dir" = "yes"])
>  if test "$with_storage_fs" = "yes" -o "$with_storage_fs" = "check"; then
>    AC_PATH_PROG([MOUNT], [mount], [], [$PATH:/sbin:/usr/sbin])
>    AC_PATH_PROG([UMOUNT], [umount], [], [$PATH:/sbin:/usr/sbin])
> +  AC_PATH_PROG([MKFS], [mkfs], [], [$PATH:/sbin:/usr/sbin])
>    if test "$with_storage_fs" = "yes" ; then
>      if test -z "$MOUNT" ; then AC_MSG_ERROR([We need mount for FS storage driver]) ; fi
>      if test -z "$UMOUNT" ; then AC_MSG_ERROR([We need umount for FS storage driver]) ; fi
> +    if test -z "$MKFS" ; then AC_MSG_ERROR([We need mkfs for FS storage driver]) ; fi
>    else
>      if test -z "$MOUNT" ; then with_storage_fs=no ; fi
>      if test -z "$UMOUNT" ; then with_storage_fs=no ; fi
> +    if test -z "$MKFS" ; then with_storage_fs=no ; fi
>  
>      if test "$with_storage_fs" = "check" ; then with_storage_fs=yes ; fi
>    fi
> @@ -1268,6 +1271,8 @@ if test "$with_storage_fs" = "yes" -o "$with_storage_fs" = "check"; then
>          [Location or name of the mount program])
>      AC_DEFINE_UNQUOTED([UMOUNT],["$UMOUNT"],
>          [Location or name of the mount program])
> +    AC_DEFINE_UNQUOTED([MKFS],["$MKFS"],
> +        [Location or name of the mkfs program])
>    fi
>  fi
>  AM_CONDITIONAL([WITH_STORAGE_FS], [test "$with_storage_fs" = "yes"])
> diff --git a/src/storage/storage_backend_fs.c b/src/storage/storage_backend_fs.c
> index 8279d78..0444fcf 100644
> --- a/src/storage/storage_backend_fs.c
> +++ b/src/storage/storage_backend_fs.c
> @@ -45,6 +45,7 @@
>  #include "util.h"
>  #include "memory.h"
>  #include "xml.h"
> +#include "logging.h"
>  
>  #define VIR_FROM_THIS VIR_FROM_STORAGE
>  
> @@ -500,6 +501,7 @@ virStorageBackendFileSystemBuild(virConnectPtr conn ATTRIBUTE_UNUSED,
>                                   virStoragePoolObjPtr pool,
>                                   unsigned int flags ATTRIBUTE_UNUSED)
>  {
> +    const char *mke2fsargv[5], *device = NULL, *format = NULL;
>      int err, ret = -1;
>      char *parent;
>      char *p;
> @@ -540,6 +542,26 @@ virStorageBackendFileSystemBuild(virConnectPtr conn ATTRIBUTE_UNUSED,
>                               pool->def->target.path);
>          goto error;
>      }
> +
> +    device = pool->def->source.devices[0].path;
> +    format = virStoragePoolFormatFileSystemTypeToString(pool->def->source.format);
> +
> +    VIR_DEBUG("source device: '%s' format: '%s'", device, format);
> +
> +    mke2fsargv[0] = MKFS;
> +    mke2fsargv[1] = "-t";
> +    mke2fsargv[2] = format;
> +    mke2fsargv[3] = device;
> +    mke2fsargv[4] = NULL;
> +
> +    if (virRun(mke2fsargv, NULL) < 0) {
> +        virReportSystemError(errno,
> +                             _("Failed to make filesystem of "
> +                               "type '%s' on device '%s'"),
> +                               format, device);
> +        goto error;
> +    }
> +
>      ret = 0;
>  error:
>      VIR_FREE(parent);

ACK, this looks fine - just add a 'util-linux-ng' dependancy to the RPM
spec for mkfs


Daniel
-- 
|: Red Hat, Engineering, London    -o-   http://people.redhat.com/berrange/ :|
|: http://libvirt.org -o- http://virt-manager.org -o- http://deltacloud.org :|
|: http://autobuild.org        -o-         http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505  -o-   F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|




More information about the libvir-list mailing list