1
0
mirror of git://sourceware.org/git/lvm2.git synced 2025-11-11 12:23:50 +03:00

Compare commits

...

17 Commits

Author SHA1 Message Date
Marian Csontos
ef4521831d pre-release 2021-10-20 11:12:39 +02:00
Marian Csontos
36be4d68f6 WHATS_NEW: update 2021-10-20 11:10:37 +02:00
David Teigland
33e47182f7 pvscan: only add device args to dev cache
Optimize the common pvscan --cache command by only adding
the necessary devs to dev-cache.
2021-10-19 17:13:57 -05:00
Zdenek Kabelac
60dc44b707 dev-cache: enhance dir scan also for non-udev build 2021-10-18 21:50:56 +02:00
Zdenek Kabelac
88e0d68909 dev-cache: better detection of filesystem
It appear on some systems the first found dev might not be actually for
the filesytem - so use a better way through _cache.st_dev.
2021-10-18 21:16:53 +02:00
Zdenek Kabelac
c60bac4661 configure: update 2021-10-18 19:17:27 +02:00
Zdenek Kabelac
1b104ddb55 configure.ac: remove unused part
As we are not using 'enable-compat' for anything, remove this section.
Also remove duplicated check for blkid.
Move setting of some AC_ARG_ENABLE defaults into the macro so it's always
defined.
2021-10-18 19:17:27 +02:00
Zdenek Kabelac
a172a02a9a cleanup: use const char buffer 2021-10-18 19:17:27 +02:00
Zdenek Kabelac
9cf4eac250 dev-cache: skip different filesystems on dir scan
When scanning configured  /dev dir, avoid entring
directories with different filesystem.

This minimizes risk we will block on i.e. entring
directory with mount point.
2021-10-18 19:17:26 +02:00
Zdenek Kabelac
bae1083472 cov: check device_ids_write return code
At least 'stack' failure code path as the
function device_id_update_vg_uuid() is void.
2021-10-15 23:40:56 +02:00
Zdenek Kabelac
c2be6c38d5 cov: ensure id is always initialize
Always resed sd_id128_t id and report warning in case
sd_id128_get_machine_app_specific() does not exit with 0.
2021-10-15 23:40:56 +02:00
Zdenek Kabelac
882141eb8c cov: check pointer before dereferencing
Check pv2 is non-null before trying to deref its tags.
2021-10-15 23:40:56 +02:00
Zdenek Kabelac
65ba4964df cov: do not drop already known error state
Do not try to 'discover' another error state, when ENOMEM
is already detected.
2021-10-15 23:40:56 +02:00
Zdenek Kabelac
e7b5f490c5 cov: ignore close result 2021-10-15 23:40:29 +02:00
Zdenek Kabelac
6668d6409a cov: validate subcommand existance
Before dereference of subcommand pointer, check it's not NULL
as  coverity believes there exists theoretical path for this...
2021-10-15 23:39:25 +02:00
Zdenek Kabelac
2779830a06 cov: avoid using NULL info
Check lvmcache info exists before calling lvmcache_del_save_bad_mda().
2021-10-15 23:36:22 +02:00
Zdenek Kabelac
8aefd97252 configure: fix use of withval
Newly added option --with-default-use-devices-file needs to use withval.
2021-10-15 23:35:05 +02:00
20 changed files with 325 additions and 199 deletions

View File

@@ -1 +1 @@
2.03.14(2)-git (2021-08-11) 2.03.14(2) (2021-10-20)

View File

@@ -1 +1 @@
1.02.181-git (2021-08-11) 1.02.181 (2021-10-20)

View File

@@ -1,5 +1,6 @@
Version 2.03.14 - Version 2.03.14 - 20th October 2021
================================== ===================================
Device scanning is skipping directories on different filesystems.
Print info message with too many or too large archived files. Print info message with too many or too large archived files.
Reduce metadata readings during scanning phase. Reduce metadata readings during scanning phase.
Optimize computation of crc32 check sum with multiple PVs. Optimize computation of crc32 check sum with multiple PVs.
@@ -7,7 +8,7 @@ Version 2.03.14 -
Filter out unsupported MQ/SMQ cache policy setting. Filter out unsupported MQ/SMQ cache policy setting.
Fix memleak in mpath filter. Fix memleak in mpath filter.
Support newer location for VDO statistics. Support newer location for VDO statistics.
Add support for VDO async-unsage write policy. Add support for VDO async-unsafe write policy.
Improve lvm_import_vdo script. Improve lvm_import_vdo script.
Support VDO LV with lvcreate -ky. Support VDO LV with lvcreate -ky.
Fix lvconvert for VDO LV bigger then 2T. Fix lvconvert for VDO LV bigger then 2T.

View File

@@ -1,5 +1,5 @@
Version 1.02.181 - Version 1.02.181 - 20th October 2021
=================================== ====================================
Add IMA support with 'dmsetup measure' command. Add IMA support with 'dmsetup measure' command.
Add defines DM_NAME_LIST_FLAG_HAS_UUID, DM_NAME_LIST_FLAG_DOESNT_HAVE_UUID. Add defines DM_NAME_LIST_FLAG_HAS_UUID, DM_NAME_LIST_FLAG_DOESNT_HAVE_UUID.
Enhance tracking of activated devices when preloading dm tree. Enhance tracking of activated devices when preloading dm tree.

117
configure vendored
View File

