Patchwork [v5,1/2] qemu: Add a config option for GlusterFS as block backend

login
register
mail settings
Submitter Bharata B Rao
Date Aug. 7, 2012, 8 a.m.
Message ID <20120807080026.GC7480@in.ibm.com>
Download mbox | patch
Permalink /patch/175514/
State New
Headers show

Comments

Bharata B Rao - Aug. 7, 2012, 8 a.m.
qemu: Add a config option for GlusterFS as block backend

From: Bharata B Rao <bharata@linux.vnet.ibm.com>

GlusterFS support in QEMU depends on libgfapi, libgfrpc and
libgfxdr provided by GlusterFS.

Signed-off-by: Bharata B Rao <bharata@linux.vnet.ibm.com>
---

 configure |   34 ++++++++++++++++++++++++++++++++++
 1 files changed, 34 insertions(+), 0 deletions(-)
Blue Swirl - Aug. 7, 2012, 8:15 p.m.
On Tue, Aug 7, 2012 at 8:00 AM, Bharata B Rao
<bharata@linux.vnet.ibm.com> wrote:
> qemu: Add a config option for GlusterFS as block backend
>
> From: Bharata B Rao <bharata@linux.vnet.ibm.com>
>
> GlusterFS support in QEMU depends on libgfapi, libgfrpc and
> libgfxdr provided by GlusterFS.
>
> Signed-off-by: Bharata B Rao <bharata@linux.vnet.ibm.com>
> ---
>
>  configure |   34 ++++++++++++++++++++++++++++++++++
>  1 files changed, 34 insertions(+), 0 deletions(-)
>
>
> diff --git a/configure b/configure
> index 027a718..5bcf6d5 100755
> --- a/configure
> +++ b/configure
> @@ -824,6 +824,10 @@ for opt do
>    ;;
>    --disable-guest-agent) guest_agent="no"
>    ;;
> +  --disable-glusterfs) glusterfs="no"

This is the first use of $glusterfs. Please define the default value,
the rationale is given at the start of configure:
# Default value for a variable defining feature "foo".
#  * foo="no"  feature will only be used if --enable-foo arg is given
#  * foo=""    feature will be searched for, and if found, will be used
#              unless --disable-foo is given
#  * foo="yes" this value will only be set by --enable-foo flag.
#              feature will searched for,
#              if not found, configure exits with error

I think "" would match other features.

