From: Kay Sievers Date: Wed, 5 Nov 2008 11:23:06 +0000 (+0100) Subject: do not import the "uevent" file when we only read the db to get old symlinks X-Git-Tag: 174~1346 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=77b852f3334311575b9c19ffb29d4a77a21b4bb2 do not import the "uevent" file when we only read the db to get old symlinks --- diff --git a/udev/lib/libudev-device.c b/udev/lib/libudev-device.c index 38af0e7c9..eda3f5d97 100644 --- a/udev/lib/libudev-device.c +++ b/udev/lib/libudev-device.c @@ -77,7 +77,7 @@ static size_t devpath_to_db_path(struct udev *udev, const char *devpath, char *f return util_path_encode(&filename[start], len - start); } -static int device_read_db(struct udev_device *udev_device) +int udev_device_read_db(struct udev_device *udev_device) { struct stat stats; char filename[UTIL_PATH_SIZE]; @@ -218,11 +218,11 @@ int udev_device_read_uevent_file(struct udev_device *udev_device) return 0; } -void udev_device_load_info(struct udev_device *device) +static void device_load_info(struct udev_device *device) { device->info_loaded = 1; udev_device_read_uevent_file(device); - device_read_db(device); + udev_device_read_db(device); } void udev_device_set_info_loaded(struct udev_device *device) @@ -676,7 +676,7 @@ const char *udev_device_get_devnode(struct udev_device *udev_device) if (udev_device == NULL) return NULL; if (!udev_device->info_loaded) - udev_device_load_info(udev_device); + device_load_info(udev_device); return udev_device->devnode; } @@ -739,7 +739,7 @@ struct udev_list_entry *udev_device_get_devlinks_list_entry(struct udev_device * if (udev_device == NULL) return NULL; if (!udev_device->info_loaded) - udev_device_load_info(udev_device); + device_load_info(udev_device); return udev_list_get_entry(&udev_device->devlinks_list); } @@ -766,7 +766,7 @@ struct udev_list_entry *udev_device_get_properties_list_entry(struct udev_device if (udev_device == NULL) return NULL; if (!udev_device->info_loaded) - udev_device_load_info(udev_device); + device_load_info(udev_device); if (!udev_device->devlinks_uptodate) { char symlinks[UTIL_PATH_SIZE]; struct udev_list_entry *list_entry; @@ -804,7 +804,7 @@ dev_t udev_device_get_devnum(struct udev_device *udev_device) if (udev_device == NULL) return makedev(0, 0); if (!udev_device->info_loaded) - udev_device_load_info(udev_device); + device_load_info(udev_device); return udev_device->devnum; } @@ -1154,7 +1154,7 @@ int udev_device_set_timeout(struct udev_device *udev_device, int timeout) int udev_device_get_event_timeout(struct udev_device *udev_device) { if (!udev_device->info_loaded) - udev_device_load_info(udev_device); + device_load_info(udev_device); return udev_device->event_timeout; } @@ -1190,7 +1190,7 @@ int udev_device_set_devnum(struct udev_device *udev_device, dev_t devnum) int udev_device_get_num_fake_partitions(struct udev_device *udev_device) { if (!udev_device->info_loaded) - udev_device_load_info(udev_device); + device_load_info(udev_device); return udev_device->num_fake_partitions; } @@ -1203,7 +1203,7 @@ int udev_device_set_num_fake_partitions(struct udev_device *udev_device, int num int udev_device_get_devlink_priority(struct udev_device *udev_device) { if (!udev_device->info_loaded) - udev_device_load_info(udev_device); + device_load_info(udev_device); return udev_device->devlink_priority; } @@ -1216,7 +1216,7 @@ int udev_device_set_devlink_priority(struct udev_device *udev_device, int prio) int udev_device_get_ignore_remove(struct udev_device *udev_device) { if (!udev_device->info_loaded) - udev_device_load_info(udev_device); + device_load_info(udev_device); return udev_device->ignore_remove; } diff --git a/udev/lib/libudev-private.h b/udev/lib/libudev-private.h index 5d6b94bf5..2f8b8259b 100644 --- a/udev/lib/libudev-private.h +++ b/udev/lib/libudev-private.h @@ -63,7 +63,7 @@ extern struct udev_list_entry *udev_device_add_property(struct udev_device *udev extern struct udev_list_entry *udev_device_add_property_from_string(struct udev_device *udev_device, const char *property); extern char **udev_device_get_properties_envp(struct udev_device *udev_device); extern ssize_t udev_device_get_properties_monitor_buf(struct udev_device *udev_device, const char **buf); -extern void udev_device_load_info(struct udev_device *udev_device); +extern int udev_device_read_db(struct udev_device *udev_device); extern int udev_device_read_uevent_file(struct udev_device *udev_device); extern int udev_device_set_action(struct udev_device *udev_device, const char *action); extern int udev_device_set_driver(struct udev_device *udev_device, const char *driver); diff --git a/udev/udev-event.c b/udev/udev-event.c index 1c640cf37..fe579b49c 100644 --- a/udev/udev-event.c +++ b/udev/udev-event.c @@ -585,8 +585,10 @@ int udev_event_execute_rules(struct udev_event *event, struct udev_rules *rules) /* read current database entry */ dev_old = udev_device_new_from_syspath(event->udev, udev_device_get_syspath(dev)); - if (dev_old != NULL) - udev_device_load_info(dev_old); + if (dev_old != NULL) { + udev_device_read_db(dev_old); + udev_device_set_info_loaded(dev_old); + } /* update database, create node and symlinks */ udev_device_update_db(dev); @@ -642,7 +644,8 @@ int udev_event_execute_rules(struct udev_event *event, struct udev_rules *rules) /* remove device node */ if (major(udev_device_get_devnum(dev)) != 0 && strcmp(udev_device_get_action(dev), "remove") == 0) { /* import database entry and delete it */ - udev_device_load_info(dev); + udev_device_read_db(dev); + udev_device_set_info_loaded(dev); udev_device_delete_db(dev); if (udev_device_get_devnode(dev) == NULL) {