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 <o-takashi@sakamocchi.jp>
This commit is contained in:
Takashi Sakamoto 2026-09-20 17:36:59 +09:00
parent 4e3f598122
commit e079effb35

View File

@ -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;