From 5ef8654eb710ee4f889872cfaaa9973ab474a680 Mon Sep 17 00:00:00 2001 From: David Sterba Date: Mon, 7 Feb 2022 18:41:03 +0100 Subject: [PATCH] btrfs-progs: build: improve autodetection of zoned mode The zoned support requires a header file and some structures for full support. There are distros that have only part of that and the autodetection at configure time does not handle that properly, assuming the user requested the support. Check if there was any of the --*able-zoned options and if not detect the support level and fallback to no zoned eventually, not requiring users to specify --disable-zoned as before. Issue: #425 Signed-off-by: David Sterba --- configure.ac | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/configure.ac b/configure.ac index 26d85104..ac07e51e 100644 --- a/configure.ac +++ b/configure.ac @@ -282,10 +282,31 @@ AC_CHECK_HEADER(linux/blkzoned.h, [blkzoned_found=yes], [blkzoned_found=no]) AC_CHECK_MEMBER([struct blk_zone.capacity], [blkzoned_capacity=yes], [blkzoned_capacity=no], [[#include ]]) AX_CHECK_DEFINE([linux/blkzoned.h], [BLKGETZONESZ], [blkzoned_getzonesz=yes], [blkzoned_getzonesz=no]) AC_ARG_ENABLE([zoned], - AS_HELP_STRING([--disable-zoned], [disable zoned block device support]), - [], [enable_zoned=$blkzoned_found] + AS_HELP_STRING([--disable-zoned], [disable zoned block device support (default: detect)]), + [], [enable_zoned=$blkzoned_capacity] ) +# Autodetect zoned support +AS_IF([test "x$enableval" = "x"], [ + cansupportzoned=yes + if test "x$blkzoned_found" = xno; then + cansupportzoned=no + fi + if test "x$blkzoned_capacity" = xno; then + cansupportzoned=no + fi + if test "x$blkzoned_getzonesz" = xno; then + cansupportzoned=no + fi + if test "x$cansupportzoned" = xno; then + AC_MSG_NOTICE([insufficient support for zoned mode, cannot enable]) + enable_zoned=no + else + enable_zoned=yes + fi +]) + +# Explicitly requested by --enable-zoned AS_IF([test "x$enable_zoned" = xyes], [ if test "x$blkzoned_found" = xno; then AC_MSG_ERROR([Couldn't find linux/blkzoned.h])