> +  ;;
> +  --enable-glusterfs) glusterfs="yes"
> +  ;;
>    *) echo "ERROR: unknown option $opt"; show_help="yes"
>    ;;
>    esac
> @@ -1112,6 +1116,8 @@ echo "  --disable-guest-agent    disable building of the QEMU Guest Agent"
>  echo "  --enable-guest-agent     enable building of the QEMU Guest Agent"
>  echo "  --with-coroutine=BACKEND coroutine backend. Supported options:"
>  echo "                           gthread, ucontext, sigaltstack, windows"
> +echo "  --enable-glusterfs       enable GlusterFS backend"
> +echo "  --disable-glusterfs      disable GlusterFS backend"
>  echo ""
>  echo "NOTE: The object files are built at the place where configure is launched"
>  exit 1
> @@ -2279,6 +2285,29 @@ EOF
>    fi
>  fi
>
> +##########################################
> +# glusterfs probe
> +if test "$glusterfs" != "no" ; then
> +  cat > $TMPC <<EOF
> +#include <glusterfs/api/glfs.h>
> +int main(void) {
> +    (void) glfs_new("volume");
> +    return 0;
> +}
> +EOF
> +  glusterfs_libs="-lgfapi -lgfrpc -lgfxdr"
> +  if compile_prog "" "$glusterfs_libs" ; then
> +    glusterfs=yes
> +    libs_tools="$glusterfs_libs $libs_tools"
> +    libs_softmmu="$glusterfs_libs $libs_softmmu"
> +  else
> +    if test "$glusterfs" = "yes" ; then
> +      feature_not_found "GlusterFS backend support"
> +    fi
> +    glusterfs=no
> +  fi
> +fi
> +
>  #
>  # Check for xxxat() functions when we are building linux-user
>  # emulator.  This is done because older glibc versions don't
> @@ -3104,6 +3133,7 @@ echo "OpenGL support    $opengl"
>  echo "libiscsi support  $libiscsi"
>  echo "build guest agent $guest_agent"
>  echo "coroutine backend $coroutine_backend"
> +echo "GlusterFS support $glusterfs"
>
>  if test "$sdl_too_old" = "yes"; then
>  echo "-> Your SDL version is too old - please upgrade to have SDL support"
> @@ -3441,6 +3471,10 @@ if test "$has_environ" = "yes" ; then
>    echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
>  fi
>
> +if test "$glusterfs" = "yes" ; then
> +  echo "CONFIG_GLUSTERFS=y" >> $config_host_mak
> +fi
> +
>  # USB host support
>  case "$usb" in
>  linux)
>
Anand Avati - Aug. 8, 2012, 4:19 p.m.
On 08/07/2012 01:00 AM, Bharata B Rao wrote:
> qemu: Add a config option for GlusterFS as block backend
>
> From: Bharata B Rao <bharata@linux.vnet.ibm.com>
>
> GlusterFS support in QEMU depends on libgfapi, libgfrpc and
> libgfxdr provided by GlusterFS.
>
> Signed-off-by: Bharata B Rao <bharata@linux.vnet.ibm.com>
> ---
>
>   configure |   34 ++++++++++++++++++++++++++++++++++
>   1 files changed, 34 insertions(+), 0 deletions(-)
>
>
> diff --git a/configure b/configure
> index 027a718..5bcf6d5 100755
> --- a/configure
> +++ b/configure
> @@ -824,6 +824,10 @@ for opt do
>     ;;
>     --disable-guest-agent) guest_agent="no"
>     ;;
> +  --disable-glusterfs) glusterfs="no"
> +  ;;
> +  --enable-glusterfs) glusterfs="yes"
> +  ;;
>     *) echo "ERROR: unknown option $opt"; show_help="yes"
>     ;;
>     esac
> @@ -1112,6 +1116,8 @@ echo "  --disable-guest-agent    disable building of the QEMU Guest Agent"
>   echo "  --enable-guest-agent     enable building of the QEMU Guest Agent"
>   echo "  --with-coroutine=BACKEND coroutine backend. Supported options:"
>   echo "                           gthread, ucontext, sigaltstack, windows"
> +echo "  --enable-glusterfs       enable GlusterFS backend"
> +echo "  --disable-glusterfs      disable GlusterFS backend"
>   echo ""
>   echo "NOTE: The object files are built at the place where configure is launched"
>   exit 1
> @@ -2279,6 +2285,29 @@ EOF
>     fi
>   fi
>
> +##########################################
> +# glusterfs probe
> +if test "$glusterfs" != "no" ; then
> +  cat > $TMPC <<EOF
> +#include <glusterfs/api/glfs.h>
> +int main(void) {
> +    (void) glfs_new("volume");
> +    return 0;
> +}
> +EOF
> +  glusterfs_libs="-lgfapi -lgfrpc -lgfxdr"
> +  if compile_prog "" "$glusterfs_libs" ; then
> +    glusterfs=yes
> +    libs_tools="$glusterfs_libs $libs_tools"
> +    libs_softmmu="$glusterfs_libs $libs_softmmu"
> +  else
> +    if test "$glusterfs" = "yes" ; then
> +      feature_not_found "GlusterFS backend support"
> +    fi
> +    glusterfs=no
> +  fi
> +fi
> +

It would be best if the autoconf changes is based on pkgconfig as shown 
in 
https://github.com/gluster/glusterfs/blob/master/api/examples/configure.ac. 
If you do not want to introduce pkgconfig dependency (if you already do 
not have it) then it would be good to adopt the steps mentioned in 
section "2." of
https://github.com/gluster/glusterfs/blob/master/api/examples/README. 
That would basically mean including "-I/path/include/glusterfs" in 
CPPFLAGS and only "#include <api/glfs.h>" instead of <glusterfs/api/glfs.h>.

