X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=udev_device.c;h=b356f163a5b6f43a259445486fb67d6a6dd5700a;hb=7ba2d2e6ae70964b68056283fcea209cb4b617ec;hp=14c8d39cf7b45110ed25317393cf6b55064951df;hpb=a4d5ca644ed8bc59274967c17981d7448a075c07;p=elogind.git diff --git a/udev_device.c b/udev_device.c index 14c8d39cf..b356f163a 100644 --- a/udev_device.c +++ b/udev_device.c @@ -114,7 +114,10 @@ int udev_device_event(struct udev_rules *rules, struct udevice *udev) /* add device node */ if (major(udev->devt) != 0 && strcmp(udev->action, "add") == 0) { + struct udevice *udev_old; + dbg("device node add '%s'", udev->dev->devpath); + udev_rules_get_name(rules, udev); if (udev->ignore_device) { info("device event will be ignored"); @@ -124,8 +127,19 @@ int udev_device_event(struct udev_rules *rules, struct udevice *udev) info("device node creation supressed"); goto exit; } - /* create node, store in db */ - retval = udev_node_add(udev); + + /* read current database entry, we may want to cleanup symlinks */ + udev_old = udev_device_init(); + if (udev_old != NULL) { + if (udev_db_get_device(udev_old, udev->dev->devpath) == 0) { + info("device '%s' already known, remove possible symlinks", udev->dev->devpath); + udev_node_remove_symlinks(udev_old); + } + udev_device_cleanup(udev_old); + } + + /* create node and symlinks, store record in database */ + retval = udev_node_add(udev, udev_old); if (retval == 0) udev_db_add_device(udev); goto exit; @@ -149,6 +163,9 @@ int udev_device_event(struct udev_rules *rules, struct udevice *udev) goto exit; info("renamed netif to '%s'", udev->name); + /* export old name */ + setenv("INTERFACE_OLD", udev->dev->kernel_name, 1); + /* now fake the devpath, because the kernel name changed silently */ pos = strrchr(udev->dev->devpath, '/'); if (pos != NULL) {