diff options
-rw-r--r-- | udev/udev-watch.c | 5 | ||||
-rw-r--r-- | udev/udevd.c | 7 |
2 files changed, 6 insertions, 6 deletions
diff --git a/udev/udev-watch.c b/udev/udev-watch.c index 24688c3b19..33b493d512 100644 --- a/udev/udev-watch.c +++ b/udev/udev-watch.c @@ -142,7 +142,7 @@ void udev_watch_begin(struct udev *udev, struct udev_device *dev) const char *filename; int wd; - if (inotify_fd < 0) + if (inotify_fd < 0 || major(udev_device_get_devnum(dev)) == 0) return; wd = inotify_add_watch(inotify_fd, udev_device_get_devnode(dev), IN_CLOSE_WRITE); @@ -163,6 +163,9 @@ void udev_watch_clear(struct udev *udev, struct udev_device *dev) DIR *dir; struct dirent *ent; + if (inotify_fd < 0 || major(udev_device_get_devnum(dev)) == 0) + return; + util_strlcpy(filename, udev_get_dev_path(udev), sizeof(filename)); util_strlcat(filename, "/.udev/watch", sizeof(filename)); diff --git a/udev/udevd.c b/udev/udevd.c index 50205f1e43..27e64dae3a 100644 --- a/udev/udevd.c +++ b/udev/udevd.c @@ -216,9 +216,7 @@ static void event_fork(struct udev_event *event) alarm(UDEV_EVENT_TIMEOUT); /* clear any existing udev watch on the node */ - if (inotify_fd != -1 && - major(udev_device_get_devnum(event->dev)) != 0) - udev_watch_clear(event->udev, event->dev); + udev_watch_clear(event->udev, event->dev); /* apply rules, create node, symlinks */ err = udev_event_execute_rules(event, rules); @@ -232,8 +230,7 @@ static void event_fork(struct udev_event *event) udev_event_execute_run(event); /* apply/restore inotify watch */ - if (err == 0 && event->inotify_watch && inotify_fd != -1 && - major(udev_device_get_devnum(event->dev)) != 0 && + if (err == 0 && event->inotify_watch && strcmp(udev_device_get_action(event->dev), "remove") != 0) info(event->udev, "device will be watched for changes\n"); udev_watch_begin(event->udev, event->dev); |