qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 09/10] scsi: add multipath support to qemu-pr-he


From: Paolo Bonzini
Subject: Re: [Qemu-devel] [PATCH 09/10] scsi: add multipath support to qemu-pr-helper
Date: Wed, 23 Aug 2017 08:50:35 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.2.1

On 23/08/2017 07:01, Fam Zheng wrote:
> On Tue, 08/22 15:18, Paolo Bonzini wrote:
>> Proper support of persistent reservation for multipath devices requires
>> communication with the multipath daemon, so that the reservation is
>> registered and applied when a path comes up.  The device mapper
>> utilities provide a library to do so; this patch makes qemu-pr-helper.c
>> detect multipath devices and, when one is found, delegate the operation
>> to libmpathpersist.
>>
>> Signed-off-by: Paolo Bonzini <address@hidden>
>> ---
>>  Makefile              |   3 +
>>  configure             |  57 ++++++++-
>>  docs/pr-manager.rst   |  27 +++++
>>  include/scsi/utils.h  |   6 +
>>  scsi/qemu-pr-helper.c | 311 
>> +++++++++++++++++++++++++++++++++++++++++++++++++-
>>  scsi/utils.c          |  15 +++
>>  6 files changed, 414 insertions(+), 5 deletions(-)
>>
>> diff --git a/Makefile b/Makefile
>> index bfd4f69ecd..f1acaad05b 100644
>> --- a/Makefile
>> +++ b/Makefile
>> @@ -388,6 +388,9 @@ fsdev/virtfs-proxy-helper$(EXESUF): 
>> fsdev/virtfs-proxy-helper.o fsdev/9p-marshal
>>  fsdev/virtfs-proxy-helper$(EXESUF): LIBS += -lcap
>>  
>>  scsi/qemu-pr-helper$(EXESUF): scsi/qemu-pr-helper.o scsi/utils.o 
>> $(crypto-obj-y) $(io-obj-y) $(qom-obj-y) $(COMMON_LDADDS)
>> +ifdef CONFIG_MPATH
>> +scsi/qemu-pr-helper$(EXESUF): LIBS += -ludev -lmultipath -lmpathpersist
>> +endif
>>  
>>  qemu-img-cmds.h: $(SRC_PATH)/qemu-img-cmds.hx $(SRC_PATH)/scripts/hxtool
>>      $(call quiet-command,sh $(SRC_PATH)/scripts/hxtool -h < $< > 
>> $@,"GEN","$@")
>> diff --git a/configure b/configure
>> index 772aff18d6..d3c9371f7c 100755
>> --- a/configure
>> +++ b/configure
>> @@ -286,6 +286,7 @@ pixman=""
>>  sdl=""
>>  sdlabi=""
>>  virtfs=""
>> +mpath=""
> 
> Whole patch: s/\<mpath\>/pr-helper/ ?

No, the helper can work without multipath support.  The mpath variable
is about supporting multipath in the helper.

Paolo

>>  vnc="yes"
>>  sparse="no"
>>  vde=""
>> @@ -948,6 +949,10 @@ for opt do
>>    ;;
>>    --enable-virtfs) virtfs="yes"
>>    ;;
>> +  --disable-mpath) mpath="no"
>> +  ;;
>> +  --enable-mpath) mpath="yes"
>> +  ;;
>>    --disable-vnc) vnc="no"
>>    ;;
>>    --enable-vnc) vnc="yes"
>> @@ -1491,6 +1496,7 @@ disabled with --disable-FEATURE, default is enabled if 
>> available:
>>    vnc-png         PNG compression for VNC server
>>    cocoa           Cocoa UI (Mac OS X only)
>>    virtfs          VirtFS
>> +  mpath           Multipath persistent reservation passthrough
>>    xen             xen backend driver support
>>    xen-pci-passthrough
>>    brlapi          BrlAPI (Braile)
>> @@ -3336,6 +3342,29 @@ else
>>  fi
>>  
>>  ##########################################
>> +# libmpathpersist probe
>> +
>> +if test "$mpath" != "no" ; then
>> +  cat > $TMPC <<EOF
>> +#include <libudev.h>
>> +#include <mpath_persist.h>
>> +unsigned mpath_mx_alloc_len = 1024;
>> +int logsink;
>> +int main(void) {
>> +    struct udev *udev = udev_new();
>> +    mpath_lib_init(udev);
>> +}
>> +EOF
>> +  if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
>> +    mpathpersist=yes
>> +  else
>> +    mpathpersist=no
>> +  fi
>> +else
>> +  mpathpersist=no
>> +fi
>> +
>> +##########################################
>>  # libcap probe
>>  
>>  if test "$cap" != "no" ; then
>> @@ -5070,16 +5099,34 @@ if test "$want_tools" = "yes" ; then
>>    fi
>>  fi
>>  if test "$softmmu" = yes ; then
>> -  if test "$virtfs" != no ; then
>> -    if test "$cap" = yes && test "$linux" = yes && test "$attr" = yes ; then
>> +  if test "$linux" = yes; then
>> +    if test "$virtfs" != no && test "$cap" = yes && test "$attr" = yes ; 
>> then
>>        virtfs=yes
>>        tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
>>      else
>>        if test "$virtfs" = yes; then
>> -        error_exit "VirtFS is supported only on Linux and requires libcap 
>> devel and libattr devel"
>> +        error_exit "VirtFS requires libcap devel and libattr devel"
>>        fi
>>        virtfs=no
>>      fi
>> +    if test "$mpath" != no && test "$mpathpersist" = yes ; then
>> +      mpath=yes
>> +      tools="$tools mpath/qemu-mpath-helper\$(EXESUF)"
> 
> scsi/qemu-pr-helper?
> 
>> +    else
>> +      if test "$mpath" = yes; then
>> +        error_exit "Multipath requires libmpathpersist devel"
>> +      fi
>> +      mpath=no
>> +    fi
>> +  else
>> +    if test "$virtfs" = yes; then
>> +      error_exit "VirtFS is supported only on Linux"
>> +    fi
>> +    virtfs=no
>> +    if test "$mpath" = yes; then
>> +      error_exit "Multipath is supported only on Linux"
>> +    fi
>> +    mpath=no
>>    fi
>>  fi
>>  
>> @@ -5326,6 +5373,7 @@ echo "Audio drivers     $audio_drv_list"
>>  echo "Block whitelist (rw) $block_drv_rw_whitelist"
>>  echo "Block whitelist (ro) $block_drv_ro_whitelist"
>>  echo "VirtFS support    $virtfs"
>> +echo "Multipath support $mpath"
>>  echo "VNC support       $vnc"
>>  if test "$vnc" = "yes" ; then
>>      echo "VNC SASL support  $vnc_sasl"
>> @@ -5773,6 +5821,9 @@ fi
>>  if test "$virtfs" = "yes" ; then
>>    echo "CONFIG_VIRTFS=y" >> $config_host_mak
>>  fi
>> +if test "$mpath" = "yes" ; then
>> +  echo "CONFIG_MPATH=y" >> $config_host_mak
>> +fi
>>  if test "$vhost_scsi" = "yes" ; then
>>    echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
>>  fi
> 
> Fam
> 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]