aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/firewire
diff options
context:
space:
mode:
authorStefan Richter <stefanr@s5r6.in-berlin.de>2009-01-11 07:44:46 -0500
committerStefan Richter <stefanr@s5r6.in-berlin.de>2009-03-24 15:56:46 -0400
commit81610b8fbfc027a67707ff567d490819a3d55844 (patch)
treeb828ef4868938534fb17d75659246715179a29f5 /drivers/firewire
parent5d9cb7d276a9c465fef5a771792eac2cf1929f2b (diff)
firewire: cdev: simplify a schedule_delayed_work wrapper
The kernel API documentation says that queue_delayed_work() returns 0 (only) if the work was already queued. The return codes of schedule_delayed_work() are not documented but the same. In init_iso_resource(), the work has never been queued yet, hence we can assume schedule_delayed_work() to be a guaranteed success there. Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
Diffstat (limited to 'drivers/firewire')
-rw-r--r--drivers/firewire/fw-cdev.c18
1 files changed, 6 insertions, 12 deletions
diff --git a/drivers/firewire/fw-cdev.c b/drivers/firewire/fw-cdev.c
index 257b0c709a8b..214e534efee5 100644
--- a/drivers/firewire/fw-cdev.c
+++ b/drivers/firewire/fw-cdev.c
@@ -129,7 +129,7 @@ struct iso_resource {
129 struct iso_resource_event *e_alloc, *e_dealloc; 129 struct iso_resource_event *e_alloc, *e_dealloc;
130}; 130};
131 131
132static int schedule_iso_resource(struct iso_resource *); 132static void schedule_iso_resource(struct iso_resource *);
133static void release_iso_resource(struct client *, struct client_resource *); 133static void release_iso_resource(struct client *, struct client_resource *);
134 134
135/* 135/*
@@ -1111,17 +1111,11 @@ static void iso_resource_work(struct work_struct *work)
1111 client_put(client); 1111 client_put(client);
1112} 1112}
1113 1113
1114static int schedule_iso_resource(struct iso_resource *r) 1114static void schedule_iso_resource(struct iso_resource *r)
1115{ 1115{
1116 int scheduled;
1117
1118 client_get(r->client); 1116 client_get(r->client);
1119 1117 if (!schedule_delayed_work(&r->work, 0))
1120 scheduled = schedule_delayed_work(&r->work, 0);
1121 if (!scheduled)
1122 client_put(r->client); 1118 client_put(r->client);
1123
1124 return scheduled;
1125} 1119}
1126 1120
1127static void release_iso_resource(struct client *client, 1121static void release_iso_resource(struct client *client,
@@ -1173,13 +1167,13 @@ static int init_iso_resource(struct client *client,
1173 if (todo == ISO_RES_ALLOC) { 1167 if (todo == ISO_RES_ALLOC) {
1174 r->resource.release = release_iso_resource; 1168 r->resource.release = release_iso_resource;
1175 ret = add_client_resource(client, &r->resource, GFP_KERNEL); 1169 ret = add_client_resource(client, &r->resource, GFP_KERNEL);
1170 if (ret < 0)
1171 goto fail;
1176 } else { 1172 } else {
1177 r->resource.release = NULL; 1173 r->resource.release = NULL;
1178 r->resource.handle = -1; 1174 r->resource.handle = -1;
1179 ret = schedule_iso_resource(r) ? 0 : -ENOMEM; 1175 schedule_iso_resource(r);
1180 } 1176 }
1181 if (ret < 0)
1182 goto fail;
1183 request->handle = r->resource.handle; 1177 request->handle = r->resource.handle;
1184 1178
1185 return 0; 1179 return 0;