mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
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:
parent
4e3f598122
commit
e079effb35
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user