diff options
author | David Howells <dhowells@redhat.com> | 2014-05-21 10:55:26 -0400 |
---|---|---|
committer | David Howells <dhowells@redhat.com> | 2014-05-23 08:05:22 -0400 |
commit | 656f88ddf1ec3abf2cd20b8b4028c44e8e95f56d (patch) | |
tree | a61e9fc6abc26d076d51615f6933ca1bcf03154f /fs/afs | |
parent | 150a6b478982475c60fa25b7060ab990ece5483d (diff) |
AFS: Pass an afs_call* to call->async_workfn() instead of a work_struct*
call->async_workfn() can take an afs_call* arg rather than a work_struct* as
the functions assigned there are now called from afs_async_workfn() which has
to call container_of() anyway.
Signed-off-by: David Howells <dhowells@redhat.com>
Reviewed-by: Nathaniel Wesley Filardo <nwf@cs.jhu.edu>
Reviewed-by: Tejun Heo <tj@kernel.org>
Diffstat (limited to 'fs/afs')
-rw-r--r-- | fs/afs/internal.h | 2 | ||||
-rw-r--r-- | fs/afs/rxrpc.c | 14 |
2 files changed, 5 insertions, 11 deletions
diff --git a/fs/afs/internal.h b/fs/afs/internal.h index be75b500005d..590b55f46d61 100644 --- a/fs/afs/internal.h +++ b/fs/afs/internal.h | |||
@@ -75,7 +75,7 @@ struct afs_call { | |||
75 | const struct afs_call_type *type; /* type of call */ | 75 | const struct afs_call_type *type; /* type of call */ |
76 | const struct afs_wait_mode *wait_mode; /* completion wait mode */ | 76 | const struct afs_wait_mode *wait_mode; /* completion wait mode */ |
77 | wait_queue_head_t waitq; /* processes awaiting completion */ | 77 | wait_queue_head_t waitq; /* processes awaiting completion */ |
78 | work_func_t async_workfn; | 78 | void (*async_workfn)(struct afs_call *call); /* asynchronous work function */ |
79 | struct work_struct async_work; /* asynchronous work processor */ | 79 | struct work_struct async_work; /* asynchronous work processor */ |
80 | struct work_struct work; /* actual work processor */ | 80 | struct work_struct work; /* actual work processor */ |
81 | struct sk_buff_head rx_queue; /* received packets */ | 81 | struct sk_buff_head rx_queue; /* received packets */ |
diff --git a/fs/afs/rxrpc.c b/fs/afs/rxrpc.c index 5a05014ea7b0..03a3beb17004 100644 --- a/fs/afs/rxrpc.c +++ b/fs/afs/rxrpc.c | |||
@@ -25,7 +25,7 @@ static void afs_wake_up_call_waiter(struct afs_call *); | |||
25 | static int afs_wait_for_call_to_complete(struct afs_call *); | 25 | static int afs_wait_for_call_to_complete(struct afs_call *); |
26 | static void afs_wake_up_async_call(struct afs_call *); | 26 | static void afs_wake_up_async_call(struct afs_call *); |
27 | static int afs_dont_wait_for_call_to_complete(struct afs_call *); | 27 | static int afs_dont_wait_for_call_to_complete(struct afs_call *); |
28 | static void afs_process_async_call(struct work_struct *); | 28 | static void afs_process_async_call(struct afs_call *); |
29 | static void afs_rx_interceptor(struct sock *, unsigned long, struct sk_buff *); | 29 | static void afs_rx_interceptor(struct sock *, unsigned long, struct sk_buff *); |
30 | static int afs_deliver_cm_op_id(struct afs_call *, struct sk_buff *, bool); | 30 | static int afs_deliver_cm_op_id(struct afs_call *, struct sk_buff *, bool); |
31 | 31 | ||
@@ -62,7 +62,7 @@ static void afs_async_workfn(struct work_struct *work) | |||
62 | { | 62 | { |
63 | struct afs_call *call = container_of(work, struct afs_call, async_work); | 63 | struct afs_call *call = container_of(work, struct afs_call, async_work); |
64 | 64 | ||
65 | call->async_workfn(work); | 65 | call->async_workfn(call); |
66 | } | 66 | } |
67 | 67 | ||
68 | /* | 68 | /* |
@@ -623,11 +623,8 @@ static int afs_dont_wait_for_call_to_complete(struct afs_call *call) | |||
623 | /* | 623 | /* |
624 | * delete an asynchronous call | 624 | * delete an asynchronous call |
625 | */ | 625 | */ |
626 | static void afs_delete_async_call(struct work_struct *work) | 626 | static void afs_delete_async_call(struct afs_call *call) |
627 | { | 627 | { |
628 | struct afs_call *call = | ||
629 | container_of(work, struct afs_call, async_work); | ||
630 | |||
631 | _enter(""); | 628 | _enter(""); |
632 | 629 | ||
633 | afs_free_call(call); | 630 | afs_free_call(call); |
@@ -640,11 +637,8 @@ static void afs_delete_async_call(struct work_struct *work) | |||
640 | * - on a multiple-thread workqueue this work item may try to run on several | 637 | * - on a multiple-thread workqueue this work item may try to run on several |
641 | * CPUs at the same time | 638 | * CPUs at the same time |
642 | */ | 639 | */ |
643 | static void afs_process_async_call(struct work_struct *work) | 640 | static void afs_process_async_call(struct afs_call *call) |
644 | { | 641 | { |
645 | struct afs_call *call = | ||
646 | container_of(work, struct afs_call, async_work); | ||
647 | |||
648 | _enter(""); | 642 | _enter(""); |
649 | 643 | ||
650 | if (!skb_queue_empty(&call->rx_queue)) | 644 | if (!skb_queue_empty(&call->rx_queue)) |