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

filter-sysfs: support old kernels without sys/dev/block

rhel5 for example doesn't have /sys/dev/block
This commit is contained in:
David Teigland 2021-11-09 11:54:48 -06:00
parent 73b4602f21
commit d608837b2a

View File

@ -15,6 +15,8 @@
#include "lib/misc/lib.h" #include "lib/misc/lib.h"
#include "lib/filters/filter.h" #include "lib/filters/filter.h"
static int _sys_dev_block_found;
#ifdef __linux__ #ifdef __linux__
static int _accept_p(struct cmd_context *cmd, struct dev_filter *f, struct device *dev, const char *use_filter_name) static int _accept_p(struct cmd_context *cmd, struct dev_filter *f, struct device *dev, const char *use_filter_name)
@ -23,6 +25,9 @@ static int _accept_p(struct cmd_context *cmd, struct dev_filter *f, struct devic
const char *sysfs_dir; const char *sysfs_dir;
struct stat info; struct stat info;
if (!_sys_dev_block_found)
return 1;
dev->filtered_flags &= ~DEV_FILTERED_SYSFS; dev->filtered_flags &= ~DEV_FILTERED_SYSFS;
/* /*
@ -57,6 +62,26 @@ static void _destroy(struct dev_filter *f)
free(f); free(f);
} }
static void _check_sys_dev_block(void)
{
char path[PATH_MAX];
const char *sysfs_dir;
struct stat info;
sysfs_dir = dm_sysfs_dir();
if (sysfs_dir && *sysfs_dir) {
if (dm_snprintf(path, sizeof(path), "%sdev/block", sysfs_dir) < 0)
return;
if (lstat(path, &info)) {
log_debug("filter-sysfs disabled: /sys/dev/block not found");
_sys_dev_block_found = 0;
} else {
_sys_dev_block_found = 1;
}
}
}
struct dev_filter *sysfs_filter_create(void) struct dev_filter *sysfs_filter_create(void)
{ {
const char *sysfs_dir = dm_sysfs_dir(); const char *sysfs_dir = dm_sysfs_dir();
@ -67,6 +92,9 @@ struct dev_filter *sysfs_filter_create(void)
return NULL; return NULL;
} }
/* support old kernels that don't have this */
_check_sys_dev_block();
if (!(f = zalloc(sizeof(*f)))) if (!(f = zalloc(sizeof(*f))))
goto_bad; goto_bad;