mirror of
git://sourceware.org/git/lvm2.git
synced 2025-02-01 09:47:48 +03:00
Add a [--poll {y|n}] flag to vgchange and lvchange to control whether
the background polldaemon is allowed to start. It can be used standalone or in conjunction with --refresh or --available y. Control over when the background polldaemon starts will be particularly important for snapshot-merge of a root filesystem. Dracut will be updated to activate all LVs with: --poll n The lvm2-monitor initscript will start polling with: --poll y NOTE: Because we currently have no way of knowing if a background polldaemon is active for a given LV the following limitations exist and have been deemed acceptable: 1) it is not possible to stop an active polldaemon; so the lvm2-monitor initscript doesn't stop running polldaemon(s) 2) redundant polldaemon instances will be started for all specified LVs if vgchange or lvchange are repeatedly used with '--poll y' Signed-off-by: Mike Snitzer <snitzer@redhat.com>
This commit is contained in:
parent
ff442c1e28
commit
7a4fa925fc
@ -1,5 +1,6 @@
|
|||||||
Version 2.02.57 -
|
Version 2.02.57 -
|
||||||
====================================
|
====================================
|
||||||
|
Add --poll flag to vgchange and lvchange.
|
||||||
Propagate commit and revert metadata notification to other nodes in cluster.
|
Propagate commit and revert metadata notification to other nodes in cluster.
|
||||||
Use proper mask for VG lock mode in clvmd.
|
Use proper mask for VG lock mode in clvmd.
|
||||||
Add possibility to drop precommitted metadata in lvmcache.
|
Add possibility to drop precommitted metadata in lvmcache.
|
||||||
|
@ -50,6 +50,7 @@
|
|||||||
#define DEFAULT_MIRROR_MAX_IMAGES 8 /* limited by kernel DM_KCOPYD_MAX_REGIONS */
|
#define DEFAULT_MIRROR_MAX_IMAGES 8 /* limited by kernel DM_KCOPYD_MAX_REGIONS */
|
||||||
#define DEFAULT_DMEVENTD_MIRROR_LIB "libdevmapper-event-lvm2mirror.so"
|
#define DEFAULT_DMEVENTD_MIRROR_LIB "libdevmapper-event-lvm2mirror.so"
|
||||||
#define DEFAULT_DMEVENTD_MONITOR 1
|
#define DEFAULT_DMEVENTD_MONITOR 1
|
||||||
|
#define DEFAULT_BACKGROUND_POLLING 1
|
||||||
|
|
||||||
#define DEFAULT_UMASK 0077
|
#define DEFAULT_UMASK 0077
|
||||||
|
|
||||||
|
@ -35,6 +35,7 @@ static int _security_level = SECURITY_LEVEL;
|
|||||||
static char _cmd_name[30] = "";
|
static char _cmd_name[30] = "";
|
||||||
static int _mirror_in_sync = 0;
|
static int _mirror_in_sync = 0;
|
||||||
static int _dmeventd_monitor = DEFAULT_DMEVENTD_MONITOR;
|
static int _dmeventd_monitor = DEFAULT_DMEVENTD_MONITOR;
|
||||||
|
static int _background_polling = DEFAULT_BACKGROUND_POLLING;
|
||||||
static int _ignore_suspended_devices = 0;
|
static int _ignore_suspended_devices = 0;
|
||||||
static int _error_message_produced = 0;
|
static int _error_message_produced = 0;
|
||||||
static unsigned _is_static = 0;
|
static unsigned _is_static = 0;
|
||||||
@ -91,6 +92,11 @@ void init_dmeventd_monitor(int reg)
|
|||||||
_dmeventd_monitor = reg;
|
_dmeventd_monitor = reg;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void init_background_polling(int polling)
|
||||||
|
{
|
||||||
|
_background_polling = polling;
|
||||||
|
}
|
||||||
|
|
||||||
void init_ignore_suspended_devices(int ignore)
|
void init_ignore_suspended_devices(int ignore)
|
||||||
{
|
{
|
||||||
_ignore_suspended_devices = ignore;
|
_ignore_suspended_devices = ignore;
|
||||||
@ -155,6 +161,11 @@ int trust_cache()
|
|||||||
return _trust_cache;
|
return _trust_cache;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int background_polling()
|
||||||
|
{
|
||||||
|
return _background_polling;
|
||||||
|
}
|
||||||
|
|
||||||
int ignorelockingfailure()
|
int ignorelockingfailure()
|
||||||
{
|
{
|
||||||
return _ignorelockingfailure;
|
return _ignorelockingfailure;
|
||||||
|
@ -32,6 +32,7 @@ void init_lockingfailed(int level);
|
|||||||
void init_security_level(int level);
|
void init_security_level(int level);
|
||||||
void init_mirror_in_sync(int in_sync);
|
void init_mirror_in_sync(int in_sync);
|
||||||
void init_dmeventd_monitor(int reg);
|
void init_dmeventd_monitor(int reg);
|
||||||
|
void init_background_polling(int polling);
|
||||||
void init_ignore_suspended_devices(int ignore);
|
void init_ignore_suspended_devices(int ignore);
|
||||||
void init_error_message_produced(int produced);
|
void init_error_message_produced(int produced);
|
||||||
void init_is_static(unsigned value);
|
void init_is_static(unsigned value);
|
||||||
@ -49,6 +50,7 @@ int ignorelockingfailure(void);
|
|||||||
int lockingfailed(void);
|
int lockingfailed(void);
|
||||||
int security_level(void);
|
int security_level(void);
|
||||||
int mirror_in_sync(void);
|
int mirror_in_sync(void);
|
||||||
|
int background_polling(void);
|
||||||
int ignore_suspended_devices(void);
|
int ignore_suspended_devices(void);
|
||||||
const char *log_command_name(void);
|
const char *log_command_name(void);
|
||||||
unsigned is_static(void);
|
unsigned is_static(void);
|
||||||
|
@ -12,6 +12,7 @@ lvchange \- change attributes of a logical volume
|
|||||||
[\-\-ignorelockingfailure]
|
[\-\-ignorelockingfailure]
|
||||||
[\-\-ignoremonitoring]
|
[\-\-ignoremonitoring]
|
||||||
[\-\-monitor {y|n}]
|
[\-\-monitor {y|n}]
|
||||||
|
[\-\-poll {y|n}]
|
||||||
[\-\-noudevsync]
|
[\-\-noudevsync]
|
||||||
[\-M|\-\-persistent y|n] [\-\-minor minor]
|
[\-M|\-\-persistent y|n] [\-\-minor minor]
|
||||||
[\-P|\-\-partial]
|
[\-P|\-\-partial]
|
||||||
@ -62,6 +63,14 @@ the failure is handled according to
|
|||||||
\fBmirror_image_fault_policy\fP and \fBmirror_log_fault_policy\fP
|
\fBmirror_image_fault_policy\fP and \fBmirror_log_fault_policy\fP
|
||||||
set in \fBlvm.conf\fP.
|
set in \fBlvm.conf\fP.
|
||||||
.TP
|
.TP
|
||||||
|
.I \-\-poll y|n
|
||||||
|
Controls whether or not a logical volume's progress is polled. It may
|
||||||
|
not be appropriate to immediately poll the progress of a logical
|
||||||
|
volume's transformation when it is activated (for example, when merging
|
||||||
|
a snapshot into the root FS). The progress polling of an incomplete
|
||||||
|
pvmove or lvconvert can be deferred using \fB--poll n\fP and restarted
|
||||||
|
using \fB--poll y\fP.
|
||||||
|
.TP
|
||||||
.I \-\-noudevsync
|
.I \-\-noudevsync
|
||||||
Disable udev synchronisation. The
|
Disable udev synchronisation. The
|
||||||
process will not wait for notification from udev.
|
process will not wait for notification from udev.
|
||||||
|
@ -10,6 +10,7 @@ vgchange \- change attributes of a volume group
|
|||||||
.RB [ \-A | \-\-autobackup " {" y | n }]
|
.RB [ \-A | \-\-autobackup " {" y | n }]
|
||||||
.RB [ \-a | \-\-available " [e|l] {" y | n }]
|
.RB [ \-a | \-\-available " [e|l] {" y | n }]
|
||||||
.RB [ \-\-monitor " {" y | n }]
|
.RB [ \-\-monitor " {" y | n }]
|
||||||
|
.RB [ \-\-poll " {" y | n }]
|
||||||
.RB [ \-c | \-\-clustered " {" y | n }]
|
.RB [ \-c | \-\-clustered " {" y | n }]
|
||||||
.RB [ \-u | \-\-uuid ]
|
.RB [ \-u | \-\-uuid ]
|
||||||
.RB [ \-d | \-\-debug]
|
.RB [ \-d | \-\-debug]
|
||||||
@ -87,6 +88,14 @@ and
|
|||||||
set in
|
set in
|
||||||
.BR lvm.conf (5).
|
.BR lvm.conf (5).
|
||||||
.TP
|
.TP
|
||||||
|
.BR \-\-poll " " { y | n }
|
||||||
|
Controls whether or not a logical volume's progress is polled. It may
|
||||||
|
not be appropriate to immediately poll the progress of a logical
|
||||||
|
volume's transformation when it is activated (for example, when merging
|
||||||
|
a snapshot into the root FS). The progress polling of an incomplete
|
||||||
|
pvmove or lvconvert can be deferred using \fB--poll n\fP and restarted
|
||||||
|
using \fB--poll y\fP.
|
||||||
|
.TP
|
||||||
.BR \-\-noudevsync
|
.BR \-\-noudevsync
|
||||||
Disable udev synchronisation. The
|
Disable udev synchronisation. The
|
||||||
process will not wait for notification from udev.
|
process will not wait for notification from udev.
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
# Required-Stop: $local_fs
|
# Required-Stop: $local_fs
|
||||||
# Default-Start: 1 2 3 4 5
|
# Default-Start: 1 2 3 4 5
|
||||||
# Default-Stop: 0 6
|
# Default-Stop: 0 6
|
||||||
# Short-Description: Monitoring of LVM2 mirrors, snapshots etc. using dmeventd
|
# Short-Description: Monitoring of LVM2 mirrors, snapshots etc. using dmeventd or progress polling
|
||||||
### END INIT INFO
|
### END INIT INFO
|
||||||
|
|
||||||
. /etc/init.d/functions
|
. /etc/init.d/functions
|
||||||
@ -50,7 +50,7 @@ start()
|
|||||||
VGSLIST=`$VGS --noheadings -o name 2> /dev/null`
|
VGSLIST=`$VGS --noheadings -o name 2> /dev/null`
|
||||||
for vg in $VGSLIST
|
for vg in $VGSLIST
|
||||||
do
|
do
|
||||||
action "Starting monitoring for VG $vg:" $VGCHANGE --monitor y $vg || ret=$?
|
action "Starting monitoring for VG $vg:" $VGCHANGE --monitor y --poll y $vg || ret=$?
|
||||||
done
|
done
|
||||||
|
|
||||||
return $ret
|
return $ret
|
||||||
|
@ -64,6 +64,7 @@ arg(dataalignmentoffset_ARG, '\0', "dataalignmentoffset", size_kb_arg, 0)
|
|||||||
arg(virtualoriginsize_ARG, '\0', "virtualoriginsize", size_mb_arg, 0)
|
arg(virtualoriginsize_ARG, '\0', "virtualoriginsize", size_mb_arg, 0)
|
||||||
arg(virtualsize_ARG, '\0', "virtualsize", size_mb_arg, 0)
|
arg(virtualsize_ARG, '\0', "virtualsize", size_mb_arg, 0)
|
||||||
arg(noudevsync_ARG, '\0', "noudevsync", NULL, 0)
|
arg(noudevsync_ARG, '\0', "noudevsync", NULL, 0)
|
||||||
|
arg(poll_ARG, '\0', "poll", yes_no_arg, 0)
|
||||||
|
|
||||||
/* Allow some variations */
|
/* Allow some variations */
|
||||||
arg(resizable_ARG, '\0', "resizable", yes_no_arg, 0)
|
arg(resizable_ARG, '\0', "resizable", yes_no_arg, 0)
|
||||||
|
@ -72,6 +72,7 @@ xx(lvchange,
|
|||||||
"\t[--ignorelockingfailure]\n"
|
"\t[--ignorelockingfailure]\n"
|
||||||
"\t[--ignoremonitoring]\n"
|
"\t[--ignoremonitoring]\n"
|
||||||
"\t[--monitor {y|n}]\n"
|
"\t[--monitor {y|n}]\n"
|
||||||
|
"\t[--poll {y|n}]\n"
|
||||||
"\t[--noudevsync]\n"
|
"\t[--noudevsync]\n"
|
||||||
"\t[-M|--persistent y|n] [--major major] [--minor minor]\n"
|
"\t[-M|--persistent y|n] [--major major] [--minor minor]\n"
|
||||||
"\t[-P|--partial] " "\n"
|
"\t[-P|--partial] " "\n"
|
||||||
@ -88,8 +89,8 @@ xx(lvchange,
|
|||||||
alloc_ARG, autobackup_ARG, available_ARG, contiguous_ARG, force_ARG,
|
alloc_ARG, autobackup_ARG, available_ARG, contiguous_ARG, force_ARG,
|
||||||
ignorelockingfailure_ARG, ignoremonitoring_ARG, major_ARG, minor_ARG,
|
ignorelockingfailure_ARG, ignoremonitoring_ARG, major_ARG, minor_ARG,
|
||||||
monitor_ARG, noudevsync_ARG, partial_ARG, permission_ARG, persistent_ARG,
|
monitor_ARG, noudevsync_ARG, partial_ARG, permission_ARG, persistent_ARG,
|
||||||
readahead_ARG, resync_ARG, refresh_ARG, addtag_ARG, deltag_ARG, test_ARG,
|
poll_ARG, readahead_ARG, resync_ARG, refresh_ARG, addtag_ARG, deltag_ARG,
|
||||||
yes_ARG)
|
test_ARG, yes_ARG)
|
||||||
|
|
||||||
xx(lvconvert,
|
xx(lvconvert,
|
||||||
"Change logical volume layout",
|
"Change logical volume layout",
|
||||||
@ -688,6 +689,7 @@ xx(vgchange,
|
|||||||
"\t[--ignorelockingfailure]\n"
|
"\t[--ignorelockingfailure]\n"
|
||||||
"\t[--ignoremonitoring]\n"
|
"\t[--ignoremonitoring]\n"
|
||||||
"\t[--monitor {y|n}]\n"
|
"\t[--monitor {y|n}]\n"
|
||||||
|
"\t[--poll {y|n}]\n"
|
||||||
"\t[--noudevsync]\n"
|
"\t[--noudevsync]\n"
|
||||||
"\t[--refresh]\n"
|
"\t[--refresh]\n"
|
||||||
"\t[-t|--test]" "\n"
|
"\t[-t|--test]" "\n"
|
||||||
@ -707,7 +709,7 @@ xx(vgchange,
|
|||||||
addtag_ARG, alloc_ARG, allocation_ARG, autobackup_ARG, available_ARG,
|
addtag_ARG, alloc_ARG, allocation_ARG, autobackup_ARG, available_ARG,
|
||||||
clustered_ARG, deltag_ARG, ignorelockingfailure_ARG, ignoremonitoring_ARG,
|
clustered_ARG, deltag_ARG, ignorelockingfailure_ARG, ignoremonitoring_ARG,
|
||||||
logicalvolume_ARG, maxphysicalvolumes_ARG, monitor_ARG, noudevsync_ARG,
|
logicalvolume_ARG, maxphysicalvolumes_ARG, monitor_ARG, noudevsync_ARG,
|
||||||
partial_ARG, physicalextentsize_ARG, refresh_ARG, resizeable_ARG,
|
partial_ARG, physicalextentsize_ARG, poll_ARG, refresh_ARG, resizeable_ARG,
|
||||||
resizable_ARG, test_ARG, uuid_ARG)
|
resizable_ARG, test_ARG, uuid_ARG)
|
||||||
|
|
||||||
xx(vgck,
|
xx(vgck,
|
||||||
|
@ -101,6 +101,22 @@ static int lvchange_monitoring(struct cmd_context *cmd,
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int lvchange_background_polling(struct cmd_context *cmd,
|
||||||
|
struct logical_volume *lv)
|
||||||
|
{
|
||||||
|
struct lvinfo info;
|
||||||
|
|
||||||
|
if (!lv_info(cmd, lv, &info, 0, 0) || !info.exists) {
|
||||||
|
log_error("Logical volume, %s, is not active", lv->name);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (background_polling())
|
||||||
|
lv_spawn_background_polling(cmd, lv);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
static int lvchange_availability(struct cmd_context *cmd,
|
static int lvchange_availability(struct cmd_context *cmd,
|
||||||
struct logical_volume *lv)
|
struct logical_volume *lv)
|
||||||
{
|
{
|
||||||
@ -135,7 +151,8 @@ static int lvchange_availability(struct cmd_context *cmd,
|
|||||||
return_0;
|
return_0;
|
||||||
}
|
}
|
||||||
|
|
||||||
lv_spawn_background_polling(cmd, lv);
|
if (background_polling())
|
||||||
|
lv_spawn_background_polling(cmd, lv);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
@ -577,6 +594,9 @@ static int lvchange_single(struct cmd_context *cmd, struct logical_volume *lv,
|
|||||||
(is_static() || arg_count(cmd, ignoremonitoring_ARG)) ?
|
(is_static() || arg_count(cmd, ignoremonitoring_ARG)) ?
|
||||||
DMEVENTD_MONITOR_IGNORE : DEFAULT_DMEVENTD_MONITOR));
|
DMEVENTD_MONITOR_IGNORE : DEFAULT_DMEVENTD_MONITOR));
|
||||||
|
|
||||||
|
init_background_polling(arg_int_value(cmd, poll_ARG,
|
||||||
|
DEFAULT_BACKGROUND_POLLING));
|
||||||
|
|
||||||
/* access permission change */
|
/* access permission change */
|
||||||
if (arg_count(cmd, permission_ARG)) {
|
if (arg_count(cmd, permission_ARG)) {
|
||||||
if (!archive(lv->vg)) {
|
if (!archive(lv->vg)) {
|
||||||
@ -679,6 +699,15 @@ static int lvchange_single(struct cmd_context *cmd, struct logical_volume *lv,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!arg_count(cmd, available_ARG) &&
|
||||||
|
!arg_count(cmd, refresh_ARG) &&
|
||||||
|
arg_count(cmd, poll_ARG)) {
|
||||||
|
if (!lvchange_background_polling(cmd, lv)) {
|
||||||
|
stack;
|
||||||
|
return ECMD_FAILED;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (doit != docmds) {
|
if (doit != docmds) {
|
||||||
stack;
|
stack;
|
||||||
return ECMD_FAILED;
|
return ECMD_FAILED;
|
||||||
@ -695,10 +724,10 @@ int lvchange(struct cmd_context *cmd, int argc, char **argv)
|
|||||||
&& !arg_count(cmd, persistent_ARG) && !arg_count(cmd, addtag_ARG)
|
&& !arg_count(cmd, persistent_ARG) && !arg_count(cmd, addtag_ARG)
|
||||||
&& !arg_count(cmd, deltag_ARG) && !arg_count(cmd, refresh_ARG)
|
&& !arg_count(cmd, deltag_ARG) && !arg_count(cmd, refresh_ARG)
|
||||||
&& !arg_count(cmd, alloc_ARG) && !arg_count(cmd, monitor_ARG)
|
&& !arg_count(cmd, alloc_ARG) && !arg_count(cmd, monitor_ARG)
|
||||||
&& !arg_count(cmd, resync_ARG)) {
|
&& !arg_count(cmd, poll_ARG) && !arg_count(cmd, resync_ARG)) {
|
||||||
log_error("Need 1 or more of -a, -C, -j, -m, -M, -p, -r, "
|
log_error("Need 1 or more of -a, -C, -j, -m, -M, -p, -r, "
|
||||||
"--resync, --refresh, --alloc, --addtag, --deltag "
|
"--resync, --refresh, --alloc, --addtag, --deltag, "
|
||||||
"or --monitor");
|
"--monitor or --poll");
|
||||||
return EINVALID_CMD_LINE;
|
return EINVALID_CMD_LINE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -51,6 +51,39 @@ static int _monitor_lvs_in_vg(struct cmd_context *cmd,
|
|||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int _poll_lvs_in_vg(struct cmd_context *cmd,
|
||||||
|
struct volume_group *vg)
|
||||||
|
{
|
||||||
|
struct lv_list *lvl;
|
||||||
|
struct logical_volume *lv;
|
||||||
|
struct lvinfo info;
|
||||||
|
int lv_active;
|
||||||
|
int count = 0;
|
||||||
|
|
||||||
|
dm_list_iterate_items(lvl, &vg->lvs) {
|
||||||
|
lv = lvl->lv;
|
||||||
|
|
||||||
|
if (!lv_info(cmd, lv, &info, 0, 0))
|
||||||
|
lv_active = 0;
|
||||||
|
else
|
||||||
|
lv_active = info.exists;
|
||||||
|
|
||||||
|
if (!lv_active ||
|
||||||
|
!(lv->status & (PVMOVE|CONVERTING)))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
lv_spawn_background_polling(cmd, lv);
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* returns the number of polled devices
|
||||||
|
* - there is no way to know if lv is already being polled
|
||||||
|
*/
|
||||||
|
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
static int _activate_lvs_in_vg(struct cmd_context *cmd,
|
static int _activate_lvs_in_vg(struct cmd_context *cmd,
|
||||||
struct volume_group *vg, int activate)
|
struct volume_group *vg, int activate)
|
||||||
{
|
{
|
||||||
@ -95,7 +128,8 @@ static int _activate_lvs_in_vg(struct cmd_context *cmd,
|
|||||||
} else if (!activate_lv(cmd, lv))
|
} else if (!activate_lv(cmd, lv))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (activate != CHANGE_AN && activate != CHANGE_ALN &&
|
if (background_polling() &&
|
||||||
|
activate != CHANGE_AN && activate != CHANGE_ALN &&
|
||||||
(lv->status & (PVMOVE|CONVERTING)))
|
(lv->status & (PVMOVE|CONVERTING)))
|
||||||
lv_spawn_background_polling(cmd, lv);
|
lv_spawn_background_polling(cmd, lv);
|
||||||
|
|
||||||
@ -125,6 +159,20 @@ static int _vgchange_monitoring(struct cmd_context *cmd, struct volume_group *vg
|
|||||||
return ECMD_PROCESSED;
|
return ECMD_PROCESSED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int _vgchange_background_polling(struct cmd_context *cmd, struct volume_group *vg)
|
||||||
|
{
|
||||||
|
int polled;
|
||||||
|
|
||||||
|
if (lvs_in_vg_activated(vg) && background_polling()) {
|
||||||
|
polled = _poll_lvs_in_vg(cmd, vg);
|
||||||
|
log_print("Background polling started for %d logical volume(s) "
|
||||||
|
"in volume group \"%s\"",
|
||||||
|
polled, vg->name);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ECMD_PROCESSED;
|
||||||
|
}
|
||||||
|
|
||||||
static int _vgchange_available(struct cmd_context *cmd, struct volume_group *vg)
|
static int _vgchange_available(struct cmd_context *cmd, struct volume_group *vg)
|
||||||
{
|
{
|
||||||
int lv_open, active, monitored;
|
int lv_open, active, monitored;
|
||||||
@ -490,12 +538,18 @@ static int vgchange_single(struct cmd_context *cmd, const char *vg_name,
|
|||||||
(is_static() || arg_count(cmd, ignoremonitoring_ARG)) ?
|
(is_static() || arg_count(cmd, ignoremonitoring_ARG)) ?
|
||||||
DMEVENTD_MONITOR_IGNORE : DEFAULT_DMEVENTD_MONITOR));
|
DMEVENTD_MONITOR_IGNORE : DEFAULT_DMEVENTD_MONITOR));
|
||||||
|
|
||||||
|
init_background_polling(arg_int_value(cmd, poll_ARG,
|
||||||
|
DEFAULT_BACKGROUND_POLLING));
|
||||||
|
|
||||||
if (arg_count(cmd, available_ARG))
|
if (arg_count(cmd, available_ARG))
|
||||||
r = _vgchange_available(cmd, vg);
|
r = _vgchange_available(cmd, vg);
|
||||||
|
|
||||||
else if (arg_count(cmd, monitor_ARG))
|
else if (arg_count(cmd, monitor_ARG))
|
||||||
r = _vgchange_monitoring(cmd, vg);
|
r = _vgchange_monitoring(cmd, vg);
|
||||||
|
|
||||||
|
else if (arg_count(cmd, poll_ARG))
|
||||||
|
r = _vgchange_background_polling(cmd, vg);
|
||||||
|
|
||||||
else if (arg_count(cmd, resizeable_ARG))
|
else if (arg_count(cmd, resizeable_ARG))
|
||||||
r = _vgchange_resizeable(cmd, vg);
|
r = _vgchange_resizeable(cmd, vg);
|
||||||
|
|
||||||
@ -538,9 +592,11 @@ int vgchange(struct cmd_context *cmd, int argc, char **argv)
|
|||||||
arg_count(cmd, addtag_ARG) + arg_count(cmd, uuid_ARG) +
|
arg_count(cmd, addtag_ARG) + arg_count(cmd, uuid_ARG) +
|
||||||
arg_count(cmd, physicalextentsize_ARG) +
|
arg_count(cmd, physicalextentsize_ARG) +
|
||||||
arg_count(cmd, clustered_ARG) + arg_count(cmd, alloc_ARG) +
|
arg_count(cmd, clustered_ARG) + arg_count(cmd, alloc_ARG) +
|
||||||
arg_count(cmd, monitor_ARG) + arg_count(cmd, refresh_ARG))) {
|
arg_count(cmd, monitor_ARG) + arg_count(cmd, poll_ARG) +
|
||||||
log_error("One of -a, -c, -l, -p, -s, -x, --refresh, "
|
arg_count(cmd, refresh_ARG))) {
|
||||||
"--uuid, --alloc, --addtag or --deltag required");
|
log_error("Need 1 or more of -a, -c, -l, -p, -s, -x, "
|
||||||
|
"--refresh, --uuid, --alloc, --addtag, --deltag, "
|
||||||
|
"--monitor or --poll");
|
||||||
return EINVALID_CMD_LINE;
|
return EINVALID_CMD_LINE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user