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

detect udev mk_link problems

This commit is contained in:
Alasdair Kergon 2009-08-04 21:44:20 +00:00
parent 61b61849eb
commit a83b7adc28

View File

@ -107,7 +107,7 @@ static int _mk_link(const char *dev_dir, const char *vg_name,
{
char lv_path[PATH_MAX], link_path[PATH_MAX], lvm1_group_path[PATH_MAX];
char vg_path[PATH_MAX];
struct stat buf;
struct stat buf, buf_lp;
if (dm_snprintf(vg_path, sizeof(vg_path), "%s%s",
dev_dir, vg_name) == -1) {
@ -161,12 +161,34 @@ static int _mk_link(const char *dev_dir, const char *vg_name,
return 0;
}
if (dm_udev_get_sync_support()) {
/* Check udev created the correct link. */
if (!stat(link_path, &buf_lp) &&
!stat(lv_path, &buf)) {
if (buf_lp.st_rdev == buf.st_rdev)
return 1;
else
log_warn("Symlink %s that should have been "
"created by udev does not have "
"correct target. Falling back to "
"direct link creation", lv_path);
} else
log_warn("Symlink %s that should have been "
"created by udev could not be checked "
"for its correctness. Falling back to "
"direct link creation.", lv_path);
}
log_very_verbose("Removing %s", lv_path);
if (unlink(lv_path) < 0) {
log_sys_error("unlink", lv_path);
return 0;
}
}
} else if (dm_udev_get_sync_support())
log_warn("The link should had been created by udev "
"but it was not found. Falling back to "
"direct link creation.", lv_path);
log_very_verbose("Linking %s -> %s", lv_path, link_path);
if (symlink(link_path, lv_path) < 0) {