@@ -773,10 +773,10 @@ PYTHON
LVM2CMD_LIB LVM2CMD_LIB
UDEV_LIBS UDEV_LIBS
UDEV_CFLAGS UDEV_CFLAGS
SYSTEMD_LIBS
SYSTEMD_CFLAGS
BLKID_LIBS BLKID_LIBS
BLKID_CFLAGS BLKID_CFLAGS
SYSTEMD_LIBS
SYSTEMD_CFLAGS
LOCKD_IDM_LIBS LOCKD_IDM_LIBS
LOCKD_IDM_CFLAGS LOCKD_IDM_CFLAGS
LOCKD_DLM_CONTROL_LIBS LOCKD_DLM_CONTROL_LIBS
@@ -964,7 +964,6 @@ enable_udev_systemd_background_jobs
enable_udev_sync enable_udev_sync
enable_udev_rules enable_udev_rules
enable_udev_rule_exec_detection enable_udev_rule_exec_detection
enable_compat
enable_units_compat enable_units_compat
enable_ioctl enable_ioctl
enable_o_direct enable_o_direct
@@ -1029,10 +1028,10 @@ LOCKD_DLM_CONTROL_CFLAGS
LOCKD_DLM_CONTROL_LIBS LOCKD_DLM_CONTROL_LIBS
LOCKD_IDM_CFLAGS LOCKD_IDM_CFLAGS
LOCKD_IDM_LIBS LOCKD_IDM_LIBS
BLKID_CFLAGS
BLKID_LIBS
SYSTEMD_CFLAGS SYSTEMD_CFLAGS
SYSTEMD_LIBS SYSTEMD_LIBS
BLKID_CFLAGS
BLKID_LIBS
UDEV_CFLAGS UDEV_CFLAGS
UDEV_LIBS UDEV_LIBS
PYTHON PYTHON
@@ -1705,7 +1704,6 @@ Optional Features:
--enable-udev_rules install rule files needed for udev synchronisation --enable-udev_rules install rule files needed for udev synchronisation
--enable-udev-rule-exec-detection --enable-udev-rule-exec-detection
enable executable path detection in udev rules enable executable path detection in udev rules
--enable-compat enable support for old device-mapper versions
--enable-units-compat enable output compatibility with old versions that --enable-units-compat enable output compatibility with old versions that
that do not use KiB-style unit suffixes that do not use KiB-style unit suffixes
--disable-ioctl disable ioctl calls to device-mapper in the kernel --disable-ioctl disable ioctl calls to device-mapper in the kernel
@@ -1853,13 +1851,13 @@ Some influential environment variables:
C compiler flags for LOCKD_IDM, overriding pkg-config C compiler flags for LOCKD_IDM, overriding pkg-config
LOCKD_IDM_LIBS LOCKD_IDM_LIBS
linker flags for LOCKD_IDM, overriding pkg-config linker flags for LOCKD_IDM, overriding pkg-config
BLKID_CFLAGS
C compiler flags for BLKID, overriding pkg-config
BLKID_LIBS linker flags for BLKID, overriding pkg-config
SYSTEMD_CFLAGS SYSTEMD_CFLAGS
C compiler flags for SYSTEMD, overriding pkg-config C compiler flags for SYSTEMD, overriding pkg-config
SYSTEMD_LIBS SYSTEMD_LIBS
linker flags for SYSTEMD, overriding pkg-config linker flags for SYSTEMD, overriding pkg-config
BLKID_CFLAGS
C compiler flags for BLKID, overriding pkg-config
BLKID_LIBS linker flags for BLKID, overriding pkg-config
UDEV_CFLAGS C compiler flags for UDEV, overriding pkg-config UDEV_CFLAGS C compiler flags for UDEV, overriding pkg-config
UDEV_LIBS linker flags for UDEV, overriding pkg-config UDEV_LIBS linker flags for UDEV, overriding pkg-config
PYTHON the Python interpreter PYTHON the Python interpreter
@@ -3142,10 +3140,6 @@ case "$host_os" in
LIB_SUFFIX=so LIB_SUFFIX=so
DEVMAPPER=yes DEVMAPPER=yes
BUILD_LVMPOLLD=no BUILD_LVMPOLLD=no
LOCKDSANLOCK=no
LOCKDDLM=no
LOCKDDLM_CONTROL=no
LOCKDIDM=no
ODIRECT=yes ODIRECT=yes
DM_IOCTLS=yes DM_IOCTLS=yes
SELINUX=yes SELINUX=yes
@@ -8467,7 +8461,7 @@ $as_echo_n "checking default for use_devicesfile... " >&6; }
# Check whether --with-default-use-devices-file was given. # Check whether --with-default-use-devices-file was given.
if test "${with_default_use_devices_file+set}" = set; then : if test "${with_default_use_devices_file+set}" = set; then :
withval=$with_default_use_devices_file; DEFAULT_USE_DEVICES_FILE=$enableval withval=$with_default_use_devices_file; DEFAULT_USE_DEVICES_FILE=$withval
else else
DEFAULT_USE_DEVICES_FILE=0 DEFAULT_USE_DEVICES_FILE=0
fi fi
@@ -11001,6 +10995,8 @@ $as_echo_n "checking whether to build lvmpolld... " >&6; }
# Check whether --enable-lvmpolld was given. # Check whether --enable-lvmpolld was given.
if test "${enable_lvmpolld+set}" = set; then : if test "${enable_lvmpolld+set}" = set; then :
enableval=$enable_lvmpolld; LVMPOLLD=$enableval enableval=$enable_lvmpolld; LVMPOLLD=$enableval
else
LVMPOLLD=no
fi fi
test -n "$LVMPOLLD" && BUILD_LVMPOLLD=$LVMPOLLD test -n "$LVMPOLLD" && BUILD_LVMPOLLD=$LVMPOLLD
@@ -11015,6 +11011,8 @@ $as_echo_n "checking whether to build lvmlockdsanlock... " >&6; }
# Check whether --enable-lvmlockd-sanlock was given. # Check whether --enable-lvmlockd-sanlock was given.
if test "${enable_lvmlockd_sanlock+set}" = set; then : if test "${enable_lvmlockd_sanlock+set}" = set; then :
enableval=$enable_lvmlockd_sanlock; LOCKDSANLOCK=$enableval enableval=$enable_lvmlockd_sanlock; LOCKDSANLOCK=$enableval
else
LOCKDSANLOCK=no
fi fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $LOCKDSANLOCK" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LOCKDSANLOCK" >&5
@@ -11106,6 +11104,8 @@ $as_echo_n "checking whether to build lvmlockddlm... " >&6; }
# Check whether --enable-lvmlockd-dlm was given. # Check whether --enable-lvmlockd-dlm was given.
if test "${enable_lvmlockd_dlm+set}" = set; then : if test "${enable_lvmlockd_dlm+set}" = set; then :
enableval=$enable_lvmlockd_dlm; LOCKDDLM=$enableval enableval=$enable_lvmlockd_dlm; LOCKDDLM=$enableval
else
LOCKDDLM=no
fi fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $LOCKDDLM" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LOCKDDLM" >&5
@@ -11197,6 +11197,8 @@ $as_echo_n "checking whether to build lvmlockddlmcontrol... " >&6; }
# Check whether --enable-lvmlockd-dlmcontrol was given. # Check whether --enable-lvmlockd-dlmcontrol was given.
if test "${enable_lvmlockd_dlmcontrol+set}" = set; then : if test "${enable_lvmlockd_dlmcontrol+set}" = set; then :
enableval=$enable_lvmlockd_dlmcontrol; LOCKDDLM_CONTROL=$enableval enableval=$enable_lvmlockd_dlmcontrol; LOCKDDLM_CONTROL=$enableval
else
LOCKDDLM_CONTROL=no
fi fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $LOCKDDLM_CONTROL" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LOCKDDLM_CONTROL" >&5
@@ -11288,6 +11290,8 @@ $as_echo_n "checking whether to build lvmlockdidm... " >&6; }
# Check whether --enable-lvmlockd-idm was given. # Check whether --enable-lvmlockd-idm was given.
if test "${enable_lvmlockd_idm+set}" = set; then : if test "${enable_lvmlockd_idm+set}" = set; then :
enableval=$enable_lvmlockd_idm; LOCKDIDM=$enableval enableval=$enable_lvmlockd_idm; LOCKDIDM=$enableval
else
LOCKDIDM=no
fi fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $LOCKDIDM" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LOCKDIDM" >&5
@@ -11367,76 +11371,15 @@ else
$as_echo "yes" >&6; } $as_echo "yes" >&6; }
HAVE_LOCKD_IDM=yes HAVE_LOCKD_IDM=yes
fi fi
if test -n "$PKG_CONFIG" && \
pkg_failed=no
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BLKID" >&5
$as_echo_n "checking for BLKID... " >&6; }
if test -n "$BLKID_CFLAGS"; then
pkg_cv_BLKID_CFLAGS="$BLKID_CFLAGS"
elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \
{ { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"blkid >= 2.24\""; } >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"blkid >= 2.24\""; } >&5
($PKG_CONFIG --exists --print-errors "blkid >= 2.24") 2>&5 ($PKG_CONFIG --exists --print-errors "blkid >= 2.24") 2>&5
ac_status=$? ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then test $ac_status = 0; }; then
pkg_cv_BLKID_CFLAGS=`$PKG_CONFIG --cflags "blkid >= 2.24" 2>/dev/null` HAVE_LOCKD_IDM=yes
test "x$?" != "x0" && pkg_failed=yes
else else
pkg_failed=yes $bailout
fi
else
pkg_failed=untried
fi
if test -n "$BLKID_LIBS"; then
pkg_cv_BLKID_LIBS="$BLKID_LIBS"
elif test -n "$PKG_CONFIG"; then
if test -n "$PKG_CONFIG" && \
{ { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"blkid >= 2.24\""; } >&5
($PKG_CONFIG --exists --print-errors "blkid >= 2.24") 2>&5
ac_status=$?
$as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
pkg_cv_BLKID_LIBS=`$PKG_CONFIG --libs "blkid >= 2.24" 2>/dev/null`
test "x$?" != "x0" && pkg_failed=yes
else
pkg_failed=yes
fi
else
pkg_failed=untried
fi
if test $pkg_failed = yes; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
_pkg_short_errors_supported=yes
else
_pkg_short_errors_supported=no
fi
if test $_pkg_short_errors_supported = yes; then
BLKID_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "blkid >= 2.24" 2>&1`
else
BLKID_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "blkid >= 2.24" 2>&1`
fi
# Put the nasty error message in config.log where it belongs
echo "$BLKID_PKG_ERRORS" >&5
$bailout
elif test $pkg_failed = untried; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
$bailout
else
BLKID_CFLAGS=$pkg_cv_BLKID_CFLAGS
BLKID_LIBS=$pkg_cv_BLKID_LIBS
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
HAVE_LOCKD_IDM=yes
fi fi
$as_echo "#define LOCKDIDM_SUPPORT 1" >>confdefs.h $as_echo "#define LOCKDIDM_SUPPORT 1" >>confdefs.h
@@ -12086,24 +12029,6 @@ $as_echo_n "checking whether udev supports built-in blkid... " >&6; }
$as_echo "$UDEV_HAS_BUILTIN_BLKID" >&6; } $as_echo "$UDEV_HAS_BUILTIN_BLKID" >&6; }
fi fi
################################################################################
# Check whether --enable-compat was given.
if test "${enable_compat+set}" = set; then :
enableval=$enable_compat; DM_COMPAT=$enableval
else
DM_COMPAT=no
fi
if test "$DM_COMPAT" = yes; then :
$as_echo "#define DM_COMPAT 1" >>confdefs.h
as_fn_error $? "--enable-compat is not currently supported.
Since device-mapper version 1.02.66, only one version (4) of the device-mapper
ioctl protocol is supported." "$LINENO" 5
fi
################################################################################ ################################################################################
# Check whether --enable-units-compat was given. # Check whether --enable-units-compat was given.
if test "${enable_units_compat+set}" = set; then : if test "${enable_units_compat+set}" = set; then :

