udev-worker: allocate UdevEvent object just before use

No functional change, just refactoring.
This commit is contained in:
Yu Watanabe
2025-05-08 04:46:01 +09:00
parent ecad362d7e
commit 356d44a063
+6 -7
View File
@@ -173,8 +173,6 @@ static int worker_mark_block_device_read_only(sd_device *dev) {
}
static int worker_process_device(UdevWorker *worker, sd_device *dev) {
_cleanup_(udev_event_unrefp) UdevEvent *udev_event = NULL;
_cleanup_close_ int fd_lock = -EBADF;
int r;
assert(worker);
@@ -182,16 +180,12 @@ static int worker_process_device(UdevWorker *worker, sd_device *dev) {
log_device_uevent(dev, "Processing device");
udev_event = udev_event_new(dev, worker, EVENT_UDEV_WORKER);
if (!udev_event)
return -ENOMEM;
udev_event->trace = worker->config.trace;
/* If this is a block device and the device is locked currently via the BSD advisory locks,
* someone else is using it exclusively. We don't run our udev rules now to not interfere.
* Instead of processing the event, we requeue the event and will try again after a delay.
*
* The user-facing side of this: https://systemd.io/BLOCK_DEVICE_LOCKING */
_cleanup_close_ int fd_lock = -EBADF;
r = worker_lock_whole_disk(dev, &fd_lock);
if (r == -EAGAIN) {
log_device_debug(dev, "Block device is currently locked, requeuing the event.");
@@ -215,6 +209,11 @@ static int worker_process_device(UdevWorker *worker, sd_device *dev) {
if (r < 0)
log_device_warning_errno(dev, r, "Failed to remove inotify watch, ignoring: %m");
_cleanup_(udev_event_unrefp) UdevEvent *udev_event = udev_event_new(dev, worker, EVENT_UDEV_WORKER);
if (!udev_event)
return -ENOMEM;
udev_event->trace = worker->config.trace;
/* apply rules, create node, symlinks */
r = udev_event_execute_rules(udev_event, worker->rules);
if (r < 0)