From: Kay Sievers Date: Wed, 11 Aug 2010 12:34:32 +0000 (+0200) Subject: do not rename the database on device rename X-Git-Tag: 174~378 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=ebd189621f4b7e0034ea7a7067199bc9a0f28145 do not rename the database on device rename Harald Hoyer discovered some incorrect behavior while debugging problems with network interface renaming: Udev events might be queued for devices which are renamed. A new device registered the same time may claime the old name and create a database entry for it. The current rename logic would move over this databse entry to the wrong device. --- diff --git a/Makefile.am b/Makefile.am index e80d43abe..c16b2594d 100644 --- a/Makefile.am +++ b/Makefile.am @@ -30,7 +30,7 @@ CLEANFILES = # libudev # ------------------------------------------------------------------------------ LIBUDEV_CURRENT=9 -LIBUDEV_REVISION=0 +LIBUDEV_REVISION=1 LIBUDEV_AGE=9 SUBDIRS += libudev/docs diff --git a/libudev/libudev-device-private.c b/libudev/libudev-device-private.c index 8c8ac244b..a4b2fb016 100644 --- a/libudev/libudev-device-private.c +++ b/libudev/libudev-device-private.c @@ -177,19 +177,3 @@ int udev_device_delete_db(struct udev_device *udev_device) unlink(filename); return 0; } - -int udev_device_rename_db(struct udev_device *udev_device) -{ - struct udev *udev = udev_device_get_udev(udev_device); - char filename_old[UTIL_PATH_SIZE]; - char filename[UTIL_PATH_SIZE]; - - if (strcmp(udev_device_get_sysname(udev_device), udev_device_get_sysname_old(udev_device)) == 0) - return 0; - - util_strscpyl(filename_old, sizeof(filename_old), udev_get_dev_path(udev), "/.udev/db/", - udev_device_get_subsystem(udev_device), ":", udev_device_get_sysname_old(udev_device), NULL); - util_strscpyl(filename, sizeof(filename), udev_get_dev_path(udev), "/.udev/db/", - udev_device_get_subsystem(udev_device), ":", udev_device_get_sysname(udev_device), NULL); - return rename(filename_old, filename); -} diff --git a/libudev/libudev-private.h b/libudev/libudev-private.h index 475f992ba..7ed4afc42 100644 --- a/libudev/libudev-private.h +++ b/libudev/libudev-private.h @@ -104,7 +104,6 @@ void udev_device_set_info_loaded(struct udev_device *device); /* libudev-device-private.c */ int udev_device_update_db(struct udev_device *udev_device); int udev_device_delete_db(struct udev_device *udev_device); -int udev_device_rename_db(struct udev_device *udev_device); int udev_device_tag_index(struct udev_device *dev, struct udev_device *dev_old, bool add); /* libudev-monitor.c - netlink/unix socket communication */ diff --git a/libudev/libudev-queue-private.c b/libudev/libudev-queue-private.c index 6109837f7..06dc2f5e0 100644 --- a/libudev/libudev-queue-private.c +++ b/libudev/libudev-queue-private.c @@ -423,17 +423,6 @@ static void update_failed(struct udev_queue_export *udev_queue_export, break; case DEVICE_FINISHED: - if (udev_device_get_sysname_old(udev_device) != NULL && - strcmp(udev_device_get_sysname_old(udev_device), udev_device_get_sysname(udev_device)) != 0) { - /* "move" event - rename failed file to current name, do not delete failed */ - char filename_old[UTIL_PATH_SIZE]; - - util_strscpyl(filename_old, sizeof(filename_old), udev_get_dev_path(udev), "/.udev/failed/", - udev_device_get_subsystem(udev_device), ":", udev_device_get_sysname_old(udev_device), NULL); - if (rename(filename_old, filename) == 0) - info(udev, "renamed devpath, moved failed state of '%s' to %s'\n", - udev_device_get_devpath_old(udev_device), udev_device_get_devpath(udev_device)); - } break; } diff --git a/udev/udev-event.c b/udev/udev-event.c index 1ecf82423..9b5326bf2 100644 --- a/udev/udev-event.c +++ b/udev/udev-event.c @@ -534,14 +534,6 @@ int udev_event_execute_rules(struct udev_event *event, struct udev_rules *rules) struct udev_device *dev = event->dev; int err = 0; - if (udev_device_get_sysname_old(dev) != NULL && - strcmp(udev_device_get_sysname_old(dev), udev_device_get_sysname(dev)) != 0) { - udev_device_rename_db(dev); - info(event->udev, "moved database from '%s:%s' to '%s:%s'\n", - udev_device_get_subsystem(dev), udev_device_get_sysname_old(dev), - udev_device_get_subsystem(dev), udev_device_get_sysname(dev)); - } - if (strcmp(udev_device_get_action(dev), "remove") == 0) { udev_device_read_db(dev); udev_device_delete_db(dev);