Compare commits
4 Commits
b963f2fd93
...
004912aac0
Author | SHA1 | Date |
---|---|---|
Vitaliy Filippov | 004912aac0 | |
Vitaliy Filippov | c18e92273e | |
Vitaliy Filippov | 9815d70ffc | |
Vitaliy Filippov | 4a4627dcab |
|
@ -0,0 +1,181 @@
|
||||||
|
Index: qemu-5.2+dfsg/qapi/block-core.json
|
||||||
|
===================================================================
|
||||||
|
--- qemu-5.2+dfsg.orig/qapi/block-core.json
|
||||||
|
+++ qemu-5.2+dfsg/qapi/block-core.json
|
||||||
|
@@ -2831,7 +2831,7 @@
|
||||||
|
'luks', 'nbd', 'nfs', 'null-aio', 'null-co', 'nvme', 'parallels',
|
||||||
|
'qcow', 'qcow2', 'qed', 'quorum', 'raw', 'rbd',
|
||||||
|
{ 'name': 'replication', 'if': 'defined(CONFIG_REPLICATION)' },
|
||||||
|
- 'sheepdog',
|
||||||
|
+ 'sheepdog', 'vitastor',
|
||||||
|
'ssh', 'throttle', 'vdi', 'vhdx', 'vmdk', 'vpc', 'vvfat' ] }
|
||||||
|
|
||||||
|
##
|
||||||
|
@@ -3668,6 +3668,28 @@
|
||||||
|
'*tag': 'str' } }
|
||||||
|
|
||||||
|
##
|
||||||
|
+# @BlockdevOptionsVitastor:
|
||||||
|
+#
|
||||||
|
+# Driver specific block device options for vitastor
|
||||||
|
+#
|
||||||
|
+# @image: Image name
|
||||||
|
+# @inode: Inode number
|
||||||
|
+# @pool: Pool ID
|
||||||
|
+# @size: Desired image size in bytes
|
||||||
|
+# @config-path: Path to Vitastor configuration
|
||||||
|
+# @etcd-host: etcd connection address(es)
|
||||||
|
+# @etcd-prefix: etcd key/value prefix
|
||||||
|
+##
|
||||||
|
+{ 'struct': 'BlockdevOptionsVitastor',
|
||||||
|
+ 'data': { '*inode': 'uint64',
|
||||||
|
+ '*pool': 'uint64',
|
||||||
|
+ '*size': 'uint64',
|
||||||
|
+ '*image': 'str',
|
||||||
|
+ '*config-path': 'str',
|
||||||
|
+ '*etcd-host': 'str',
|
||||||
|
+ '*etcd-prefix': 'str' } }
|
||||||
|
+
|
||||||
|
+##
|
||||||
|
# @ReplicationMode:
|
||||||
|
#
|
||||||
|
# An enumeration of replication modes.
|
||||||
|
@@ -4015,6 +4037,7 @@
|
||||||
|
'replication': { 'type': 'BlockdevOptionsReplication',
|
||||||
|
'if': 'defined(CONFIG_REPLICATION)' },
|
||||||
|
'sheepdog': 'BlockdevOptionsSheepdog',
|
||||||
|
+ 'vitastor': 'BlockdevOptionsVitastor',
|
||||||
|
'ssh': 'BlockdevOptionsSsh',
|
||||||
|
'throttle': 'BlockdevOptionsThrottle',
|
||||||
|
'vdi': 'BlockdevOptionsGenericFormat',
|
||||||
|
@@ -4404,6 +4427,17 @@
|
||||||
|
'*cluster-size' : 'size' } }
|
||||||
|
|
||||||
|
##
|
||||||
|
+# @BlockdevCreateOptionsVitastor:
|
||||||
|
+#
|
||||||
|
+# Driver specific image creation options for Vitastor.
|
||||||
|
+#
|
||||||
|
+# @size: Size of the virtual disk in bytes
|
||||||
|
+##
|
||||||
|
+{ 'struct': 'BlockdevCreateOptionsVitastor',
|
||||||
|
+ 'data': { 'location': 'BlockdevOptionsVitastor',
|
||||||
|
+ 'size': 'size' } }
|
||||||
|
+
|
||||||
|
+##
|
||||||
|
# @BlockdevVmdkSubformat:
|
||||||
|
#
|
||||||
|
# Subformat options for VMDK images
|
||||||
|
@@ -4665,6 +4699,7 @@
|
||||||
|
'qed': 'BlockdevCreateOptionsQed',
|
||||||
|
'rbd': 'BlockdevCreateOptionsRbd',
|
||||||
|
'sheepdog': 'BlockdevCreateOptionsSheepdog',
|
||||||
|
+ 'vitastor': 'BlockdevCreateOptionsVitastor',
|
||||||
|
'ssh': 'BlockdevCreateOptionsSsh',
|
||||||
|
'vdi': 'BlockdevCreateOptionsVdi',
|
||||||
|
'vhdx': 'BlockdevCreateOptionsVhdx',
|
||||||
|
Index: qemu-5.2+dfsg/block/meson.build
|
||||||
|
===================================================================
|
||||||
|
--- qemu-5.2+dfsg.orig/block/meson.build
|
||||||
|
+++ qemu-5.2+dfsg/block/meson.build
|
||||||
|
@@ -76,6 +76,7 @@ foreach m : [
|
||||||
|
['CONFIG_LIBNFS', 'nfs', libnfs, 'nfs.c'],
|
||||||
|
['CONFIG_LIBSSH', 'ssh', libssh, 'ssh.c'],
|
||||||
|
['CONFIG_RBD', 'rbd', rbd, 'rbd.c'],
|
||||||
|
+ ['CONFIG_VITASTOR', 'vitastor', vitastor, 'vitastor.c'],
|
||||||
|
]
|
||||||
|
if config_host.has_key(m[0])
|
||||||
|
if enable_modules
|
||||||
|
Index: qemu-5.2+dfsg/configure
|
||||||
|
===================================================================
|
||||||
|
--- qemu-5.2+dfsg.orig/configure
|
||||||
|
+++ qemu-5.2+dfsg/configure
|
||||||
|
@@ -372,6 +372,7 @@ trace_backends="log"
|
||||||
|
trace_file="trace"
|
||||||
|
spice=""
|
||||||
|
rbd=""
|
||||||
|
+vitastor=""
|
||||||
|
smartcard=""
|
||||||
|
u2f="auto"
|
||||||
|
libusb=""
|
||||||
|
@@ -1263,6 +1264,10 @@ for opt do
|
||||||
|
;;
|
||||||
|
--enable-rbd) rbd="yes"
|
||||||
|
;;
|
||||||
|
+ --disable-vitastor) vitastor="no"
|
||||||
|
+ ;;
|
||||||
|
+ --enable-vitastor) vitastor="yes"
|
||||||
|
+ ;;
|
||||||
|
--disable-xfsctl) xfs="no"
|
||||||
|
;;
|
||||||
|
--enable-xfsctl) xfs="yes"
|
||||||
|
@@ -1827,6 +1832,7 @@ disabled with --disable-FEATURE, default
|
||||||
|
vhost-vdpa vhost-vdpa kernel backend support
|
||||||
|
spice spice
|
||||||
|
rbd rados block device (rbd)
|
||||||
|
+ vitastor vitastor block device
|
||||||
|
libiscsi iscsi support
|
||||||
|
libnfs nfs support
|
||||||
|
smartcard smartcard support (libcacard)
|
||||||
|
@@ -3719,6 +3725,27 @@ EOF
|
||||||
|
fi
|
||||||
|
|
||||||
|
##########################################
|
||||||
|
+# vitastor probe
|
||||||
|
+if test "$vitastor" != "no" ; then
|
||||||
|
+ cat > $TMPC <<EOF
|
||||||
|
+#include <vitastor_c.h>
|
||||||
|
+int main(void) {
|
||||||
|
+ vitastor_c_create_qemu(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+EOF
|
||||||
|
+ vitastor_libs="-lvitastor_client"
|
||||||
|
+ if compile_prog "" "$vitastor_libs" ; then
|
||||||
|
+ vitastor=yes
|
||||||
|
+ else
|
||||||
|
+ if test "$vitastor" = "yes" ; then
|
||||||
|
+ feature_not_found "vitastor block device" "Install vitastor-client-dev"
|
||||||
|
+ fi
|
||||||
|
+ vitastor=no
|
||||||
|
+ fi
|
||||||
|
+fi
|
||||||
|
+
|
||||||
|
+##########################################
|
||||||
|
# libssh probe
|
||||||
|
if test "$libssh" != "no" ; then
|
||||||
|
if $pkg_config --exists libssh; then
|
||||||
|
@@ -6456,6 +6483,10 @@ if test "$rbd" = "yes" ; then
|
||||||
|
echo "CONFIG_RBD=y" >> $config_host_mak
|
||||||
|
echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
|
||||||
|
fi
|
||||||
|
+if test "$vitastor" = "yes" ; then
|
||||||
|
+ echo "CONFIG_VITASTOR=y" >> $config_host_mak
|
||||||
|
+ echo "VITASTOR_LIBS=$vitastor_libs" >> $config_host_mak
|
||||||
|
+fi
|
||||||
|
|
||||||
|
echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
|
||||||
|
if test "$coroutine_pool" = "yes" ; then
|
||||||
|
Index: qemu-5.2+dfsg/meson.build
|
||||||
|
===================================================================
|
||||||
|
--- qemu-5.2+dfsg.orig/meson.build
|
||||||
|
+++ qemu-5.2+dfsg/meson.build
|
||||||
|
@@ -596,6 +596,10 @@ rbd = not_found
|
||||||
|
if 'CONFIG_RBD' in config_host
|
||||||
|
rbd = declare_dependency(link_args: config_host['RBD_LIBS'].split())
|
||||||
|
endif
|
||||||
|
+vitastor = not_found
|
||||||
|
+if 'CONFIG_VITASTOR' in config_host
|
||||||
|
+ vitastor = declare_dependency(link_args: config_host['VITASTOR_LIBS'].split())
|
||||||
|
+endif
|
||||||
|
glusterfs = not_found
|
||||||
|
if 'CONFIG_GLUSTERFS' in config_host
|
||||||
|
glusterfs = declare_dependency(compile_args: config_host['GLUSTERFS_CFLAGS'].split(),
|
||||||
|
@@ -2145,6 +2149,7 @@ endif
|
||||||
|
# TODO: add back protocol and server version
|
||||||
|
summary_info += {'spice support': config_host.has_key('CONFIG_SPICE')}
|
||||||
|
summary_info += {'rbd support': config_host.has_key('CONFIG_RBD')}
|
||||||
|
+summary_info += {'vitastor support': config_host.has_key('CONFIG_VITASTOR')}
|
||||||
|
summary_info += {'xfsctl support': config_host.has_key('CONFIG_XFS')}
|
||||||
|
summary_info += {'smartcard support': config_host.has_key('CONFIG_SMARTCARD')}
|
||||||
|
summary_info += {'U2F support': u2f.found()}
|
|
@ -22,7 +22,7 @@
|
||||||
Name: qemu-kvm
|
Name: qemu-kvm
|
||||||
Version: 4.2.0
|
Version: 4.2.0
|
||||||
-Release: 29.vitastor%{?dist}.6
|
-Release: 29.vitastor%{?dist}.6
|
||||||
+Release: 32.vitastor%{?dist}.6
|
+Release: 34.vitastor%{?dist}.6
|
||||||
# Epoch because we pushed a qemu-1.0 package. AIUI this can't ever be dropped
|
# Epoch because we pushed a qemu-1.0 package. AIUI this can't ever be dropped
|
||||||
Epoch: 15
|
Epoch: 15
|
||||||
License: GPLv2 and GPLv2+ and CC-BY
|
License: GPLv2 and GPLv2+ and CC-BY
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
Name: qemu-kvm
|
Name: qemu-kvm
|
||||||
Version: 4.2.0
|
Version: 4.2.0
|
||||||
-Release: 29%{?dist}.6
|
-Release: 29%{?dist}.6
|
||||||
+Release: 32.vitastor%{?dist}.6
|
+Release: 33.vitastor%{?dist}.6
|
||||||
# Epoch because we pushed a qemu-1.0 package. AIUI this can't ever be dropped
|
# Epoch because we pushed a qemu-1.0 package. AIUI this can't ever be dropped
|
||||||
Epoch: 15
|
Epoch: 15
|
||||||
License: GPLv2 and GPLv2+ and CC-BY
|
License: GPLv2 and GPLv2+ and CC-BY
|
||||||
|
|
|
@ -0,0 +1,103 @@
|
||||||
|
--- qemu-kvm-6.2.spec.orig 2023-07-18 13:52:57.636625440 +0000
|
||||||
|
+++ qemu-kvm-6.2.spec 2023-07-18 13:52:19.011683886 +0000
|
||||||
|
@@ -73,6 +73,7 @@ Requires: %{name}-hw-usbredir = %{epoch}
|
||||||
|
%endif \
|
||||||
|
Requires: %{name}-block-iscsi = %{epoch}:%{version}-%{release} \
|
||||||
|
Requires: %{name}-block-rbd = %{epoch}:%{version}-%{release} \
|
||||||
|
+Requires: %{name}-block-vitastor = %{epoch}:%{version}-%{release}\
|
||||||
|
Requires: %{name}-block-ssh = %{epoch}:%{version}-%{release}
|
||||||
|
|
||||||
|
# Macro to properly setup RHEL/RHEV conflict handling
|
||||||
|
@@ -83,7 +84,7 @@ Obsoletes: %1-rhev <= %{epoch}:%{version
|
||||||
|
Summary: QEMU is a machine emulator and virtualizer
|
||||||
|
Name: qemu-kvm
|
||||||
|
Version: 6.2.0
|
||||||
|
-Release: 32%{?rcrel}%{?dist}
|
||||||
|
+Release: 32.vitastor%{?rcrel}%{?dist}
|
||||||
|
# Epoch because we pushed a qemu-1.0 package. AIUI this can't ever be dropped
|
||||||
|
Epoch: 15
|
||||||
|
License: GPLv2 and GPLv2+ and CC-BY
|
||||||
|
@@ -122,6 +123,7 @@ Source37: tests_data_acpi_pc_SSDT.dimmpx
|
||||||
|
Source38: tests_data_acpi_q35_FACP.slic
|
||||||
|
Source39: tests_data_acpi_q35_SSDT.dimmpxm
|
||||||
|
Source40: tests_data_acpi_virt_SSDT.memhp
|
||||||
|
+Source41: qemu-vitastor.c
|
||||||
|
|
||||||
|
Patch0001: 0001-redhat-Adding-slirp-to-the-exploded-tree.patch
|
||||||
|
Patch0005: 0005-Initial-redhat-build.patch
|
||||||
|
@@ -652,6 +654,7 @@ Patch255: kvm-scsi-protect-req-aiocb-wit
|
||||||
|
Patch256: kvm-dma-helpers-prevent-dma_blk_cb-vs-dma_aio_cancel-rac.patch
|
||||||
|
# For bz#2090990 - qemu crash with error scsi_req_unref(SCSIRequest *): Assertion `req->refcount > 0' failed or scsi_dma_complete(void *, int): Assertion `r->req.aiocb != NULL' failed [8.7.0]
|
||||||
|
Patch257: kvm-virtio-scsi-reset-SCSI-devices-from-main-loop-thread.patch
|
||||||
|
+Patch258: qemu-6.2-vitastor.patch
|
||||||
|
|
||||||
|
BuildRequires: wget
|
||||||
|
BuildRequires: rpm-build
|
||||||
|
@@ -689,6 +692,7 @@ BuildRequires: libcurl-devel
|
||||||
|
BuildRequires: libssh-devel
|
||||||
|
BuildRequires: librados-devel
|
||||||
|
BuildRequires: librbd-devel
|
||||||
|
+BuildRequires: vitastor-client-devel
|
||||||
|
%if %{have_gluster}
|
||||||
|
# For gluster block driver
|
||||||
|
BuildRequires: glusterfs-api-devel
|
||||||
|
@@ -926,6 +930,14 @@ Install this package if you want to acce
|
||||||
|
using the rbd protocol.
|
||||||
|
|
||||||
|
|
||||||
|
+%package block-vitastor
|
||||||
|
+Summary: QEMU Vitastor block driver
|
||||||
|
+Requires: %{name}-common%{?_isa} = %{epoch}:%{version}-%{release}
|
||||||
|
+
|
||||||
|
+%description block-vitastor
|
||||||
|
+This package provides the additional Vitastor block driver for QEMU.
|
||||||
|
+
|
||||||
|
+
|
||||||
|
%package block-ssh
|
||||||
|
Summary: QEMU SSH block driver
|
||||||
|
Requires: %{name}-common%{?_isa} = %{epoch}:%{version}-%{release}
|
||||||
|
@@ -979,6 +991,7 @@ This package provides usbredir support.
|
||||||
|
rm -fr slirp
|
||||||
|
mkdir slirp
|
||||||
|
%autopatch -p1
|
||||||
|
+cp %{SOURCE41} ./block/vitastor.c
|
||||||
|
|
||||||
|
%global qemu_kvm_build qemu_kvm_build
|
||||||
|
mkdir -p %{qemu_kvm_build}
|
||||||
|
@@ -994,7 +1007,7 @@ cp -f %{SOURCE40} tests/data/acpi/virt/S
|
||||||
|
# --build-id option is used for giving info to the debug packages.
|
||||||
|
buildldflags="VL_LDFLAGS=-Wl,--build-id"
|
||||||
|
|
||||||
|
-%global block_drivers_list qcow2,raw,file,host_device,nbd,iscsi,rbd,blkdebug,luks,null-co,nvme,copy-on-read,throttle
|
||||||
|
+%global block_drivers_list qcow2,raw,file,host_device,nbd,iscsi,rbd,vitastor,blkdebug,luks,null-co,nvme,copy-on-read,throttle
|
||||||
|
|
||||||
|
%if 0%{have_gluster}
|
||||||
|
%global block_drivers_list %{block_drivers_list},gluster
|
||||||
|
@@ -1149,9 +1162,7 @@ pushd %{qemu_kvm_build}
|
||||||
|
--firmwarepath=%{_prefix}/share/qemu-firmware \
|
||||||
|
--meson="git" \
|
||||||
|
--target-list="%{buildarch}" \
|
||||||
|
- --block-drv-rw-whitelist=%{block_drivers_list} \
|
||||||
|
--audio-drv-list= \
|
||||||
|
- --block-drv-ro-whitelist=vmdk,vhdx,vpc,https,ssh \
|
||||||
|
--with-coroutine=ucontext \
|
||||||
|
--with-git=git \
|
||||||
|
--tls-priority=@QEMU,SYSTEM \
|
||||||
|
@@ -1197,6 +1208,7 @@ pushd %{qemu_kvm_build}
|
||||||
|
%endif
|
||||||
|
--enable-pie \
|
||||||
|
--enable-rbd \
|
||||||
|
+ --enable-vitastor \
|
||||||
|
%if 0%{have_librdma}
|
||||||
|
--enable-rdma \
|
||||||
|
%endif
|
||||||
|
@@ -1794,6 +1806,9 @@ sh %{_sysconfdir}/sysconfig/modules/kvm.
|
||||||
|
%files block-rbd
|
||||||
|
%{_libdir}/qemu-kvm/block-rbd.so
|
||||||
|
|
||||||
|
+%files block-vitastor
|
||||||
|
+%{_libdir}/qemu-kvm/block-vitastor.so
|
||||||
|
+
|
||||||
|
%files block-ssh
|
||||||
|
%{_libdir}/qemu-kvm/block-ssh.so
|
||||||
|
|
|
@ -0,0 +1,93 @@
|
||||||
|
--- qemu-kvm-7.2.spec.orig 2023-06-22 13:56:19.000000000 +0000
|
||||||
|
+++ qemu-kvm-7.2.spec 2023-07-18 07:55:22.347090196 +0000
|
||||||
|
@@ -100,8 +100,6 @@
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%global target_list %{kvm_target}-softmmu
|
||||||
|
-%global block_drivers_rw_list qcow2,raw,file,host_device,nbd,iscsi,rbd,blkdebug,luks,null-co,nvme,copy-on-read,throttle,compress
|
||||||
|
-%global block_drivers_ro_list vdi,vmdk,vhdx,vpc,https
|
||||||
|
%define qemudocdir %{_docdir}/%{name}
|
||||||
|
%global firmwaredirs "%{_datadir}/qemu-firmware:%{_datadir}/ipxe/qemu:%{_datadir}/seavgabios:%{_datadir}/seabios"
|
||||||
|
|
||||||
|
@@ -126,6 +124,7 @@ Requires: %{name}-device-usb-host = %{ep
|
||||||
|
Requires: %{name}-device-usb-redirect = %{epoch}:%{version}-%{release} \
|
||||||
|
%endif \
|
||||||
|
Requires: %{name}-block-rbd = %{epoch}:%{version}-%{release} \
|
||||||
|
+Requires: %{name}-block-vitastor = %{epoch}:%{version}-%{release}\
|
||||||
|
Requires: %{name}-audio-pa = %{epoch}:%{version}-%{release}
|
||||||
|
|
||||||
|
# Since SPICE is removed from RHEL-9, the following Obsoletes:
|
||||||
|
@@ -148,7 +147,7 @@ Obsoletes: %{name}-block-ssh <= %{epoch}
|
||||||
|
Summary: QEMU is a machine emulator and virtualizer
|
||||||
|
Name: qemu-kvm
|
||||||
|
Version: 7.2.0
|
||||||
|
-Release: 14%{?rcrel}%{?dist}%{?cc_suffix}.1
|
||||||
|
+Release: 14.vitastor%{?rcrel}%{?dist}%{?cc_suffix}.1
|
||||||
|
# Epoch because we pushed a qemu-1.0 package. AIUI this can't ever be dropped
|
||||||
|
# Epoch 15 used for RHEL 8
|
||||||
|
# Epoch 17 used for RHEL 9 (due to release versioning offset in RHEL 8.5)
|
||||||
|
@@ -171,6 +170,7 @@ Source28: 95-kvm-memlock.conf
|
||||||
|
Source30: kvm-s390x.conf
|
||||||
|
Source31: kvm-x86.conf
|
||||||
|
Source36: README.tests
|
||||||
|
+Source37: qemu-vitastor.c
|
||||||
|
|
||||||
|
|
||||||
|
Patch0004: 0004-Initial-redhat-build.patch
|
||||||
|
@@ -418,6 +418,7 @@ Patch134: kvm-target-i386-Fix-BZHI-instr
|
||||||
|
Patch135: kvm-intel-iommu-fail-DEVIOTLB_UNMAP-without-dt-mode.patch
|
||||||
|
# For bz#2203745 - Disk detach is unsuccessful while the guest is still booting [rhel-9.2.0.z]
|
||||||
|
Patch136: kvm-acpi-pcihp-allow-repeating-hot-unplug-requests.patch
|
||||||
|
+Patch137: qemu-7.2-vitastor.patch
|
||||||
|
|
||||||
|
%if %{have_clang}
|
||||||
|
BuildRequires: clang
|
||||||
|
@@ -449,6 +450,7 @@ BuildRequires: libcurl-devel
|
||||||
|
%if %{have_block_rbd}
|
||||||
|
BuildRequires: librbd-devel
|
||||||
|
%endif
|
||||||
|
+BuildRequires: vitastor-client-devel
|
||||||
|
# We need both because the 'stap' binary is probed for by configure
|
||||||
|
BuildRequires: systemtap
|
||||||
|
BuildRequires: systemtap-sdt-devel
|
||||||
|
@@ -642,6 +644,14 @@ using the rbd protocol.
|
||||||
|
%endif
|
||||||
|
|
||||||
|
|
||||||
|
+%package block-vitastor
|
||||||
|
+Summary: QEMU Vitastor block driver
|
||||||
|
+Requires: %{name}-common%{?_isa} = %{epoch}:%{version}-%{release}
|
||||||
|
+
|
||||||
|
+%description block-vitastor
|
||||||
|
+This package provides the additional Vitastor block driver for QEMU.
|
||||||
|
+
|
||||||
|
+
|
||||||
|
%package audio-pa
|
||||||
|
Summary: QEMU PulseAudio audio driver
|
||||||
|
Requires: %{name}-common%{?_isa} = %{epoch}:%{version}-%{release}
|
||||||
|
@@ -719,6 +729,7 @@ This package provides usbredir support.
|
||||||
|
%prep
|
||||||
|
%setup -q -n qemu-%{version}%{?rcstr}
|
||||||
|
%autopatch -p1
|
||||||
|
+cp %{SOURCE37} ./block/vitastor.c
|
||||||
|
|
||||||
|
%global qemu_kvm_build qemu_kvm_build
|
||||||
|
mkdir -p %{qemu_kvm_build}
|
||||||
|
@@ -946,6 +957,7 @@ run_configure \
|
||||||
|
%if %{have_block_rbd}
|
||||||
|
--enable-rbd \
|
||||||
|
%endif
|
||||||
|
+ --enable-vitastor \
|
||||||
|
%if %{have_librdma}
|
||||||
|
--enable-rdma \
|
||||||
|
%endif
|
||||||
|
@@ -1426,6 +1438,9 @@ useradd -r -u 107 -g qemu -G kvm -d / -s
|
||||||
|
%files block-rbd
|
||||||
|
%{_libdir}/%{name}/block-rbd.so
|
||||||
|
%endif
|
||||||
|
+%files block-vitastor
|
||||||
|
+%{_libdir}/%{name}/block-vitastor.so
|
||||||
|
+
|
||||||
|
%files audio-pa
|
||||||
|
%{_libdir}/%{name}/audio-pa.so
|
||||||
|
|
|
@ -234,6 +234,7 @@ out:
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined VITASTOR_C_API_VERSION && VITASTOR_C_API_VERSION >= 2
|
||||||
static void vitastor_uring_handler(void *opaque)
|
static void vitastor_uring_handler(void *opaque)
|
||||||
{
|
{
|
||||||
VitastorClient *client = (VitastorClient*)opaque;
|
VitastorClient *client = (VitastorClient*)opaque;
|
||||||
|
@ -278,6 +279,11 @@ static void vitastor_schedule_uring_handler(VitastorClient *client)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
static void vitastor_schedule_uring_handler(VitastorClient *client)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static void coroutine_fn vitastor_co_get_metadata(VitastorRPC *task)
|
static void coroutine_fn vitastor_co_get_metadata(VitastorRPC *task)
|
||||||
{
|
{
|
||||||
|
@ -404,20 +410,16 @@ static int vitastor_file_open(BlockDriverState *bs, QDict *options, int flags, E
|
||||||
vitastor_aio_set_fd_handler, client, client->config_path, client->etcd_host, client->etcd_prefix,
|
vitastor_aio_set_fd_handler, client, client->config_path, client->etcd_host, client->etcd_prefix,
|
||||||
client->use_rdma, client->rdma_device, client->rdma_port_num, client->rdma_gid_index, client->rdma_mtu, 0
|
client->use_rdma, client->rdma_device, client->rdma_port_num, client->rdma_gid_index, client->rdma_mtu, 0
|
||||||
);
|
);
|
||||||
#else
|
|
||||||
client->proxy = vitastor_c_create_uring(
|
|
||||||
client->config_path, client->etcd_host, client->etcd_prefix,
|
|
||||||
client->use_rdma, client->rdma_device, client->rdma_port_num, client->rdma_gid_index, client->rdma_mtu, 0
|
|
||||||
);
|
|
||||||
#endif
|
|
||||||
if (!client->proxy)
|
if (!client->proxy)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "vitastor: failed to create io_uring: %s - I/O will be slower\n", strerror(errno));
|
fprintf(stderr, "vitastor: failed to create io_uring: %s - I/O will be slower\n", strerror(errno));
|
||||||
client->uring_eventfd = -1;
|
client->uring_eventfd = -1;
|
||||||
|
#endif
|
||||||
client->proxy = vitastor_c_create_qemu(
|
client->proxy = vitastor_c_create_qemu(
|
||||||
vitastor_aio_set_fd_handler, client, client->config_path, client->etcd_host, client->etcd_prefix,
|
vitastor_aio_set_fd_handler, client, client->config_path, client->etcd_host, client->etcd_prefix,
|
||||||
client->use_rdma, client->rdma_device, client->rdma_port_num, client->rdma_gid_index, client->rdma_mtu, 0
|
client->use_rdma, client->rdma_device, client->rdma_port_num, client->rdma_gid_index, client->rdma_mtu, 0
|
||||||
);
|
);
|
||||||
|
#if defined VITASTOR_C_API_VERSION && VITASTOR_C_API_VERSION >= 2
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -431,6 +433,7 @@ static int vitastor_file_open(BlockDriverState *bs, QDict *options, int flags, E
|
||||||
}
|
}
|
||||||
universal_aio_set_fd_handler(client->ctx, client->uring_eventfd, vitastor_uring_handler, NULL, client);
|
universal_aio_set_fd_handler(client->ctx, client->uring_eventfd, vitastor_uring_handler, NULL, client);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
image = client->image = g_strdup(qdict_get_try_str(options, "image"));
|
image = client->image = g_strdup(qdict_get_try_str(options, "image"));
|
||||||
client->readonly = (flags & BDRV_O_RDWR) ? 1 : 0;
|
client->readonly = (flags & BDRV_O_RDWR) ? 1 : 0;
|
||||||
// Get image metadata (size and readonly flag) or just wait until the client is ready
|
// Get image metadata (size and readonly flag) or just wait until the client is ready
|
||||||
|
|
|
@ -215,7 +215,7 @@ void vitastor_c_uring_wait_events(vitastor_c *client)
|
||||||
client->ringloop->wait();
|
client->ringloop->wait();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool vitastor_c_uring_has_work(vitastor_c *client)
|
int vitastor_c_uring_has_work(vitastor_c *client)
|
||||||
{
|
{
|
||||||
return client->ringloop->has_work();
|
return client->ringloop->has_work();
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,7 +46,7 @@ int vitastor_c_uring_register_eventfd(vitastor_c *client);
|
||||||
void vitastor_c_uring_wait_ready(vitastor_c *client);
|
void vitastor_c_uring_wait_ready(vitastor_c *client);
|
||||||
void vitastor_c_uring_handle_events(vitastor_c *client);
|
void vitastor_c_uring_handle_events(vitastor_c *client);
|
||||||
void vitastor_c_uring_wait_events(vitastor_c *client);
|
void vitastor_c_uring_wait_events(vitastor_c *client);
|
||||||
bool vitastor_c_uring_has_work(vitastor_c *client);
|
int vitastor_c_uring_has_work(vitastor_c *client);
|
||||||
void vitastor_c_read(vitastor_c *client, uint64_t inode, uint64_t offset, uint64_t len,
|
void vitastor_c_read(vitastor_c *client, uint64_t inode, uint64_t offset, uint64_t len,
|
||||||
struct iovec *iov, int iovcnt, VitastorReadHandler cb, void *opaque);
|
struct iovec *iov, int iovcnt, VitastorReadHandler cb, void *opaque);
|
||||||
void vitastor_c_write(vitastor_c *client, uint64_t inode, uint64_t offset, uint64_t len, uint64_t check_version,
|
void vitastor_c_write(vitastor_c *client, uint64_t inode, uint64_t offset, uint64_t len, uint64_t check_version,
|
||||||
|
|
Loading…
Reference in New Issue