[PATCH 3/3] firewire: core: cancel using delayed work for iso_resource_once management

Takashi Sakamoto <[email protected]> Wed, 20 May 2026 22:08:40 +0900
Newsgroups gmane.linux.kernel.firewire.devel,gmane.linux.kernel
Message-ID <[email protected]>
There is no need to use deferrable type of work for iso_resource_once
management because the work is queued to run immediately.

Signed-off-by: Takashi Sakamoto <[email protected]>
---
 drivers/firewire/core-cdev.c | 11 +++++------
 1 file changed, 5 insertions(+), 6 deletions(-)

diff --git a/drivers/firewire/core-cdev.c b/drivers/firewire/core-cdev.c
index 56c21cabc20c..e49d8a58be09 100644
--- a/drivers/firewire/core-cdev.c
+++ b/drivers/firewire/core-cdev.c
@@ -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;
 
-- 
2.53.0