1
0
mirror of https://github.com/systemd/systemd.git synced 2025-03-19 22:50:17 +03:00

[PATCH] reverse order of scanning of udevstart to look at class before block.

this should fix the startup issue for lvm, hopefully...
This commit is contained in:
greg@kroah.com 2004-06-26 01:08:47 -07:00 committed by Greg KH
parent 8108813b5f
commit 57218a0873

View File

@ -87,6 +87,60 @@ static void udev_scan(void)
DIR *dir;
struct dirent *dent;
/*
* We want to scan the class tree first as lvm and dm needs to be able
* to have access to the char control device when probing the block
* devices.
*/
devpath = "class";
dir = opendir(SYSCLASS);
if (dir != NULL) {
for (dent = readdir(dir); dent != NULL; dent = readdir(dir)) {
char dirname[MAX_PATHLEN];
DIR *dir2;
struct dirent *dent2;
if ((strcmp(dent->d_name, ".") == 0) ||
(strcmp(dent->d_name, "..") == 0))
continue;
snprintf(dirname, MAX_PATHLEN, "%s/%s", SYSCLASS, dent->d_name);
dirname[MAX_PATHLEN] = '\0';
dir2 = opendir(dirname);
if (dir2 != NULL) {
for (dent2 = readdir(dir2); dent2 != NULL; dent2 = readdir(dir2)) {
char dirname2[MAX_PATHLEN-1];
DIR *dir3;
struct dirent *dent3;
if ((strcmp(dent2->d_name, ".") == 0) ||
(strcmp(dent2->d_name, "..") == 0))
continue;
snprintf(dirname2, MAX_PATHLEN, "%s/%s", dirname, dent2->d_name);
dirname2[MAX_PATHLEN-1] = '\0';
dir3 = opendir(dirname2);
if (dir3 != NULL) {
for (dent3 = readdir(dir3); dent3 != NULL; dent3 = readdir(dir3)) {
char filename[MAX_PATHLEN];
if (strcmp(dent3->d_name, "dev") == 0) {
snprintf(filename, MAX_PATHLEN, "/class/%s/%s",
dent->d_name, dent2->d_name);
filename[MAX_PATHLEN-1] = '\0';
udev_exec(filename, dent->d_name);
}
}
closedir(dir3);
}
}
closedir(dir2);
}
}
closedir(dir);
}
devpath = "block";
dir = opendir(SYSBLOCK);
if (dir != NULL) {
@ -138,58 +192,8 @@ static void udev_scan(void)
}
closedir(dir);
}
devpath = "class";
dir = opendir(SYSCLASS);
if (dir != NULL) {
for (dent = readdir(dir); dent != NULL; dent = readdir(dir)) {
char dirname[MAX_PATHLEN];
DIR *dir2;
struct dirent *dent2;
if ((strcmp(dent->d_name, ".") == 0) ||
(strcmp(dent->d_name, "..") == 0))
continue;
snprintf(dirname, MAX_PATHLEN, "%s/%s", SYSCLASS, dent->d_name);
dirname[MAX_PATHLEN] = '\0';
dir2 = opendir(dirname);
if (dir2 != NULL) {
for (dent2 = readdir(dir2); dent2 != NULL; dent2 = readdir(dir2)) {
char dirname2[MAX_PATHLEN-1];
DIR *dir3;
struct dirent *dent3;
if ((strcmp(dent2->d_name, ".") == 0) ||
(strcmp(dent2->d_name, "..") == 0))
continue;
snprintf(dirname2, MAX_PATHLEN, "%s/%s", dirname, dent2->d_name);
dirname2[MAX_PATHLEN-1] = '\0';
dir3 = opendir(dirname2);
if (dir3 != NULL) {
for (dent3 = readdir(dir3); dent3 != NULL; dent3 = readdir(dir3)) {
char filename[MAX_PATHLEN];
if (strcmp(dent3->d_name, "dev") == 0) {
snprintf(filename, MAX_PATHLEN, "/class/%s/%s",
dent->d_name, dent2->d_name);
filename[MAX_PATHLEN-1] = '\0';
udev_exec(filename, dent->d_name);
}
}
closedir(dir3);
}
}
closedir(dir2);
}
}
closedir(dir);
}
}
int main(int argc, char *argv[], char *envp[])
{
init_logging("udevstart");