mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-21 13:34:40 +03:00
dmsetup: fix udev event handling for create
With newer kernels (>5.13) DM_CREATE no longer generates uevent for DM devices without table. There are even no sysfs block device entries in such case, although device has asigned major:minor and it is being listed by 'dmsetup info'. So this patch calculates amount of 'table' lines and in case no table line comes from cmdline or stdin - waiting on cookie is avoided generically instead of disabling just case with option --notable - which then also skipped handling of an option --addnodeoncreate (which is however historical and should be avoided) As a result there should be no leaking udev cookies and endlessly waiting commands like this: dmsetup create mytestdev </dev/null
This commit is contained in:
parent
ae916f77c9
commit
a5042375de
@ -1,5 +1,6 @@
|
|||||||
Version 1.02.189 -
|
Version 1.02.189 -
|
||||||
=====================================
|
=====================================
|
||||||
|
Improve 'dmsetup create' without given table line with new kernels.
|
||||||
|
|
||||||
Version 1.02.187 - 10th November 2022
|
Version 1.02.187 - 10th November 2022
|
||||||
=====================================
|
=====================================
|
||||||
|
@ -274,6 +274,7 @@ static char _disp_units = 's';
|
|||||||
const char *_program_id = DM_STATS_PROGRAM_ID; /* program_id used for reports. */
|
const char *_program_id = DM_STATS_PROGRAM_ID; /* program_id used for reports. */
|
||||||
static uint64_t _statstype = 0; /* stats objects to report */
|
static uint64_t _statstype = 0; /* stats objects to report */
|
||||||
static int _concise_output_produced = 0; /* Was any concise output already printed? */
|
static int _concise_output_produced = 0; /* Was any concise output already printed? */
|
||||||
|
static int _added_target = 0; /* Count added target (no target -> no event) */
|
||||||
struct command;
|
struct command;
|
||||||
static const struct command *_selection_cmd = NULL; /* Command to run against each device select with -S */
|
static const struct command *_selection_cmd = NULL; /* Command to run against each device select with -S */
|
||||||
|
|
||||||
@ -357,6 +358,8 @@ static int _parse_line(struct dm_task *dmt, char *buffer, const char *file,
|
|||||||
if (!dm_task_add_target(dmt, start, size, ttype, ptr))
|
if (!dm_task_add_target(dmt, start, size, ttype, ptr))
|
||||||
return_0;
|
return_0;
|
||||||
|
|
||||||
|
_added_target++;
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1175,9 +1178,6 @@ static int _create_one_device(const char *name, const char *file)
|
|||||||
_read_ahead_flags))
|
_read_ahead_flags))
|
||||||
goto_out;
|
goto_out;
|
||||||
|
|
||||||
if (_switches[NOTABLE_ARG])
|
|
||||||
dm_udev_set_sync_support(0);
|
|
||||||
|
|
||||||
if (_switches[NOUDEVRULES_ARG])
|
if (_switches[NOUDEVRULES_ARG])
|
||||||
udev_flags |= DM_UDEV_DISABLE_DM_RULES_FLAG |
|
udev_flags |= DM_UDEV_DISABLE_DM_RULES_FLAG |
|
||||||
DM_UDEV_DISABLE_SUBSYSTEM_RULES_FLAG;
|
DM_UDEV_DISABLE_SUBSYSTEM_RULES_FLAG;
|
||||||
@ -1194,8 +1194,12 @@ static int _create_one_device(const char *name, const char *file)
|
|||||||
if (_udev_only)
|
if (_udev_only)
|
||||||
udev_flags |= DM_UDEV_DISABLE_LIBRARY_FALLBACK;
|
udev_flags |= DM_UDEV_DISABLE_LIBRARY_FALLBACK;
|
||||||
|
|
||||||
if (!dm_task_set_cookie(dmt, &cookie, udev_flags) ||
|
if (_switches[NOTABLE_ARG] || !_added_target)
|
||||||
!_task_run(dmt))
|
cookie = 0; // ADD event -> no udev event handling
|
||||||
|
else if (!dm_task_set_cookie(dmt, &cookie, udev_flags))
|
||||||
|
goto_out;
|
||||||
|
|
||||||
|
if (!_task_run(dmt))
|
||||||
goto_out;
|
goto_out;
|
||||||
|
|
||||||
r = 1;
|
r = 1;
|
||||||
|
Loading…
Reference in New Issue
Block a user