mirror of
git://sourceware.org/git/lvm2.git
synced 2025-01-02 01:18:26 +03:00
Initialise clvmd locks before lvm context to avoid open descriptor leaks.
(At least /dev/mapper/control is open after lvm context init.)
This commit is contained in:
parent
13db59839c
commit
5ddda8cd56
@ -1,5 +1,6 @@
|
|||||||
Version 2.02.87 -
|
Version 2.02.87 -
|
||||||
===============================
|
===============================
|
||||||
|
Initialise clvmd locks before lvm context to avoid open descriptor leaks.
|
||||||
Remove obsoleted GULM clvmd cluster locking support.
|
Remove obsoleted GULM clvmd cluster locking support.
|
||||||
Suppress low-level locking errors and warnings while using --sysinit.
|
Suppress low-level locking errors and warnings while using --sysinit.
|
||||||
Remove unused inconsistent_seqno variable in _vg_read().
|
Remove unused inconsistent_seqno variable in _vg_read().
|
||||||
|
@ -721,7 +721,7 @@ static int was_ex_lock(char *uuid, char **argv)
|
|||||||
* but this may not be the case...
|
* but this may not be the case...
|
||||||
* I suppose this also comes in handy if clvmd crashes, not that it would!
|
* I suppose this also comes in handy if clvmd crashes, not that it would!
|
||||||
*/
|
*/
|
||||||
static void *get_initial_state(char **argv)
|
static int get_initial_state(char **argv)
|
||||||
{
|
{
|
||||||
int lock_mode;
|
int lock_mode;
|
||||||
char lv[64], vg[64], flags[25], vg_flags[25];
|
char lv[64], vg[64], flags[25], vg_flags[25];
|
||||||
@ -733,7 +733,7 @@ static void *get_initial_state(char **argv)
|
|||||||
"r");
|
"r");
|
||||||
|
|
||||||
if (!lvs)
|
if (!lvs)
|
||||||
return NULL;
|
return 1;
|
||||||
|
|
||||||
while (fgets(line, sizeof(line), lvs)) {
|
while (fgets(line, sizeof(line), lvs)) {
|
||||||
if (sscanf(line, "%s %s %s %s\n", vg, lv, flags, vg_flags) == 4) {
|
if (sscanf(line, "%s %s %s %s\n", vg, lv, flags, vg_flags) == 4) {
|
||||||
@ -773,7 +773,7 @@ static void *get_initial_state(char **argv)
|
|||||||
}
|
}
|
||||||
if (fclose(lvs))
|
if (fclose(lvs))
|
||||||
DEBUGLOG("lvs fclose failed: %s\n", strerror(errno));
|
DEBUGLOG("lvs fclose failed: %s\n", strerror(errno));
|
||||||
return NULL;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void lvm2_log_fn(int level, const char *file, int line, int dm_errno,
|
static void lvm2_log_fn(int level, const char *file, int line, int dm_errno,
|
||||||
@ -886,6 +886,10 @@ int init_clvm(char **argv)
|
|||||||
init_syslog(LOG_DAEMON);
|
init_syslog(LOG_DAEMON);
|
||||||
openlog("clvmd", LOG_PID, LOG_DAEMON);
|
openlog("clvmd", LOG_PID, LOG_DAEMON);
|
||||||
|
|
||||||
|
/* Initialise already held locks */
|
||||||
|
if (get_initial_state(argv))
|
||||||
|
log_error("Cannot load initial lock states.");
|
||||||
|
|
||||||
if (!(cmd = create_toolcontext(1, NULL, 0))) {
|
if (!(cmd = create_toolcontext(1, NULL, 0))) {
|
||||||
log_error("Failed to allocate command context");
|
log_error("Failed to allocate command context");
|
||||||
return 0;
|
return 0;
|
||||||
@ -902,8 +906,6 @@ int init_clvm(char **argv)
|
|||||||
check_config();
|
check_config();
|
||||||
init_ignore_suspended_devices(1);
|
init_ignore_suspended_devices(1);
|
||||||
|
|
||||||
get_initial_state(argv);
|
|
||||||
|
|
||||||
/* Trap log messages so we can pass them back to the user */
|
/* Trap log messages so we can pass them back to the user */
|
||||||
init_log_fn(lvm2_log_fn);
|
init_log_fn(lvm2_log_fn);
|
||||||
memlock_inc_daemon(cmd);
|
memlock_inc_daemon(cmd);
|
||||||
|
Loading…
Reference in New Issue
Block a user