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:
		
							parent
							
								
									9d24fb73a1
								
							
						
					
					
						commit
						a5730b8bd3
					
				@ -106,10 +106,6 @@
 | 
			
		||||
#include <sys/diskslice.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_XFS
 | 
			
		||||
#include <xfs/xfs.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/* OS X does not have O_DSYNC */
 | 
			
		||||
#ifndef O_DSYNC
 | 
			
		||||
#ifdef O_SYNC
 | 
			
		||||
@ -156,9 +152,6 @@ typedef struct BDRVRawState {
 | 
			
		||||
    int perm_change_flags;
 | 
			
		||||
    BDRVReopenState *reopen_state;
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_XFS
 | 
			
		||||
    bool is_xfs:1;
 | 
			
		||||
#endif
 | 
			
		||||
    bool has_discard:1;
 | 
			
		||||
    bool has_write_zeroes:1;
 | 
			
		||||
    bool discard_zeroes:1;
 | 
			
		||||
@ -409,15 +402,23 @@ static void raw_probe_alignment(BlockDriverState *bs, int fd, Error **errp)
 | 
			
		||||
    if (probe_logical_blocksize(fd, &bs->bl.request_alignment) < 0) {
 | 
			
		||||
        bs->bl.request_alignment = 0;
 | 
			
		||||
    }
 | 
			
		||||
#ifdef CONFIG_XFS
 | 
			
		||||
    if (s->is_xfs) {
 | 
			
		||||
        struct dioattr da;
 | 
			
		||||
        if (xfsctl(NULL, fd, XFS_IOC_DIOINFO, &da) >= 0) {
 | 
			
		||||
 | 
			
		||||
#ifdef __linux__
 | 
			
		||||
    /*
 | 
			
		||||
     * The XFS ioctl definitions are shipped in extra packages that might
 | 
			
		||||
     * not always be available. Since we just need the XFS_IOC_DIOINFO ioctl
 | 
			
		||||
     * here, we simply use our own definition instead:
 | 
			
		||||
     */
 | 
			
		||||
    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
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
@ -798,12 +799,6 @@ static int raw_open_common(BlockDriverState *bs, QDict *options,
 | 
			
		||||
#endif
 | 
			
		||||
    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;
 | 
			
		||||
    if (S_ISREG(st.st_mode)) {
 | 
			
		||||
        /* When extending regular files, we get zeros from the OS */
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										31
									
								
								configure
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										31
									
								
								configure
									
									
									
									
										vendored
									
									
								
							@ -291,7 +291,6 @@ EXTRA_CXXFLAGS=""
 | 
			
		||||
EXTRA_LDFLAGS=""
 | 
			
		||||
 | 
			
		||||
xen_ctrl_version="$default_feature"
 | 
			
		||||
xfs="$default_feature"
 | 
			
		||||
membarrier="$default_feature"
 | 
			
		||||
vhost_kernel="$default_feature"
 | 
			
		||||
vhost_net="$default_feature"
 | 
			
		||||
@ -1021,10 +1020,6 @@ for opt do
 | 
			
		||||
  ;;
 | 
			
		||||
  --enable-opengl) opengl="yes"
 | 
			
		||||
  ;;
 | 
			
		||||
  --disable-xfsctl) xfs="no"
 | 
			
		||||
  ;;
 | 
			
		||||
  --enable-xfsctl) xfs="yes"
 | 
			
		||||
  ;;
 | 
			
		||||
  --disable-zlib-test)
 | 
			
		||||
  ;;
 | 
			
		||||
  --enable-guest-agent) guest_agent="yes"
 | 
			
		||||
@ -1431,7 +1426,6 @@ cat << EOF
 | 
			
		||||
  avx512f         AVX512F optimization support
 | 
			
		||||
  replication     replication support
 | 
			
		||||
  opengl          opengl support
 | 
			
		||||
  xfsctl          xfsctl support
 | 
			
		||||
  qom-cast-debug  cast debugging support
 | 
			
		||||
  tools           build qemu-io, qemu-nbd and qemu-img tools
 | 
			
		||||
  bochs           bochs image format support
 | 
			
		||||
@ -2323,28 +2317,6 @@ EOF
 | 
			
		||||
    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
 | 
			
		||||
 | 
			
		||||
@ -3456,9 +3428,6 @@ echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
 | 
			
		||||
if test "$block_drv_whitelist_tools" = "yes" ; then
 | 
			
		||||
  echo "CONFIG_BDRV_WHITELIST_TOOLS=y" >> $config_host_mak
 | 
			
		||||
fi
 | 
			
		||||
if test "$xfs" = "yes" ; then
 | 
			
		||||
  echo "CONFIG_XFS=y" >> $config_host_mak
 | 
			
		||||
fi
 | 
			
		||||
qemu_version=$(head $source_path/VERSION)
 | 
			
		||||
echo "PKGVERSION=$pkgversion" >>$config_host_mak
 | 
			
		||||
echo "SRC_PATH=$source_path" >> $config_host_mak
 | 
			
		||||
 | 
			
		||||
@ -3445,7 +3445,6 @@ if spice_protocol.found()
 | 
			
		||||
  summary_info += {'  spice server support': spice}
 | 
			
		||||
endif
 | 
			
		||||
summary_info += {'rbd support':       rbd}
 | 
			
		||||
summary_info += {'xfsctl support':    config_host.has_key('CONFIG_XFS')}
 | 
			
		||||
summary_info += {'smartcard support': cacard}
 | 
			
		||||
summary_info += {'U2F support':       u2f}
 | 
			
		||||
summary_info += {'libusb':            libusb}
 | 
			
		||||
 | 
			
		||||
@ -151,7 +151,6 @@
 | 
			
		||||
--disable-whpx \
 | 
			
		||||
--disable-xen \
 | 
			
		||||
--disable-xen-pci-passthrough \
 | 
			
		||||
--disable-xfsctl \
 | 
			
		||||
--disable-xkbcommon \
 | 
			
		||||
--disable-zstd \
 | 
			
		||||
--enable-attr \
 | 
			
		||||
 | 
			
		||||
@ -398,7 +398,7 @@ echo "Configuring..."
 | 
			
		||||
    --enable-xen --enable-brlapi \
 | 
			
		||||
    --enable-linux-aio --enable-attr \
 | 
			
		||||
    --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-tpm --enable-libssh --enable-lzo --enable-snappy --enable-bzip2 \
 | 
			
		||||
    --enable-numa --enable-rdma --enable-smartcard --enable-virglrenderer \
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user