summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKay Sievers <kay.sievers@vrfy.org>2010-08-11 14:34:32 +0200
committerKay Sievers <kay.sievers@vrfy.org>2010-08-11 14:34:32 +0200
commitebd189621f4b7e0034ea7a7067199bc9a0f28145 (patch)
tree0aa9b39dd7ab5c545fb1294bbea172da7493541b
parentce9a42bec40330d0a0c83d21f07177cb2d08f1ac (diff)
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.
-rw-r--r--Makefile.am2
-rw-r--r--libudev/libudev-device-private.c16
-rw-r--r--libudev/libudev-private.h1
-rw-r--r--libudev/libudev-queue-private.c11
-rw-r--r--udev/udev-event.c8
5 files changed, 1 insertions, 37 deletions
diff --git a/Makefile.am b/Makefile.am
index e80d43abe5..c16b2594d4 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 8c8ac244be..a4b2fb0169 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 475f992ba7..7ed4afc42c 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 6109837f7e..06dc2f5e0e 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 1ecf82423f..9b5326bf22 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);