block/file-posix: Simplify the XFS_IOC_DIOINFO handling

The handling for the XFS_IOC_DIOINFO ioctl is currently quite excessive:
This is not a "real" feature like the other features that we provide with
the "--enable-xxx" and "--disable-xxx" switches for the configure script,
since this does not influence lots of code (it's only about one call to
xfsctl() in file-posix.c), so people don't gain much with the ability to
disable this with "--disable-xfsctl".
It's also unfortunate that the ioctl will be disabled on Linux in case
the user did not install the right xfsprogs-devel package before running
configure. Thus let's simplify this by providing the ioctl definition
on our own, so we can completely get rid of the header dependency and
thus the related code in the configure script.

Suggested-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Thomas Huth <thuth@redhat.com>
Message-Id: <20211215125824.250091-1-thuth@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
Thomas Huth 2021-12-15 13:58:24 +01:00 committed by Paolo Bonzini
parent 9d24fb73a1
commit a5730b8bd3
5 changed files with 17 additions and 55 deletions

View File

@ -106,10 +106,6 @@
#include <sys/diskslice.h> #include <sys/diskslice.h>
#endif #endif
#ifdef CONFIG_XFS
#include <xfs/xfs.h>
#endif
/* OS X does not have O_DSYNC */ /* OS X does not have O_DSYNC */
#ifndef O_DSYNC #ifndef O_DSYNC
#ifdef O_SYNC #ifdef O_SYNC
@ -156,9 +152,6 @@ typedef struct BDRVRawState {
int perm_change_flags; int perm_change_flags;
BDRVReopenState *reopen_state; BDRVReopenState *reopen_state;
#ifdef CONFIG_XFS
bool is_xfs:1;
#endif
bool has_discard:1; bool has_discard:1;
bool has_write_zeroes:1; bool has_write_zeroes:1;
bool discard_zeroes:1; bool discard_zeroes:1;
@ -409,14 +402,22 @@ static void raw_probe_alignment(BlockDriverState *bs, int fd, Error **errp)
if (probe_logical_blocksize(fd, &bs->bl.request_alignment) < 0) { if (probe_logical_blocksize(fd, &bs->bl.request_alignment) < 0) {
bs->bl.request_alignment = 0; bs->bl.request_alignment = 0;
} }
#ifdef CONFIG_XFS
if (s->is_xfs) { #ifdef __linux__
struct dioattr da; /*
if (xfsctl(NULL, fd, XFS_IOC_DIOINFO, &da) >= 0) { * The XFS ioctl definitions are shipped in extra packages that might
bs->bl.request_alignment = da.d_miniosz; * not always be available. Since we just need the XFS_IOC_DIOINFO ioctl
/* The kernel returns wrong information for d_mem */ * here, we simply use our own definition instead:
/* s->buf_align = da.d_mem; */ */
} struct xfs_dioattr {
uint32_t d_mem;
uint32_t d_miniosz;
uint32_t d_maxiosz;
} da;
if (ioctl(fd, _IOR('X', 30, struct xfs_dioattr), &da) >= 0) {
bs->bl.request_alignment = da.d_miniosz;
/* The kernel returns wrong information for d_mem */
/* s->buf_align = da.d_mem; */
} }
#endif #endif
@ -798,12 +799,6 @@ static int raw_open_common(BlockDriverState *bs, QDict *options,
#endif #endif
s->needs_alignment = raw_needs_alignment(bs); s->needs_alignment = raw_needs_alignment(bs);
#ifdef CONFIG_XFS
if (platform_test_xfs_fd(s->fd)) {
s->is_xfs = true;
}
#endif
bs->supported_zero_flags = BDRV_REQ_MAY_UNMAP | BDRV_REQ_NO_FALLBACK; bs->supported_zero_flags = BDRV_REQ_MAY_UNMAP | BDRV_REQ_NO_FALLBACK;
if (S_ISREG(st.st_mode)) { if (S_ISREG(st.st_mode)) {
/* When extending regular files, we get zeros from the OS */ /* When extending regular files, we get zeros from the OS */

31
configure vendored
View File

@ -291,7 +291,6 @@ EXTRA_CXXFLAGS=""
EXTRA_LDFLAGS="" EXTRA_LDFLAGS=""
xen_ctrl_version="$default_feature" xen_ctrl_version="$default_feature"
xfs="$default_feature"
membarrier="$default_feature" membarrier="$default_feature"
vhost_kernel="$default_feature" vhost_kernel="$default_feature"
vhost_net="$default_feature" vhost_net="$default_feature"
@ -1021,10 +1020,6 @@ for opt do
;; ;;
--enable-opengl) opengl="yes" --enable-opengl) opengl="yes"
;; ;;
--disable-xfsctl) xfs="no"
;;
--enable-xfsctl) xfs="yes"
;;
--disable-zlib-test) --disable-zlib-test)
;; ;;
--enable-guest-agent) guest_agent="yes" --enable-guest-agent) guest_agent="yes"
@ -1431,7 +1426,6 @@ cat << EOF
avx512f AVX512F optimization support avx512f AVX512F optimization support
replication replication support replication replication support
opengl opengl support opengl opengl support
xfsctl xfsctl support
qom-cast-debug cast debugging support qom-cast-debug cast debugging support
tools build qemu-io, qemu-nbd and qemu-img tools tools build qemu-io, qemu-nbd and qemu-img tools
bochs bochs image format support bochs bochs image format support
@ -2323,28 +2317,6 @@ EOF
fi fi
fi fi
##########################################
# xfsctl() probe, used for file-posix.c
if test "$xfs" != "no" ; then
cat > $TMPC << EOF
#include <stddef.h> /* NULL */
#include <xfs/xfs.h>
int main(void)
{
xfsctl(NULL, 0, 0, NULL);
return 0;
}
EOF
if compile_prog "" "" ; then
xfs="yes"
else
if test "$xfs" = "yes" ; then
feature_not_found "xfs" "Install xfsprogs/xfslibs devel"
fi
xfs=no
fi
fi
########################################## ##########################################
# plugin linker support probe # plugin linker support probe
@ -3456,9 +3428,6 @@ echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
if test "$block_drv_whitelist_tools" = "yes" ; then if test "$block_drv_whitelist_tools" = "yes" ; then
echo "CONFIG_BDRV_WHITELIST_TOOLS=y" >> $config_host_mak echo "CONFIG_BDRV_WHITELIST_TOOLS=y" >> $config_host_mak
fi fi
if test "$xfs" = "yes" ; then
echo "CONFIG_XFS=y" >> $config_host_mak
fi
qemu_version=$(head $source_path/VERSION) qemu_version=$(head $source_path/VERSION)
echo "PKGVERSION=$pkgversion" >>$config_host_mak echo "PKGVERSION=$pkgversion" >>$config_host_mak
echo "SRC_PATH=$source_path" >> $config_host_mak echo "SRC_PATH=$source_path" >> $config_host_mak