Thanks,
Avati
>   #
>   # Check for xxxat() functions when we are building linux-user
>   # emulator.  This is done because older glibc versions don't
> @@ -3104,6 +3133,7 @@ echo "OpenGL support    $opengl"
>   echo "libiscsi support  $libiscsi"
>   echo "build guest agent $guest_agent"
>   echo "coroutine backend $coroutine_backend"
> +echo "GlusterFS support $glusterfs"
>
>   if test "$sdl_too_old" = "yes"; then
>   echo "-> Your SDL version is too old - please upgrade to have SDL support"
> @@ -3441,6 +3471,10 @@ if test "$has_environ" = "yes" ; then
>     echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
>   fi
>
> +if test "$glusterfs" = "yes" ; then
> +  echo "CONFIG_GLUSTERFS=y" >> $config_host_mak
> +fi
> +
>   # USB host support
>   case "$usb" in
>   linux)
>
Bharata B Rao - Aug. 9, 2012, 8:19 a.m.
On Wed, Aug 08, 2012 at 09:19:12AM -0700, Anand Avati wrote:
> 
> It would be best if the autoconf changes is based on pkgconfig as
> shown in https://github.com/gluster/glusterfs/blob/master/api/examples/configure.ac.
> If you do not want to introduce pkgconfig dependency (if you already
> do not have it) then it would be good to adopt the steps mentioned
> in section "2." of
> https://github.com/gluster/glusterfs/blob/master/api/examples/README.
> That would basically mean including "-I/path/include/glusterfs" in
> CPPFLAGS and only "#include <api/glfs.h>" instead of
> <glusterfs/api/glfs.h>.

I don't see others in QEMU doing this currently. I suggest that we
have the current patchset in 1.2 and see if such improvements can be
done subsequently.

Regards,
Bharata.

Patch

diff --git a/configure b/configure
index 027a718..5bcf6d5 100755
--- a/configure
+++ b/configure
@@ -824,6 +824,10 @@  for opt do
   ;;
   --disable-guest-agent) guest_agent="no"
   ;;
+  --disable-glusterfs) glusterfs="no"
+  ;;
+  --enable-glusterfs) glusterfs="yes"
+  ;;
   *) echo "ERROR: unknown option $opt"; show_help="yes"
   ;;
   esac
@@ -1112,6 +1116,8 @@  echo "  --disable-guest-agent    disable building of the QEMU Guest Agent"
 echo "  --enable-guest-agent     enable building of the QEMU Guest Agent"
 echo "  --with-coroutine=BACKEND coroutine backend. Supported options:"
 echo "                           gthread, ucontext, sigaltstack, windows"
+echo "  --enable-glusterfs       enable GlusterFS backend"
+echo "  --disable-glusterfs      disable GlusterFS backend"
 echo ""
 echo "NOTE: The object files are built at the place where configure is launched"
 exit 1
@@ -2279,6 +2285,29 @@  EOF
   fi
 fi
 
+##########################################
+# glusterfs probe
+if test "$glusterfs" != "no" ; then
+  cat > $TMPC <<EOF
+#include <glusterfs/api/glfs.h>
+int main(void) {
+    (void) glfs_new("volume");
+    return 0;
+}
+EOF
+  glusterfs_libs="-lgfapi -lgfrpc -lgfxdr"
+  if compile_prog "" "$glusterfs_libs" ; then
+    glusterfs=yes
+    libs_tools="$glusterfs_libs $libs_tools"
+    libs_softmmu="$glusterfs_libs $libs_softmmu"
+  else
+    if test "$glusterfs" = "yes" ; then
+      feature_not_found "GlusterFS backend support"
+    fi
+    glusterfs=no
+  fi
+fi
+
 #
 # Check for xxxat() functions when we are building linux-user
 # emulator.  This is done because older glibc versions don't
@@ -3104,6 +3133,7 @@  echo "OpenGL support    $opengl"
 echo "libiscsi support  $libiscsi"
 echo "build guest agent $guest_agent"
 echo "coroutine backend $coroutine_backend"
+echo "GlusterFS support $glusterfs"
 
 if test "$sdl_too_old" = "yes"; then
 echo "-> Your SDL version is too old - please upgrade to have SDL support"
@@ -3441,6 +3471,10 @@  if test "$has_environ" = "yes" ; then
   echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
 fi
 
+if test "$glusterfs" = "yes" ; then
+  echo "CONFIG_GLUSTERFS=y" >> $config_host_mak
+fi
+
 # USB host support
 case "$usb" in
 linux)