1
0
mirror of git://sourceware.org/git/lvm2.git synced 2024-12-21 13:34:40 +03:00

device_id: make dmeventd use system.devices by default

When no dmeventd.devices exists, make it use system.devices
rather than no devices file at all.
This commit is contained in:
David Teigland 2023-10-02 17:15:44 -05:00
parent a836872199
commit be9a64e654
2 changed files with 31 additions and 25 deletions

View File

@ -1777,39 +1777,38 @@ static int _setup_devices_list(struct cmd_context *cmd)
return 1; return 1;
} }
/*
* LVs that use dmeventd need to be accessible using system.devices.
*
* dmeventd will use dmeventd.devices if it exists, otherwise will use
* system.devices. If a VG is covered by dmeventd.devices it should also
* be covered by system.devices. The automated vgchange --monitor and
* vgchange -aay commands do not currently consider dmeventd.devices.
* dmeventd.devices can be useful to prevent commands run by dmeventd
* from reading VGs that do not need the service.
*
* dmeventd gets events for any applicable dm device in the kernel,
* and will attempt to run lvm commands for it. These commands
* will only use dmeventd.devices or system.devices, so if an LV
* that dmeventd is watching is not covered by either of these
* devices files, the dmeventd-generated command will fail when
* it doesn't find the VG.
*/
static int _setup_devices_file_dmeventd(struct cmd_context *cmd) static int _setup_devices_file_dmeventd(struct cmd_context *cmd)
{ {
char path[PATH_MAX]; char path[PATH_MAX];
struct stat st; struct stat st;
/*
* When command is run by dmeventd there is no --devicesfile
* option that can enable/disable the use of a devices file.
*/
if (!find_config_tree_bool(cmd, devices_use_devicesfile_CFG, NULL)) { if (!find_config_tree_bool(cmd, devices_use_devicesfile_CFG, NULL)) {
cmd->enable_devices_file = 0; cmd->enable_devices_file = 0;
return 1; return 1;
} }
/* if (dm_snprintf(path, sizeof(path), "%s/devices/dmeventd.devices", cmd->system_dir) < 0)
* If /etc/lvm/devices/dmeventd.devices exists, then use that. return_0;
* The optional dmeventd.devices allows the user to control if (stat(path, &st))
* which devices dmeventd will look at and use. return 0;
* Otherwise, disable the devices file because dmeventd should
* be able to manage LVs in any VG (i.e. LVs in a non-system
* devices file.)
*/
if (dm_snprintf(path, sizeof(path), "%s/devices/dmeventd.devices", cmd->system_dir) < 0) {
log_warn("Failed to copy devices path");
cmd->enable_devices_file = 0;
return 1;
}
if (stat(path, &st)) {
/* No dmeventd.devices, so do not use a devices file. */
cmd->enable_devices_file = 0;
return 1;
}
cmd->enable_devices_file = 1; cmd->enable_devices_file = 1;
(void) dm_strncpy(cmd->devices_file_path, path, sizeof(cmd->devices_file_path)); (void) dm_strncpy(cmd->devices_file_path, path, sizeof(cmd->devices_file_path));
@ -1823,8 +1822,9 @@ int setup_devices_file(struct cmd_context *cmd)
struct stat st; struct stat st;
int rv; int rv;
if (cmd->run_by_dmeventd) /* Use dmeventd.devices if it exists. */
return _setup_devices_file_dmeventd(cmd); if (cmd->run_by_dmeventd && _setup_devices_file_dmeventd(cmd))
return 1;
if (cmd->devicesfile) { if (cmd->devicesfile) {
/* --devicesfile <filename> or "" has been set which overrides /* --devicesfile <filename> or "" has been set which overrides

View File

@ -108,6 +108,12 @@ The default choice for device ID type can be overridden using lvmdevices
device it will be used, otherwise the device will be added using the type device it will be used, otherwise the device will be added using the type
that would otherwise be chosen. that would otherwise be chosen.
LVM commands run by dmeventd will use the devices file
\fI#DEFAULT_SYS_DIR#/devices/dmeventd.devices\fP if it exists,
otherwise system.devices is used. VGs that require the dmeventd
service should be included in system.devices, even if they are
included in dmeventd.devices.
.SS Device ID refresh .SS Device ID refresh
.P .P
A machine identifier is saved in the devices file, and is used to detect A machine identifier is saved in the devices file, and is used to detect