View File

@ -3445,7 +3445,6 @@ if spice_protocol.found()
summary_info += {' spice server support': spice} summary_info += {' spice server support': spice}
endif endif
summary_info += {'rbd support': rbd} summary_info += {'rbd support': rbd}
summary_info += {'xfsctl support': config_host.has_key('CONFIG_XFS')}
summary_info += {'smartcard support': cacard} summary_info += {'smartcard support': cacard}
summary_info += {'U2F support': u2f} summary_info += {'U2F support': u2f}
summary_info += {'libusb': libusb} summary_info += {'libusb': libusb}

View File

@ -151,7 +151,6 @@
--disable-whpx \ --disable-whpx \
--disable-xen \ --disable-xen \
--disable-xen-pci-passthrough \ --disable-xen-pci-passthrough \
--disable-xfsctl \
--disable-xkbcommon \ --disable-xkbcommon \
--disable-zstd \ --disable-zstd \
--enable-attr \ --enable-attr \

View File

@ -398,7 +398,7 @@ echo "Configuring..."
--enable-xen --enable-brlapi \ --enable-xen --enable-brlapi \
--enable-linux-aio --enable-attr \ --enable-linux-aio --enable-attr \
--enable-cap-ng --enable-trace-backends=log --enable-spice --enable-rbd \ --enable-cap-ng --enable-trace-backends=log --enable-spice --enable-rbd \
--enable-xfsctl --enable-libusb --enable-usb-redir \ --enable-libusb --enable-usb-redir \
--enable-libiscsi --enable-libnfs --enable-seccomp \ --enable-libiscsi --enable-libnfs --enable-seccomp \
--enable-tpm --enable-libssh --enable-lzo --enable-snappy --enable-bzip2 \ --enable-tpm --enable-libssh --enable-lzo --enable-snappy --enable-bzip2 \
--enable-numa --enable-rdma --enable-smartcard --enable-virglrenderer \ --enable-numa --enable-rdma --enable-smartcard --enable-virglrenderer \