mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-21 13:34:40 +03:00
debug: check for syscalls
Add some debug checks for possibly failing syscalls.
This commit is contained in:
parent
a48847269a
commit
97770d5aeb
@ -226,14 +226,14 @@ static int get_local_nodeid(void)
|
|||||||
{
|
{
|
||||||
struct dirent *de;
|
struct dirent *de;
|
||||||
DIR *ls_dir;
|
DIR *ls_dir;
|
||||||
char ls_comms_path[PATH_MAX];
|
char ls_comms_path[PATH_MAX] = { 0 };
|
||||||
|
char path[PATH_MAX] = { 0 };
|
||||||
FILE *file;
|
FILE *file;
|
||||||
char line[LOCK_LINE_MAX];
|
char line[LOCK_LINE_MAX];
|
||||||
char *str1, *str2;
|
char *str1, *str2;
|
||||||
int rv = -1, val;
|
int rv = -1, val;
|
||||||
|
|
||||||
memset(ls_comms_path, 0, sizeof(ls_comms_path));
|
snprintf(ls_comms_path, sizeof(ls_comms_path), "%s", DLM_COMMS_PATH);
|
||||||
snprintf(ls_comms_path, PATH_MAX, "%s",DLM_COMMS_PATH);
|
|
||||||
|
|
||||||
if (!(ls_dir = opendir(ls_comms_path)))
|
if (!(ls_dir = opendir(ls_comms_path)))
|
||||||
return -ECONNREFUSED;
|
return -ECONNREFUSED;
|
||||||
@ -241,31 +241,31 @@ static int get_local_nodeid(void)
|
|||||||
while ((de = readdir(ls_dir))) {
|
while ((de = readdir(ls_dir))) {
|
||||||
if (de->d_name[0] == '.')
|
if (de->d_name[0] == '.')
|
||||||
continue;
|
continue;
|
||||||
memset(ls_comms_path, 0, sizeof(ls_comms_path));
|
|
||||||
snprintf(ls_comms_path, PATH_MAX, "%s/%s/local",
|
snprintf(path, sizeof(path), "%s/%s/local",
|
||||||
DLM_COMMS_PATH, de->d_name);
|
DLM_COMMS_PATH, de->d_name);
|
||||||
|
|
||||||
if (!(file = fopen(ls_comms_path, "r")))
|
if (!(file = fopen(ls_comms_path, "r")))
|
||||||
continue;
|
continue;
|
||||||
str1 = fgets(line, LOCK_LINE_MAX, file);
|
str1 = fgets(line, sizeof(line), file);
|
||||||
fclose(file);
|
if (fclose(file))
|
||||||
|
log_sys_debug("fclose", path);
|
||||||
if (str1) {
|
if (str1) {
|
||||||
rv = sscanf(line, "%d", &val);
|
rv = sscanf(line, "%d", &val);
|
||||||
if ((rv == 1) && (val == 1 )) {
|
if ((rv == 1) && (val == 1 )) {
|
||||||
memset(ls_comms_path, 0, sizeof(ls_comms_path));
|
snprintf(path, sizeof(path), "%s/%s/nodeid",
|
||||||
snprintf(ls_comms_path, PATH_MAX, "%s/%s/nodeid",
|
|
||||||
DLM_COMMS_PATH, de->d_name);
|
DLM_COMMS_PATH, de->d_name);
|
||||||
|
|
||||||
if (!(file = fopen(ls_comms_path, "r")))
|
if (!(file = fopen(path, "r")))
|
||||||
continue;
|
continue;
|
||||||
str2 = fgets(line, LOCK_LINE_MAX, file);
|
str2 = fgets(line, sizeof(line), file);
|
||||||
fclose(file);
|
if (fclose(file))
|
||||||
|
log_sys_debug("fclose", path);
|
||||||
if (str2) {
|
if (str2) {
|
||||||
rv = sscanf(line, "%d", &val);
|
rv = sscanf(line, "%d", &val);
|
||||||
if (rv == 1) {
|
if (rv == 1) {
|
||||||
closedir(ls_dir);
|
if (closedir(ls_dir))
|
||||||
|
log_sys_debug("closedir", ls_comms_path);
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -274,7 +274,8 @@ static int get_local_nodeid(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (closedir(ls_dir))
|
if (closedir(ls_dir))
|
||||||
log_error("get_local_nodeid closedir error");
|
log_sys_debug("closedir", ls_comms_path);
|
||||||
|
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -363,6 +363,8 @@ void log_level(int level, const char *fmt, ...) __attribute__((format(printf, 2
|
|||||||
#define log_debug(fmt, args...) log_level(LOG_DEBUG, fmt, ##args)
|
#define log_debug(fmt, args...) log_level(LOG_DEBUG, fmt, ##args)
|
||||||
#define log_error(fmt, args...) log_level(LOG_ERR, fmt, ##args)
|
#define log_error(fmt, args...) log_level(LOG_ERR, fmt, ##args)
|
||||||
#define log_warn(fmt, args...) log_level(LOG_WARNING, fmt, ##args)
|
#define log_warn(fmt, args...) log_level(LOG_WARNING, fmt, ##args)
|
||||||
|
#define log_sys_debug(x, y) \
|
||||||
|
log_debug("%s: %s failed: %s", y, x, strerror(errno))
|
||||||
|
|
||||||
struct lockspace *alloc_lockspace(void);
|
struct lockspace *alloc_lockspace(void);
|
||||||
int lockspaces_empty(void);
|
int lockspaces_empty(void);
|
||||||
|
@ -393,7 +393,10 @@ int get_sysfs_binary(const char *path, char *buf, size_t buf_size, int *retlen)
|
|||||||
if (fd < 0)
|
if (fd < 0)
|
||||||
return 0;
|
return 0;
|
||||||
ret = read(fd, buf, buf_size);
|
ret = read(fd, buf, buf_size);
|
||||||
close(fd);
|
|
||||||
|
if (close(fd))
|
||||||
|
log_sys_debug("close", path);
|
||||||
|
|
||||||
if (ret <= 0)
|
if (ret <= 0)
|
||||||
return 0;
|
return 0;
|
||||||
*retlen = ret;
|
*retlen = ret;
|
||||||
@ -2136,6 +2139,7 @@ int setup_devices_for_online_autoactivation(struct cmd_context *cmd)
|
|||||||
|
|
||||||
static char *_get_devname_from_devno(struct cmd_context *cmd, dev_t devno)
|
static char *_get_devname_from_devno(struct cmd_context *cmd, dev_t devno)
|
||||||
{
|
{
|
||||||
|
static const char _partitions[] = "/proc/partitions";
|
||||||
char path[PATH_MAX];
|
char path[PATH_MAX];
|
||||||
char devname[PATH_MAX] = { 0 };
|
char devname[PATH_MAX] = { 0 };
|
||||||
char namebuf[NAME_LEN];
|
char namebuf[NAME_LEN];
|
||||||
@ -2174,7 +2178,8 @@ static char *_get_devname_from_devno(struct cmd_context *cmd, dev_t devno)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
closedir(dir);
|
if (closedir(dir))
|
||||||
|
log_sys_debug("closedir", path);
|
||||||
|
|
||||||
if (devname[0]) {
|
if (devname[0]) {
|
||||||
log_debug("Found %s for %d:%d from sys", devname, major, minor);
|
log_debug("Found %s for %d:%d from sys", devname, major, minor);
|
||||||
@ -2214,7 +2219,7 @@ static char *_get_devname_from_devno(struct cmd_context *cmd, dev_t devno)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
try_partition:
|
try_partition:
|
||||||
if (!(fp = fopen("/proc/partitions", "r")))
|
if (!(fp = fopen(_partitions, "r")))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
while (fgets(line, sizeof(line), fp)) {
|
while (fgets(line, sizeof(line), fp)) {
|
||||||
@ -2231,10 +2236,12 @@ try_partition:
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
fclose(fp);
|
|
||||||
|
if (fclose(fp))
|
||||||
|
log_sys_debug("fclose", _partitions);
|
||||||
|
|
||||||
if (devname[0]) {
|
if (devname[0]) {
|
||||||
log_debug("Found %s for %d:%d from proc", devname, major, minor);
|
log_debug("Found %s for %d:%d from %s", devname, major, minor, _partitions);
|
||||||
return _strdup(devname);
|
return _strdup(devname);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -164,6 +164,7 @@ static void _read_blacklist_file(const char *path)
|
|||||||
|
|
||||||
static void _read_wwid_exclusions(void)
|
static void _read_wwid_exclusions(void)
|
||||||
{
|
{
|
||||||
|
static const char _mpath_conf[] = "/etc/multipath/conf.d";
|
||||||
char path[PATH_MAX] = { 0 };
|
char path[PATH_MAX] = { 0 };
|
||||||
DIR *dir;
|
DIR *dir;
|
||||||
struct dirent *de;
|
struct dirent *de;
|
||||||
@ -172,14 +173,15 @@ static void _read_wwid_exclusions(void)
|
|||||||
|
|
||||||
_read_blacklist_file("/etc/multipath.conf");
|
_read_blacklist_file("/etc/multipath.conf");
|
||||||
|
|
||||||
if ((dir = opendir("/etc/multipath/conf.d"))) {
|
if ((dir = opendir(_mpath_conf))) {
|
||||||
while ((de = readdir(dir))) {
|
while ((de = readdir(dir))) {
|
||||||
if (de->d_name[0] == '.')
|
if (de->d_name[0] == '.')
|
||||||
continue;
|
continue;
|
||||||
snprintf(path, PATH_MAX-1, "/etc/multipath/conf.d/%s", de->d_name);
|
snprintf(path, sizeof(path), "%s/%s", _mpath_conf, de->d_name);
|
||||||
_read_blacklist_file(path);
|
_read_blacklist_file(path);
|
||||||
}
|
}
|
||||||
closedir(dir);
|
if (closedir(dir))
|
||||||
|
log_sys_debug("closedir", _mpath_conf);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* for each wwid in ignored_exceptions, remove it from ignored */
|
/* for each wwid in ignored_exceptions, remove it from ignored */
|
||||||
@ -594,7 +596,7 @@ static int _dev_is_mpath_component_sysfs(struct cmd_context *cmd, struct device
|
|||||||
|
|
||||||
out:
|
out:
|
||||||
if (closedir(dr))
|
if (closedir(dr))
|
||||||
stack;
|
log_sys_debug("closedir", holders_path);
|
||||||
|
|
||||||
if (is_mpath_component)
|
if (is_mpath_component)
|
||||||
*mpath_devno = MKDEV(dm_dev_major, dm_dev_minor);
|
*mpath_devno = MKDEV(dm_dev_major, dm_dev_minor);
|
||||||
@ -778,7 +780,7 @@ const char *dev_mpath_component_wwid(struct cmd_context *cmd, struct device *dev
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (closedir(dr))
|
if (closedir(dr))
|
||||||
stack;
|
log_sys_debug("closedir", slaves_path);
|
||||||
|
|
||||||
return wwid;
|
return wwid;
|
||||||
}
|
}
|
||||||
|
@ -392,7 +392,7 @@ int get_pvs_lookup(struct dm_list *pvs_online, const char *vgname)
|
|||||||
int file_major = 0, file_minor = 0;
|
int file_major = 0, file_minor = 0;
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
|
|
||||||
if (dm_snprintf(lookup_path, sizeof(path), "%s/%s", PVS_LOOKUP_DIR, vgname) < 0)
|
if (dm_snprintf(lookup_path, sizeof(lookup_path), "%s/%s", PVS_LOOKUP_DIR, vgname) < 0)
|
||||||
return_0;
|
return_0;
|
||||||
|
|
||||||
if (!(fp = fopen(lookup_path, "r")))
|
if (!(fp = fopen(lookup_path, "r")))
|
||||||
@ -403,7 +403,6 @@ int get_pvs_lookup(struct dm_list *pvs_online, const char *vgname)
|
|||||||
if (strlen(pvid) != ID_LEN)
|
if (strlen(pvid) != ID_LEN)
|
||||||
goto_bad;
|
goto_bad;
|
||||||
|
|
||||||
memset(path, 0, sizeof(path));
|
|
||||||
snprintf(path, sizeof(path), "%s/%s", PVS_ONLINE_DIR, pvid);
|
snprintf(path, sizeof(path), "%s/%s", PVS_ONLINE_DIR, pvid);
|
||||||
|
|
||||||
file_major = 0;
|
file_major = 0;
|
||||||
@ -443,12 +442,16 @@ int get_pvs_lookup(struct dm_list *pvs_online, const char *vgname)
|
|||||||
|
|
||||||
log_debug("Found PVs online lookup %d for %s", dm_list_size(pvs_online), vgname);
|
log_debug("Found PVs online lookup %d for %s", dm_list_size(pvs_online), vgname);
|
||||||
|
|
||||||
fclose(fp);
|
if (fclose(fp))
|
||||||
|
log_sys_debug("fclose", lookup_path);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
bad:
|
bad:
|
||||||
free_po_list(pvs_online);
|
free_po_list(pvs_online);
|
||||||
fclose(fp);
|
if (fclose(fp))
|
||||||
|
log_sys_debug("fclose", lookup_path);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -83,7 +83,9 @@ static int lvmdbusd_running(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
close(fd);
|
if (close(fd))
|
||||||
|
log_sys_debug("close", lockfile);
|
||||||
|
|
||||||
return running;
|
return running;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user