From e079effb35100b94dd9d50e9daf7cbc41317717f Mon Sep 17 00:00:00 2001 From: Takashi Sakamoto Date: Sun, 20 Sep 2026 17:36:59 +0900 Subject: [PATCH] firewire: cdev: refactor add_client_resource() to have release callback function The implementation of the client_resource structure now requires a release callback. Add an argument to add_client_resource() for the release callback. Link: https://lore.kernel.org/r/20260920083659.191855-6-o-takashi@sakamocchi.jp Signed-off-by: Takashi Sakamoto --- drivers/firewire/core-cdev.c | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/drivers/firewire/core-cdev.c b/drivers/firewire/core-cdev.c index 216f8b6ec324..6a2e28b71ba9 100644 --- a/drivers/firewire/core-cdev.c +++ b/drivers/firewire/core-cdev.c @@ -547,7 +547,8 @@ static int ioctl_get_info(struct client *client, union ioctl_arg *arg) return 0; } -static int add_client_resource(struct client *client, struct client_resource *resource) +static int add_client_resource(struct client *client, struct client_resource *resource, + client_resource_release_fn_t release) { scoped_guard(spinlock_irqsave, &client->lock) { u32 index; @@ -561,6 +562,7 @@ static int add_client_resource(struct client *client, struct client_resource *re return ret; resource->handle = index; + resource->release = release; client_get(client); } @@ -705,8 +707,7 @@ static int init_request(struct client *client, goto failed; } - e->r.resource.release = release_transaction; - ret = add_client_resource(client, &e->r.resource); + ret = add_client_resource(client, &e->r.resource, release_transaction); if (ret < 0) goto failed; @@ -789,8 +790,7 @@ static void handle_request(struct fw_card *card, struct fw_request *request, r->data = payload; r->length = length; - r->resource.release = release_request; - ret = add_client_resource(handler->client, &r->resource); + ret = add_client_resource(handler->client, &r->resource, release_request); if (ret < 0) goto failed; @@ -893,8 +893,7 @@ static int ioctl_allocate(struct client *client, union ioctl_arg *arg) } a->offset = r->handler.offset; - r->resource.release = release_address_handler; - ret = add_client_resource(client, &r->resource); + ret = add_client_resource(client, &r->resource, release_address_handler); if (ret < 0) { release_address_handler(client, &r->resource); return ret; @@ -993,8 +992,7 @@ static int ioctl_add_descriptor(struct client *client, union ioctl_arg *arg) if (ret < 0) goto failed; - r->resource.release = release_descriptor; - ret = add_client_resource(client, &r->resource); + ret = add_client_resource(client, &r->resource, release_descriptor); if (ret < 0) { fw_core_remove_descriptor(&r->descriptor); goto failed; @@ -1481,8 +1479,7 @@ static int ioctl_allocate_iso_resource(struct client *client, union ioctl_arg *a e2->iso_resource.closure = request->closure; e2->iso_resource.type = FW_CDEV_EVENT_ISO_RESOURCE_DEALLOCATED; - r->resource.release = release_iso_resource_auto; - err = add_client_resource(client, &r->resource); + err = add_client_resource(client, &r->resource, release_iso_resource_auto); if (err < 0) return err; request->handle = r->resource.handle;