zdev: limit the derivation of ZDEV_SITE_ID

Currently ZDEV_SITE_ID is derived with the help of an additional
udev-rule, 40-zdev-id.rules. The sole purpose of this rule is to
determine the ZDEV_SITE_ID environment value with the help of zdev_id
binary. This solution is minimal, but this has some unwanted side-
effects. The zdev_id logic get executed for all the events, even
those completely unrelated to zdev/or site, and imports the unneeded
envionment values to the udev-db.

Instead of having an additional rule file, add this logic as part of
the udev-rule of those devices which are configured with site-support.
The logic will then be available on all those rules with the
site-supported devices only.

Signed-off-by: Vineeth Vijayan <vneethv@linux.ibm.com>
Reviewed-by: Peter Oberparleiter <oberpar@linux.ibm.com>
Signed-off-by: Jan Höppner <hoeppner@linux.ibm.com>
This commit is contained in:
Vineeth Vijayan
2023-09-18 17:54:53 +02:00
committed by Jan Höppner
parent 5637799c92
commit 07ff9e1da0
5 changed files with 30 additions and 66 deletions

View File

@@ -139,53 +139,6 @@ out:
free(copy);
}
/*
* Write the UDEV rule that determines the active SITE_ID
*/
exit_code_t udev_write_site_rule(void)
{
char *path, *name = "zdev-id";
exit_code_t rc = EXIT_OK;
FILE *fd;
/* Create file. */
path = path_get_zdev_rule(name);
if (!util_path_exists(path)) {
rc = path_create(path);
if (rc)
goto out;
}
fd = misc_fopen(path, "w");
if (!fd) {
error("Could not write to file %s: %s\n", path,
strerror(errno));
rc = EXIT_RUNTIME_ERROR;
goto out;
}
fprintf(fd, "# Generated by chzdev\n");
fprintf(fd, "\n");
/* We have to make sure that we are not trying to determine the SITE_ID
* for all the corresponding uevent. Check if the SITE_ID is already
* determined by reading the file /run/zdev_site_id; and if it is not
* available, execute the zdev_id program and determine the SITE_ID and
* create the new zdev_site_id file for next run.
*/
fprintf(fd, "TEST!=\"%s\", IMPORT{program}="
"\"%s/zdev_id\",GOTO=\"end\"\n", ZDEV_SITE_ID_FILE,
TOOLS_LIBDIR);
fprintf(fd, "IMPORT{file}=\"%s\"\n", ZDEV_SITE_ID_FILE);
fprintf(fd, "LABEL=\"end\"\n");
if (misc_fclose(fd))
warn("Could not close file %s: %s\n", path, strerror(errno));
out:
free(path);
return rc;
}
bool is_legacy_rule(struct util_udev_file *file)
{
struct util_udev_line_node *line;