View File

@@ -38,10 +38,6 @@ case "$host_os" in
LIB_SUFFIX=so LIB_SUFFIX=so
DEVMAPPER=yes DEVMAPPER=yes
BUILD_LVMPOLLD=no BUILD_LVMPOLLD=no
LOCKDSANLOCK=no
LOCKDDLM=no
LOCKDDLM_CONTROL=no
LOCKDIDM=no
ODIRECT=yes ODIRECT=yes
DM_IOCTLS=yes DM_IOCTLS=yes
SELINUX=yes SELINUX=yes
@@ -290,7 +286,7 @@ dnl -- Default settings for lvm.conf { devices/use_devicesfile }
AC_MSG_CHECKING(default for use_devicesfile) AC_MSG_CHECKING(default for use_devicesfile)
AC_ARG_WITH(default-use-devices-file, AC_ARG_WITH(default-use-devices-file,
AS_HELP_STRING([--with-default-use-devices-file], [default for lvm.conf devices/use_devicesfile = [0]]), AS_HELP_STRING([--with-default-use-devices-file], [default for lvm.conf devices/use_devicesfile = [0]]),
DEFAULT_USE_DEVICES_FILE=$enableval, DEFAULT_USE_DEVICES_FILE=0) DEFAULT_USE_DEVICES_FILE=$withval, DEFAULT_USE_DEVICES_FILE=0)
case "$DEFAULT_USE_DEVICES_FILE" in case "$DEFAULT_USE_DEVICES_FILE" in
0|1);; 0|1);;
*) AC_MSG_ERROR([--with-default-use-devices-file parameter invalid]);; *) AC_MSG_ERROR([--with-default-use-devices-file parameter invalid]);;
@@ -946,7 +942,7 @@ AC_MSG_CHECKING(whether to build lvmpolld)
AC_ARG_ENABLE(lvmpolld, AC_ARG_ENABLE(lvmpolld,
AS_HELP_STRING([--enable-lvmpolld], AS_HELP_STRING([--enable-lvmpolld],
[enable the LVM Polling Daemon]), [enable the LVM Polling Daemon]),
LVMPOLLD=$enableval) LVMPOLLD=$enableval, LVMPOLLD=no)
test -n "$LVMPOLLD" && BUILD_LVMPOLLD=$LVMPOLLD test -n "$LVMPOLLD" && BUILD_LVMPOLLD=$LVMPOLLD
AC_MSG_RESULT($BUILD_LVMPOLLD) AC_MSG_RESULT($BUILD_LVMPOLLD)
@@ -958,7 +954,7 @@ AC_MSG_CHECKING(whether to build lvmlockdsanlock)
AC_ARG_ENABLE(lvmlockd-sanlock, AC_ARG_ENABLE(lvmlockd-sanlock,
AS_HELP_STRING([--enable-lvmlockd-sanlock], AS_HELP_STRING([--enable-lvmlockd-sanlock],
[enable the LVM lock daemon using sanlock]), [enable the LVM lock daemon using sanlock]),
LOCKDSANLOCK=$enableval) LOCKDSANLOCK=$enableval, LOCKDSANLOCK=no)
AC_MSG_RESULT($LOCKDSANLOCK) AC_MSG_RESULT($LOCKDSANLOCK)
BUILD_LOCKDSANLOCK=$LOCKDSANLOCK BUILD_LOCKDSANLOCK=$LOCKDSANLOCK
@@ -976,7 +972,7 @@ AC_MSG_CHECKING(whether to build lvmlockddlm)
AC_ARG_ENABLE(lvmlockd-dlm, AC_ARG_ENABLE(lvmlockd-dlm,
AS_HELP_STRING([--enable-lvmlockd-dlm], AS_HELP_STRING([--enable-lvmlockd-dlm],
[enable the LVM lock daemon using dlm]), [enable the LVM lock daemon using dlm]),
LOCKDDLM=$enableval) LOCKDDLM=$enableval, LOCKDDLM=no)
AC_MSG_RESULT($LOCKDDLM) AC_MSG_RESULT($LOCKDDLM)
BUILD_LOCKDDLM=$LOCKDDLM BUILD_LOCKDDLM=$LOCKDDLM
@@ -994,7 +990,7 @@ AC_MSG_CHECKING(whether to build lvmlockddlmcontrol)
AC_ARG_ENABLE(lvmlockd-dlmcontrol, AC_ARG_ENABLE(lvmlockd-dlmcontrol,
AS_HELP_STRING([--enable-lvmlockd-dlmcontrol], AS_HELP_STRING([--enable-lvmlockd-dlmcontrol],
[enable lvmlockd remote refresh using libdlmcontrol]), [enable lvmlockd remote refresh using libdlmcontrol]),
LOCKDDLM_CONTROL=$enableval) LOCKDDLM_CONTROL=$enableval, LOCKDDLM_CONTROL=no)
AC_MSG_RESULT($LOCKDDLM_CONTROL) AC_MSG_RESULT($LOCKDDLM_CONTROL)
BUILD_LOCKDDLM_CONTROL=$LOCKDDLM_CONTROL BUILD_LOCKDDLM_CONTROL=$LOCKDDLM_CONTROL
@@ -1012,7 +1008,7 @@ AC_MSG_CHECKING(whether to build lvmlockdidm)
AC_ARG_ENABLE(lvmlockd-idm, AC_ARG_ENABLE(lvmlockd-idm,
AS_HELP_STRING([--enable-lvmlockd-idm], AS_HELP_STRING([--enable-lvmlockd-idm],
[enable the LVM lock daemon using idm]), [enable the LVM lock daemon using idm]),
LOCKDIDM=$enableval) LOCKDIDM=$enableval, LOCKDIDM=no)
AC_MSG_RESULT($LOCKDIDM) AC_MSG_RESULT($LOCKDIDM)
BUILD_LOCKDIDM=$LOCKDIDM BUILD_LOCKDIDM=$LOCKDIDM
@@ -1020,7 +1016,7 @@ BUILD_LOCKDIDM=$LOCKDIDM
dnl -- Look for Seagate IDM libraries dnl -- Look for Seagate IDM libraries
if test "$BUILD_LOCKDIDM" = yes; then if test "$BUILD_LOCKDIDM" = yes; then
PKG_CHECK_MODULES(LOCKD_IDM, libseagate_ilm >= 0.1.0, [HAVE_LOCKD_IDM=yes], $bailout) PKG_CHECK_MODULES(LOCKD_IDM, libseagate_ilm >= 0.1.0, [HAVE_LOCKD_IDM=yes], $bailout)
PKG_CHECK_MODULES(BLKID, blkid >= 2.24, [HAVE_LOCKD_IDM=yes], $bailout) PKG_CHECK_EXISTS(blkid >= 2.24, [HAVE_LOCKD_IDM=yes], $bailout)
AC_DEFINE([LOCKDIDM_SUPPORT], 1, [Define to 1 to include code that uses lvmlockd IDM option.]) AC_DEFINE([LOCKDIDM_SUPPORT], 1, [Define to 1 to include code that uses lvmlockd IDM option.])
BUILD_LVMLOCKD=yes BUILD_LVMLOCKD=yes
fi fi
@@ -1251,19 +1247,6 @@ if test "$UDEV_RULE" != no ; then
AC_MSG_RESULT($UDEV_HAS_BUILTIN_BLKID) AC_MSG_RESULT($UDEV_HAS_BUILTIN_BLKID)
fi fi
################################################################################
dnl -- Compatibility mode
AC_ARG_ENABLE(compat,
AS_HELP_STRING([--enable-compat],
[enable support for old device-mapper versions]),
DM_COMPAT=$enableval, DM_COMPAT=no)
AS_IF([test "$DM_COMPAT" = yes],
[AC_DEFINE([DM_COMPAT], 1, [Define to enable compat protocol])
AC_MSG_ERROR([--enable-compat is not currently supported.
Since device-mapper version 1.02.66, only one version (4) of the device-mapper
ioctl protocol is supported.])])
################################################################################ ################################################################################
dnl -- Compatible units suffix mode dnl -- Compatible units suffix mode
AC_ARG_ENABLE(units-compat, AC_ARG_ENABLE(units-compat,

View File

@@ -3016,9 +3016,7 @@ static int add_lockspace_thread(const char *ls_name,
!alloc_and_copy_pvs_path(&ls2->pvs, &ls->pvs)) { !alloc_and_copy_pvs_path(&ls2->pvs, &ls->pvs)) {
log_debug("add_lockspace_thread %s fails to allocate pvs", ls->name); log_debug("add_lockspace_thread %s fails to allocate pvs", ls->name);
rv = -ENOMEM; rv = -ENOMEM;
} } else if (ls2->thread_stop) {
if (ls2->thread_stop) {
log_debug("add_lockspace_thread %s exists and stopping", ls->name); log_debug("add_lockspace_thread %s exists and stopping", ls->name);
rv = -EAGAIN; rv = -EAGAIN;
} else if (!ls2->create_fail && !ls2->create_done) { } else if (!ls2->create_fail && !ls2->create_done) {

View File

@@ -114,9 +114,6 @@
/* Define to 1 to enable the device-mapper filemap daemon. */ /* Define to 1 to enable the device-mapper filemap daemon. */
#undef DMFILEMAPD #undef DMFILEMAPD
/* Define to enable compat protocol */
#undef DM_COMPAT
/* Define default group for device node */ /* Define default group for device node */
#undef DM_DEVICE_GID #undef DM_DEVICE_GID

View File

@@ -159,9 +159,11 @@ static const char *_system_id_from_source(struct cmd_context *cmd, const char *s
#ifdef APP_MACHINEID_SUPPORT #ifdef APP_MACHINEID_SUPPORT
if (!strcasecmp(source, "appmachineid")) { if (!strcasecmp(source, "appmachineid")) {
sd_id128_t id; sd_id128_t id = { 0 };
sd_id128_get_machine_app_specific(LVM_APPLICATION_ID, &id); if (sd_id128_get_machine_app_specific(LVM_APPLICATION_ID, &id) != 0)
log_warn("WARNING: sd_id128_get_machine_app_specific() failed %s (%d).",
strerror(errno), errno);
if (dm_snprintf(buf, PATH_MAX, SD_ID128_FORMAT_STR, SD_ID128_FORMAT_VAL(id)) < 0) if (dm_snprintf(buf, PATH_MAX, SD_ID128_FORMAT_STR, SD_ID128_FORMAT_VAL(id)) < 0)
stack; stack;

View File

@@ -53,6 +53,7 @@ static struct {
const char *dev_dir; const char *dev_dir;
int has_scanned; int has_scanned;
long st_dev;
struct dm_list dirs; struct dm_list dirs;
struct dm_list files; struct dm_list files;
@@ -1064,11 +1065,18 @@ static void _insert_dirs(struct dm_list *dirs)
struct dir_list *dl; struct dir_list *dl;
struct udev *udev = NULL; struct udev *udev = NULL;
int with_udev; int with_udev;
struct stat tinfo;
with_udev = obtain_device_list_from_udev() && with_udev = obtain_device_list_from_udev() &&
(udev = udev_get_library_context()); (udev = udev_get_library_context());
dm_list_iterate_items(dl, &_cache.dirs) { dm_list_iterate_items(dl, &_cache.dirs) {
if (stat(dl->dir, &tinfo) < 0) {
log_warn("WARNING: Cannot use dir %s, %s.",
dl->dir, strerror(errno));
continue;
}
_cache.st_dev = tinfo.st_dev;
if (with_udev) { if (with_udev) {
if (!_insert_udev_dir(udev, dl->dir)) if (!_insert_udev_dir(udev, dl->dir))
log_debug_devs("%s: Failed to insert devices from " log_debug_devs("%s: Failed to insert devices from "
@@ -1091,9 +1099,17 @@ static int _device_in_udev_db(const dev_t d)
static void _insert_dirs(struct dm_list *dirs) static void _insert_dirs(struct dm_list *dirs)
{ {
struct dir_list *dl; struct dir_list *dl;
struct stat tinfo;
dm_list_iterate_items(dl, &_cache.dirs) dm_list_iterate_items(dl, &_cache.dirs) {
if (stat(dl->dir, &tinfo) < 0) {
log_warn("WARNING: Cannot use dir %s, %s.",
dl->dir, strerror(errno));
continue;
}
_cache.st_dev = tinfo.st_dev;
_insert_dir(dl->dir); _insert_dir(dl->dir);
}
} }
#endif /* UDEV_SYNC_SUPPORT */ #endif /* UDEV_SYNC_SUPPORT */
@@ -1128,6 +1144,11 @@ static int _insert(const char *path, const struct stat *info,
return 1; return 1;
} }
if (info->st_dev != _cache.st_dev) {
log_debug_devs("%s: Different filesystem in directory", path);
return 1;
}
if (rec && !_insert_dir(path)) if (rec && !_insert_dir(path))
return 0; return 0;
} else { /* add a device */ } else { /* add a device */
@@ -1831,7 +1852,7 @@ int setup_devices_file(struct cmd_context *cmd)
* Add all system devices to dev-cache, and attempt to * Add all system devices to dev-cache, and attempt to
* match all devices_file entries to dev-cache entries. * match all devices_file entries to dev-cache entries.
*/ */
static int _setup_devices(struct cmd_context *cmd, int no_file_match) int setup_devices(struct cmd_context *cmd)
{ {
int file_exists; int file_exists;
int lock_mode = 0; int lock_mode = 0;
@@ -1958,13 +1979,6 @@ static int _setup_devices(struct cmd_context *cmd, int no_file_match)
*/ */
dev_cache_scan(cmd); dev_cache_scan(cmd);
/*
* The caller uses "no_file_match" if it wants to match specific devs
* itself, instead of matching everything in device_ids_match.
*/
if (no_file_match && cmd->enable_devices_file)
return 1;
/* /*
* Match entries from cmd->use_devices with device structs in dev-cache. * Match entries from cmd->use_devices with device structs in dev-cache.
*/ */
@@ -1973,16 +1987,6 @@ static int _setup_devices(struct cmd_context *cmd, int no_file_match)
return 1; return 1;
} }
int setup_devices(struct cmd_context *cmd)
{
return _setup_devices(cmd, 0);
}
int setup_devices_no_file_match(struct cmd_context *cmd)
{
return _setup_devices(cmd, 1);
}
/* /*
* The alternative to setup_devices() when the command is interested * The alternative to setup_devices() when the command is interested
* in using only one PV. * in using only one PV.
@@ -2051,3 +2055,188 @@ int setup_device(struct cmd_context *cmd, const char *devname)
return 1; return 1;
} }
/*
* pvscan --cache is specialized/optimized to look only at command args,
* so this just sets up the devices file, then individual devices are
* added to dev-cache and matched with device_ids later in pvscan.
*/
int setup_devices_for_pvscan_cache(struct cmd_context *cmd)
{
if (cmd->enable_devices_list) {
if (!_setup_devices_list(cmd))
return_0;
return 1;
}
if (!setup_devices_file(cmd))
return_0;
if (!cmd->enable_devices_file)
return 1;
if (!devices_file_exists(cmd)) {
log_debug("Devices file not found, ignoring.");
cmd->enable_devices_file = 0;
return 1;
}
if (!lock_devices_file(cmd, LOCK_SH)) {
log_error("Failed to lock the devices file to read.");
return 0;
}
if (!device_ids_read(cmd)) {
log_error("Failed to read the devices file.");
unlock_devices_file(cmd);
return 0;
}
unlock_devices_file(cmd);
return 1;
}
/* Get a device name from a devno. */
static char *_get_devname_from_devno(struct cmd_context *cmd, dev_t devno)
{
char path[PATH_MAX];
char devname[PATH_MAX];
char namebuf[NAME_LEN];
char line[1024];
int major = MAJOR(devno);
int minor = MINOR(devno);
int line_major;
int line_minor;
uint64_t line_blocks;
DIR *dir;
struct dirent *dirent;
FILE *fp;
/*
* $ ls /sys/dev/block/8:0/device/block/
* sda
*/
if (major_is_scsi_device(cmd->dev_types, major)) {
if (dm_snprintf(path, sizeof(path), "%sdev/block/%d:%d/device/block",
dm_sysfs_dir(), major, minor) < 0) {
return NULL;
}
if (!(dir = opendir(path)))
return NULL;
while ((dirent = readdir(dir))) {
if (dirent->d_name[0] == '.')
continue;
if (dm_snprintf(devname, sizeof(devname), "/dev/%s", dirent->d_name) < 0) {
devname[0] = '\0';
stack;
}
break;
}
closedir(dir);
if (devname[0]) {
log_debug("Found %s for %d:%d from sys", devname, major, minor);
return _strdup(devname);
}
return NULL;
}
/*
* $ cat /sys/dev/block/253:3/dm/name
* mpatha
*/
if (major == cmd->dev_types->device_mapper_major) {
if (dm_snprintf(path, sizeof(path), "%sdev/block/%d:%d/dm/name",
dm_sysfs_dir(), major, minor) < 0) {
return NULL;
}
if (!get_sysfs_value(path, namebuf, sizeof(namebuf), 0))
return NULL;
if (dm_snprintf(devname, sizeof(devname), "/dev/mapper/%s", namebuf) < 0) {
devname[0] = '\0';
stack;
}
if (devname[0]) {
log_debug("Found %s for %d:%d from sys", devname, major, minor);
return _strdup(devname);
}
return NULL;
}
/*
* /proc/partitions lists
* major minor #blocks name
*/
if (!(fp = fopen("/proc/partitions", "r")))
return NULL;
while (fgets(line, sizeof(line), fp)) {
if (sscanf(line, "%u %u %llu %s", &line_major, &line_minor, (unsigned long long *)&line_blocks, namebuf) != 4)
continue;
if (line_major != major)
continue;
if (line_minor != minor)
continue;
if (dm_snprintf(devname, sizeof(devname), "/dev/%s", namebuf) < 0) {
devname[0] = '\0';
stack;
}
break;
}
fclose(fp);
if (devname[0]) {
log_debug("Found %s for %d:%d from proc", devname, major, minor);
return _strdup(devname);
}
/*
* If necessary, this could continue searching by stat'ing /dev entries.
*/
return NULL;
}
int setup_devname_in_dev_cache(struct cmd_context *cmd, const char *devname)
{
struct stat buf;
struct device *dev;
if (stat(devname, &buf) < 0) {
log_error("Cannot access device %s.", devname);
return 0;
}
if (!S_ISBLK(buf.st_mode)) {
log_error("Invaild device type %s.", devname);
return 0;
}
if (!_insert_dev(devname, buf.st_rdev))
return_0;
if (!(dev = (struct device *) dm_hash_lookup(_cache.names, devname)))
return_0;
return 1;
}
int setup_devno_in_dev_cache(struct cmd_context *cmd, dev_t devno)
{
const char *devname;
if (!(devname = _get_devname_from_devno(cmd, devno)))
return_0;
return setup_devname_in_dev_cache(cmd, devname);
}

View File

@@ -77,7 +77,11 @@ int get_dm_uuid_from_sysfs(char *buf, size_t buf_size, int major, int minor);
int setup_devices_file(struct cmd_context *cmd); int setup_devices_file(struct cmd_context *cmd);
int setup_devices(struct cmd_context *cmd); int setup_devices(struct cmd_context *cmd);
int setup_devices_no_file_match(struct cmd_context *cmd);
int setup_device(struct cmd_context *cmd, const char *devname); int setup_device(struct cmd_context *cmd, const char *devname);
/* Normal device setup functions are split up for pvscan optimization. */
int setup_devices_for_pvscan_cache(struct cmd_context *cmd);
int setup_devname_in_dev_cache(struct cmd_context *cmd, const char *devname);
int setup_devno_in_dev_cache(struct cmd_context *cmd, dev_t devno);
#endif #endif

View File

@@ -1351,8 +1351,9 @@ void device_id_update_vg_uuid(struct cmd_context *cmd, struct volume_group *vg,
} }
} }
if (update) if (update &&
device_ids_write(cmd); !device_ids_write(cmd))
stack;
out: out:
unlock_devices_file(cmd); unlock_devices_file(cmd);
} }
@@ -1533,6 +1534,22 @@ int device_ids_match_dev(struct cmd_context *cmd, struct device *dev)
* passes the filter. * passes the filter.
*/ */
void device_ids_match_device_list(struct cmd_context *cmd)
{
struct dev_use *du;
dm_list_iterate_items(du, &cmd->use_devices) {
if (du->dev)
continue;
if (!(du->dev = dev_cache_get(cmd, du->devname, NULL))) {
log_warn("Device not found for %s.", du->devname);
} else {
/* Should we set dev->id? Which idtype? Use --deviceidtype? */
du->dev->flags |= DEV_MATCHED_USE_ID;
}
}
}
void device_ids_match(struct cmd_context *cmd) void device_ids_match(struct cmd_context *cmd)
{ {
struct dev_iter *iter; struct dev_iter *iter;
@@ -1540,16 +1557,7 @@ void device_ids_match(struct cmd_context *cmd)
struct device *dev; struct device *dev;
if (cmd->enable_devices_list) { if (cmd->enable_devices_list) {
dm_list_iterate_items(du, &cmd->use_devices) { device_ids_match_device_list(cmd);
if (du->dev)
continue;
if (!(du->dev = dev_cache_get(cmd, du->devname, NULL))) {
log_warn("Device not found for %s.", du->devname);
} else {
/* Should we set dev->id? Which idtype? Use --deviceidtype? */
du->dev->flags |= DEV_MATCHED_USE_ID;
}
}
return; return;
} }

View File

@@ -32,6 +32,7 @@ int device_id_add(struct cmd_context *cmd, struct device *dev, const char *pvid,
void device_id_pvremove(struct cmd_context *cmd, struct device *dev); void device_id_pvremove(struct cmd_context *cmd, struct device *dev);
void device_ids_match(struct cmd_context *cmd); void device_ids_match(struct cmd_context *cmd);
int device_ids_match_dev(struct cmd_context *cmd, struct device *dev); int device_ids_match_dev(struct cmd_context *cmd, struct device *dev);
void device_ids_match_device_list(struct cmd_context *cmd);
void device_ids_validate(struct cmd_context *cmd, struct dm_list *scanned_devs, int *device_ids_invalid, int noupdate); void device_ids_validate(struct cmd_context *cmd, struct dm_list *scanned_devs, int *device_ids_invalid, int noupdate);
int device_ids_version_unchanged(struct cmd_context *cmd); int device_ids_version_unchanged(struct cmd_context *cmd);
void device_ids_find_renamed_devs(struct cmd_context *cmd, struct dm_list *dev_list, int *search_count, int noupdate); void device_ids_find_renamed_devs(struct cmd_context *cmd, struct dm_list *dev_list, int *search_count, int noupdate);

View File

@@ -465,7 +465,7 @@ static struct volume_group *_vg_read_raw(struct cmd_context *cmd,
vg = _vg_read_raw_area(cmd, fid, vgname, &mdac->area, vg_fmtdata, use_previous_vg, 0, mda_is_primary(mda)); vg = _vg_read_raw_area(cmd, fid, vgname, &mdac->area, vg_fmtdata, use_previous_vg, 0, mda_is_primary(mda));
if (!vg && !*use_previous_vg) { if (!vg && use_previous_vg && !*use_previous_vg) {
/* /*
* This condition (corrupt metadata text) is often seen in the * This condition (corrupt metadata text) is often seen in the
* label_scan()/_text_read() phase, where this code corresponds to * label_scan()/_text_read() phase, where this code corresponds to
@@ -477,8 +477,12 @@ static struct volume_group *_vg_read_raw(struct cmd_context *cmd,
struct lvmcache_info *info = lvmcache_info_from_pvid(dev->pvid, dev, 0); struct lvmcache_info *info = lvmcache_info_from_pvid(dev->pvid, dev, 0);
log_warn("WARNING: reading %s mda%d failed to read metadata.", dev_name(dev), mda_is_primary(mda)?1:2); log_warn("WARNING: reading %s mda%d failed to read metadata.", dev_name(dev), mda_is_primary(mda)?1:2);
log_warn("WARNING: repair VG metadata on %s with vgck --updatemetadata.", dev_name(dev)); log_warn("WARNING: repair VG metadata on %s with vgck --updatemetadata.", dev_name(dev));
/* remove mda from lvmcache, saving it in info->bad_mdas for possible repair with updatemetadata */ if (info)
lvmcache_del_save_bad_mda(info, mda->mda_num, BAD_MDA_TEXT); /* remove mda from lvmcache, saving it in info->bad_mdas for possible repair with updatemetadata */
lvmcache_del_save_bad_mda(info, mda->mda_num, BAD_MDA_TEXT);
else
log_warn("WARNING: No cache info for %s", dev_name(dev));
/* remove mda from fid */ /* remove mda from fid */
fid_remove_mda(fid, mda, NULL, 0, 0); fid_remove_mda(fid, mda, NULL, 0, 0);
} }

View File

@@ -503,7 +503,7 @@ static int _create_sanlock_lv(struct cmd_context *cmd, struct volume_group *vg,
.read_ahead = DM_READ_AHEAD_NONE, .read_ahead = DM_READ_AHEAD_NONE,
.stripes = 1, .stripes = 1,
.vg_name = vg->name, .vg_name = vg->name,
.lv_name = dm_pool_strdup(cmd->mem, lock_lv_name), .lv_name = lock_lv_name,
.zero = 1, .zero = 1,
}; };

View File

@@ -2354,7 +2354,7 @@ static int _match_pv_tags(const struct dm_config_node *cling_tag_list_cn,
const struct dm_config_value *cv; const struct dm_config_value *cv;
const char *str; const char *str;
const char *tag_matched; const char *tag_matched;
struct dm_list *tags_to_match = mem ? NULL : pv_tags ? : &pv2->tags; struct dm_list *tags_to_match = mem ? NULL : pv_tags ? : ((pv2) ? &pv2->tags : NULL);
struct dm_str_list *sl; struct dm_str_list *sl;
unsigned first_tag = 1; unsigned first_tag = 1;
@@ -2409,7 +2409,7 @@ static int _match_pv_tags(const struct dm_config_node *cling_tag_list_cn,
continue; continue;
} }
if (!str_list_match_list(&pv1->tags, tags_to_match, &tag_matched)) if (tags_to_match && !str_list_match_list(&pv1->tags, tags_to_match, &tag_matched))
continue; continue;
if (!pv_tags) { if (!pv_tags) {

View File

@@ -5846,12 +5846,12 @@ static int _stats_report(CMD_ARGS)
if (_switches[ALL_PROGRAMS_ARG]) if (_switches[ALL_PROGRAMS_ARG])
_program_id = ""; _program_id = "";
if (_switches[VERBOSE_ARG] && !strcmp(subcommand, "list")) if (_switches[VERBOSE_ARG] && subcommand && !strcmp(subcommand, "list"))
_statstype |= (DM_STATS_WALK_ALL _statstype |= (DM_STATS_WALK_ALL
| DM_STATS_WALK_SKIP_SINGLE_AREA); | DM_STATS_WALK_SKIP_SINGLE_AREA);
/* suppress duplicates unless the user has requested all regions */ /* suppress duplicates unless the user has requested all regions */
if (!strcmp(subcommand, "report") && !objtype_args) if (subcommand && !objtype_args && !strcmp(subcommand, "report"))
/* suppress duplicate rows of output */ /* suppress duplicate rows of output */
_statstype |= (DM_STATS_WALK_ALL _statstype |= (DM_STATS_WALK_ALL
| DM_STATS_WALK_SKIP_SINGLE_AREA); | DM_STATS_WALK_SKIP_SINGLE_AREA);

View File

@@ -283,7 +283,7 @@ not ls "$RUNDIR/lvm/pvs_online/$PVID3"
# arg in devices list # arg in devices list
_clear_online_files _clear_online_files
pvscan --devices "$dev3" --cache -aay "$dev3" pvscan --devices "$dev3" --cache -aay "$dev3"
pvscan --devices "$dev4" --cache -aay "$dev4" pvscan --devices "$dev4","$dev3" --cache -aay "$dev4"
check lv_field $vg2/$lv2 lv_active "active" check lv_field $vg2/$lv2 lv_active "active"
vgchange -an $vg2 vgchange -an $vg2

View File

@@ -86,7 +86,7 @@ static void *_fix_init(struct io_engine *engine)
} }
if (!_runs_is_tmpfs) { if (!_runs_is_tmpfs) {
close(f->fd); (void) close(f->fd);
// reopen with O_DIRECT // reopen with O_DIRECT
f->fd = open(f->fname, O_RDWR | O_DIRECT); f->fd = open(f->fname, O_RDWR | O_DIRECT);
T_ASSERT(f->fd >= 0); T_ASSERT(f->fd >= 0);

View File

@@ -857,11 +857,21 @@ static int _get_devs_from_saved_vg(struct cmd_context *cmd, const char *vgname,
devno = MKDEV(file_major, file_minor); devno = MKDEV(file_major, file_minor);
if (!setup_devno_in_dev_cache(cmd, devno)) {
log_error_pvscan(cmd, "No device set up for %d:%d PVID %s", file_major, file_minor, pvid);
goto bad;
}
if (!(dev = dev_cache_get_by_devt(cmd, devno, NULL, NULL))) { if (!(dev = dev_cache_get_by_devt(cmd, devno, NULL, NULL))) {
log_error_pvscan(cmd, "No device found for %d:%d PVID %s", file_major, file_minor, pvid); log_error_pvscan(cmd, "No device found for %d:%d PVID %s", file_major, file_minor, pvid);
goto bad; goto bad;
} }
/*
* Do not need to match device_id here, see comment after
* get_devs_from_saved_vg about relying on pvid online file.
*/
name1 = dev_name(dev); name1 = dev_name(dev);
name2 = pvl->pv->device_hint; name2 = pvl->pv->device_hint;
@@ -1099,17 +1109,11 @@ static int _pvscan_aa(struct cmd_context *cmd, struct pvscan_aa_params *pp,
* PROCESS_SKIP_SCAN: we have already done lvmcache_label_scan * PROCESS_SKIP_SCAN: we have already done lvmcache_label_scan
* so tell process_each to skip it. * so tell process_each to skip it.
*/ */
if (do_all)
read_flags |= PROCESS_SKIP_SCAN;
/*
* When the command is processing specific devs (not all), it
* has done setup_devices_no_file_match() to avoid matching ids
* fo all devs unnecessarily, but now that we're falling back
* to process_each_vg() we need to complete the id matching.
*/
if (!do_all) if (!do_all)
device_ids_match(cmd); lvmcache_label_scan(cmd);
read_flags |= PROCESS_SKIP_SCAN;
ret = process_each_vg(cmd, 0, NULL, NULL, vgnames, read_flags, 0, handle, _pvscan_aa_single); ret = process_each_vg(cmd, 0, NULL, NULL, vgnames, read_flags, 0, handle, _pvscan_aa_single);
} }
@@ -1192,11 +1196,15 @@ static int _get_args_devs(struct cmd_context *cmd, struct dm_list *pvscan_args,
/* in common usage, no dev will be found for a devno */ /* in common usage, no dev will be found for a devno */
dm_list_iterate_items(arg, pvscan_args) { dm_list_iterate_items(arg, pvscan_args) {
if (arg->devname) if (arg->devname) {
if (!setup_devname_in_dev_cache(cmd, arg->devname))
log_error_pvscan(cmd, "No device set up for name arg %s", arg->devname);
arg->dev = dev_cache_get(cmd, arg->devname, NULL); arg->dev = dev_cache_get(cmd, arg->devname, NULL);
else if (arg->devno) } else if (arg->devno) {
if (!setup_devno_in_dev_cache(cmd, arg->devno))
log_error_pvscan(cmd, "No device set up for devno arg %d", (int)arg->devno);
arg->dev = dev_cache_get_by_devt(cmd, arg->devno, NULL, NULL); arg->dev = dev_cache_get_by_devt(cmd, arg->devno, NULL, NULL);
else } else
return_0; return_0;
} }
@@ -1672,11 +1680,13 @@ static int _pvscan_cache_args(struct cmd_context *cmd, int argc, char **argv,
cmd->pvscan_cache_single = 1; cmd->pvscan_cache_single = 1;
/* /*
* "no_file_match" means that when the devices file is used, * Special pvscan-specific setup steps to avoid looking
* setup_devices will skip matching devs to devices file entries. * at any devices except for device args.
* Specific devs must be matched later with device_ids_match_dev(). * Read devices file and determine if devices file will be used.
* Does not do dev_cache_scan (adds nothing to dev-cache), and
* does not do any device id matching.
*/ */
if (!setup_devices_no_file_match(cmd)) { if (!setup_devices_for_pvscan_cache(cmd)) {
log_error_pvscan(cmd, "Failed to set up devices."); log_error_pvscan(cmd, "Failed to set up devices.");
return 0; return 0;
} }
@@ -1735,17 +1745,21 @@ static int _pvscan_cache_args(struct cmd_context *cmd, int argc, char **argv,
log_debug("pvscan_cache_args: filter devs nodata"); log_debug("pvscan_cache_args: filter devs nodata");
/* /*
* Match dev args with the devices file because * Match dev args with the devices file because special/optimized
* setup_devices_no_file_match() was used above which skipped checking * device setup was used above which does not check the devices file.
* the devices file. If a match fails here do not exclude it, that * If a match fails here do not exclude it, that will be done below by
* will be done below by passes_filter() which runs filter-deviceid. * passes_filter() which runs filter-deviceid. The
* The relax_deviceid_filter case needs to be able to work around * relax_deviceid_filter case needs to be able to work around
* unmatching devs. * unmatching devs.
*/ */
if (cmd->enable_devices_file) { if (cmd->enable_devices_file) {
dm_list_iterate_items_safe(devl, devl2, &pvscan_devs) dm_list_iterate_items(devl, &pvscan_devs)
device_ids_match_dev(cmd, devl->dev); device_ids_match_dev(cmd, devl->dev);
} }
if (cmd->enable_devices_list)
device_ids_match_device_list(cmd);
if (cmd->enable_devices_file && device_ids_use_devname(cmd)) { if (cmd->enable_devices_file && device_ids_use_devname(cmd)) {
relax_deviceid_filter = 1; relax_deviceid_filter = 1;