]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
firewire: core: cancel using delayed work for iso_resource_once management
authorTakashi Sakamoto <o-takashi@sakamocchi.jp>
Wed, 20 May 2026 13:08:40 +0000 (22:08 +0900)
committerTakashi Sakamoto <o-takashi@sakamocchi.jp>
Thu, 21 May 2026 09:43:25 +0000 (18:43 +0900)
There is no need to use deferrable type of work for iso_resource_once
management because the work is queued to run immediately.

Link: https://lore.kernel.org/r/20260520130840.629934-4-o-takashi@sakamocchi.jp
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
drivers/firewire/core-cdev.c

index 56c21cabc20cdfc2f27c0a878d8c2403fe71eff9..e49d8a58be09ed89d1199c48d79d7500d708d0ec 100644 (file)
@@ -150,8 +150,7 @@ struct iso_resource_auto {
 
 struct iso_resource_once {
        struct client *client;
-       // Schedule work and access todo only with client->lock held.
-       struct delayed_work work;
+       struct work_struct work;
        enum {
                ISO_RES_ONCE_ALLOC,
                ISO_RES_ONCE_DEALLOC,
@@ -1486,7 +1485,7 @@ static int ioctl_deallocate_iso_resource(struct client *client,
 
 static void iso_resource_once_work(struct work_struct *work)
 {
-       struct iso_resource_once *r = from_work(r, work, work.work);
+       struct iso_resource_once *r = from_work(r, work, work);
        struct client *client = r->client;
        struct iso_resource_event *e = r->event;
        int generation, channel, bandwidth;
@@ -1505,7 +1504,7 @@ static void iso_resource_once_work(struct work_struct *work)
 
        queue_event(client, &e->event, &e->iso_resource, sizeof(e->iso_resource), NULL, 0);
 
-       cancel_delayed_work(&r->work);
+       cancel_work(&r->work);
        kfree(r);
 
        client_put(client);
@@ -1525,7 +1524,7 @@ static int init_iso_resource_once(struct client *client,
        if (err < 0)
                return err;
 
-       INIT_DELAYED_WORK(&r->work, iso_resource_once_work);
+       INIT_WORK(&r->work, iso_resource_once_work);
        r->client = client;
        r->todo = todo;
 
@@ -1539,7 +1538,7 @@ static int init_iso_resource_once(struct client *client,
        // Keep the client until work item finishing.
        client_get(r->client);
 
-       queue_delayed_work(fw_workqueue, &no_free_ptr(r)->work, 0);
+       queue_work(fw_workqueue, &no_free_ptr(r)->work);
 
        request->handle = UNAVAILABLE_HANDLE;