X-Git-Url: http://git.ozlabs.org/?p=petitboot;a=blobdiff_plain;f=discover%2Fudev.c;h=28357c7e1b0b0441952aab16646ee1d1d67395c9;hp=bd7c6bd1abb28f2038fb828e2253fc665632f661;hb=ee86a0bd989511319adf3467b41b5b2e1f486aa6;hpb=dbb6ce1119c8fc1f30bb18062b5ab3d6260bb0b1 diff --git a/discover/udev.c b/discover/udev.c index bd7c6bd..28357c7 100644 --- a/discover/udev.c +++ b/discover/udev.c @@ -1,17 +1,19 @@ #define _GNU_SOURCE -#include +#include #include +#include +#include #include -#include -#include #include +#include #include +#include #include #include -#include +#include #include "event.h" #include "udev.h" @@ -54,6 +56,7 @@ static void udev_handle_message(struct udev *udev, char *buf, int len) { int result; struct event *event; + const char *devpath; event = talloc(udev, struct event); event->type = EVENT_TYPE_UDEV; @@ -66,7 +69,17 @@ static void udev_handle_message(struct udev *udev, char *buf, int len) return; udev_print_event(event); - device_handler_event(udev->handler, event); + + /* Ignore ram, loop, and devices with no DEVNAME. */ + + devpath = event_get_param(event, "DEVPATH"); + + if (event_get_param(event, "DEVNAME") + && !strstr(devpath, "virtual/block/loop") + && !strstr(devpath, "virtual/block/ram")) { + device_handler_event(udev->handler, event); + } + talloc_free(event); return; @@ -144,7 +157,16 @@ out_err: int udev_trigger(struct udev __attribute__((unused)) *udev) { - int rc = system("/sbin/udevadm trigger --subsystem-match=block --action=add"); + const char *cmd[] = { + pb_system_apps.udevadm, + "trigger", + "--subsystem-match=block", + "--action=add", + NULL, + }; + int rc; + + rc = pb_run_cmd(cmd, 1, 0); if (rc) pb_log("udev trigger failed: %d (%d)\n", rc, WEXITSTATUS(rc));