#include "device-handler.h"
#include "cdrom.h"
+/* We set a default monitor buffer size, as we may not process monitor
+ * events while performing device discvoery. systemd uses a 128M buffer, so
+ * we'll do the same here */
+static const int monitor_bufsize = 128 * 1024 * 1024;
+
struct pb_udev {
struct udev *udev;
struct udev_monitor *monitor;
}
if (!(!strcmp(typestr, "disk") || !strcmp(typestr, "partition"))) {
- pb_debug("SKIP %s: invalid type %s\n", name, typestr);
+ pb_log("SKIP %s: invalid type %s\n", name, typestr);
return 0;
}
path = udev_device_get_devpath(dev);
if (path && (strstr(path, "virtual/block/loop")
|| strstr(path, "virtual/block/ram"))) {
- pb_debug("SKIP: %s: ignored (path=%s)\n", name, path);
+ pb_log("SKIP: %s: ignored (path=%s)\n", name, path);
return 0;
}
* petitboot-compatible tray behaviour */
cdrom_init(node);
if (!cdrom_media_present(node)) {
- pb_debug("SKIP: %s: no media present\n", name);
+ pb_log("SKIP: %s: no media present\n", name);
return 0;
}
}
type = udev_device_get_property_value(dev, "ID_FS_TYPE");
if (!type) {
- pb_debug("SKIP: %s: no ID_FS_TYPE property\n", name);
+ pb_log("SKIP: %s: no ID_FS_TYPE property\n", name);
return 0;
}
if (ddev) {
pb_log("SKIP: %s UUID [%s] already present (as %s)\n",
name, uuid, ddev->device->id);
- return -1;
+ return 0;
}
}
return udev_handle_block_add(udev, dev, name);
}
- pb_debug("SKIP %s: unknown subsystem %s\n", name, subsys);
+ pb_log("SKIP %s: unknown subsystem %s\n", name, subsys);
return -1;
}
goto out_err;
}
+ result = udev_monitor_set_receive_buffer_size(m, monitor_bufsize);
+ if (result) {
+ pb_log("udev_monitor_set_rx_bufsize(%d) failed\n",
+ monitor_bufsize);
+ }
+
result = udev_monitor_filter_add_match_subsystem_devtype(m, "block",
NULL);
struct udev_monitor *monitor = arg;
struct udev_device *dev;
const char *action;
- int result;
dev = udev_monitor_receive_device(monitor);
-
if (!dev) {
pb_log("udev_monitor_receive_device failed\n");
return -1;
if (!action) {
pb_log("udev_device_get_action failed\n");
- goto fail;
+ } else {
+ udev_handle_dev_action(dev, action);
}
- result = udev_handle_dev_action(dev, action);
-
udev_device_unref(dev);
- return result;
-
-fail:
- udev_device_unref(dev);
- return -1;
+ return 0;
}
static void udev_log_fn(struct udev __attribute__((unused)) *udev,