mirror of
git://sourceware.org/git/lvm2.git
synced 2025-11-11 12:23:50 +03:00
Compare commits
17 Commits
dev-dct-pv
...
v2_03_14
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ef4521831d | ||
|
|
36be4d68f6 | ||
|
|
33e47182f7 | ||
|
|
60dc44b707 | ||
|
|
88e0d68909 | ||
|
|
c60bac4661 | ||
|
|
1b104ddb55 | ||
|
|
a172a02a9a | ||
|
|
9cf4eac250 | ||
|
|
bae1083472 | ||
|
|
c2be6c38d5 | ||
|
|
882141eb8c | ||
|
|
65ba4964df | ||
|
|
e7b5f490c5 | ||
|
|
6668d6409a | ||
|
|
2779830a06 | ||
|
|
8aefd97252 |
@@ -1 +1 @@
|
|||||||
1.02.181-git (2021-08-11)
|
1.02.181 (2021-10-20)
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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
117
configure
vendored
@@ -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 :
|
||||||
|
|||||||
31
configure.ac
31
configure.ac
@@ -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,
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user