From: Tejun Heo <tj@kernel.org>
To: laijs@cn.fujitsu.com
Cc: linux-kernel@vger.kernel.org, Tejun Heo <tj@kernel.org>,
David Howells <dhowells@redhat.com>,
linux-afs@lists.infradead.org
Subject: [PATCH 7/9] afs: don't use PREPARE_WORK
Date: Thu, 20 Feb 2014 15:44:29 -0500 [thread overview]
Message-ID: <1392929071-16555-8-git-send-email-tj@kernel.org> (raw)
In-Reply-To: <1392929071-16555-1-git-send-email-tj@kernel.org>
PREPARE_[DELAYED_]WORK() are being phased out. They have few users
and a nasty surprise in terms of reentrancy guarantee as workqueue
considers work items to be different if they don't have the same work
function.
afs_call->async_work is multiplexed with multiple work functions.
Introduce afs_async_workfn() which invokes afs_call->async_workfn and
always use it as the work function and update the users to set the
->async_workfn field instead of overriding the work function using
PREPARE_WORK().
It would probably be best to route this with other related updates
through the workqueue tree.
Compile tested.
Signed-off-by: Tejun Heo <tj@kernel.org>
Cc: David Howells <dhowells@redhat.com>
Cc: linux-afs@lists.infradead.org
---
fs/afs/internal.h | 1 +
fs/afs/rxrpc.c | 12 ++++++++++--
2 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/fs/afs/internal.h b/fs/afs/internal.h
index 6621f80..be75b50 100644
--- a/fs/afs/internal.h
+++ b/fs/afs/internal.h
@@ -75,6 +75,7 @@ struct afs_call {
const struct afs_call_type *type; /* type of call */
const struct afs_wait_mode *wait_mode; /* completion wait mode */
wait_queue_head_t waitq; /* processes awaiting completion */
+ work_func_t async_workfn;
struct work_struct async_work; /* asynchronous work processor */
struct work_struct work; /* actual work processor */
struct sk_buff_head rx_queue; /* received packets */
diff --git a/fs/afs/rxrpc.c b/fs/afs/rxrpc.c
index 8ad8c2a..ef943df 100644
--- a/fs/afs/rxrpc.c
+++ b/fs/afs/rxrpc.c
@@ -644,7 +644,7 @@ static void afs_process_async_call(struct work_struct *work)
/* we can't just delete the call because the work item may be
* queued */
- PREPARE_WORK(&call->async_work, afs_delete_async_call);
+ call->async_workfn = afs_delete_async_call;
queue_work(afs_async_calls, &call->async_work);
}
@@ -663,6 +663,13 @@ void afs_transfer_reply(struct afs_call *call, struct sk_buff *skb)
call->reply_size += len;
}
+static void afs_async_workfn(struct work_struct *work)
+{
+ struct afs_call *call = container_of(work, struct afs_call, async_work);
+
+ call->async_workfn(work);
+}
+
/*
* accept the backlog of incoming calls
*/
@@ -685,7 +692,8 @@ static void afs_collect_incoming_call(struct work_struct *work)
return;
}
- INIT_WORK(&call->async_work, afs_process_async_call);
+ call->async_workfn = afs_process_async_call;
+ INIT_WORK(&call->async_work, afs_async_workfn);
call->wait_mode = &afs_async_incoming_call;
call->type = &afs_RXCMxxxx;
init_waitqueue_head(&call->waitq);
--
1.8.5.3
next prev parent reply other threads:[~2014-02-20 20:46 UTC|newest]
Thread overview: 75+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-02-20 20:44 [PATCHSET wq/for-3.15] workqueue: remove PREPARE_[DELAYED_]WORK() Tejun Heo
2014-02-20 20:44 ` [PATCH 1/9] wireless/rt2x00: don't use PREPARE_WORK in rt2800usb.c Tejun Heo
2014-03-07 15:26 ` Tejun Heo
2014-02-20 20:44 ` [PATCH 2/9] ps3-vuart: don't use PREPARE_WORK Tejun Heo
2014-02-20 20:44 ` Tejun Heo
2014-02-21 23:19 ` Geoff Levand
2014-02-21 23:19 ` Geoff Levand
2014-02-20 20:44 ` [PATCH 3/9] floppy: don't use PREPARE_[DELAYED_]WORK Tejun Heo
2014-02-21 9:37 ` Jiri Kosina
2014-02-20 20:44 ` [PATCH 4/9] firewire: don't use PREPARE_DELAYED_WORK Tejun Heo
2014-02-20 20:44 ` Tejun Heo
2014-02-21 1:44 ` Peter Hurley
2014-02-21 1:59 ` Tejun Heo
2014-02-21 2:07 ` Peter Hurley
2014-02-21 2:07 ` Peter Hurley
2014-02-21 2:13 ` Tejun Heo
2014-02-21 5:13 ` Peter Hurley
2014-02-21 10:03 ` Tejun Heo
2014-02-21 12:51 ` Peter Hurley
2014-02-21 12:51 ` Peter Hurley
2014-02-21 13:06 ` Tejun Heo
2014-02-21 16:53 ` Peter Hurley
2014-02-21 16:57 ` Tejun Heo
2014-02-21 23:01 ` Peter Hurley
2014-02-21 23:18 ` Tejun Heo
2014-02-21 23:46 ` Peter Hurley
2014-02-22 14:38 ` Tejun Heo
2014-02-22 14:38 ` Tejun Heo
2014-02-22 14:48 ` Peter Hurley
2014-02-22 18:43 ` James Bottomley
2014-02-22 18:48 ` Peter Hurley
2014-02-22 18:48 ` Peter Hurley
2014-02-22 18:52 ` James Bottomley
2014-02-22 19:03 ` Peter Hurley
2014-02-22 19:03 ` Peter Hurley
2014-02-23 1:23 ` memory-barriers.txt again (was Re: [PATCH 4/9] firewire: don't use PREPARE_DELAYED_WORK) Stefan Richter
2014-02-23 16:37 ` Paul E. McKenney
2014-02-23 16:37 ` Paul E. McKenney
2014-02-23 20:35 ` Peter Hurley
2014-02-23 23:50 ` Paul E. McKenney
2014-02-24 0:09 ` Peter Hurley
2014-02-24 16:26 ` Paul E. McKenney
2014-02-24 16:26 ` Paul E. McKenney
2014-02-24 0:32 ` Stefan Richter
2014-02-24 16:27 ` Paul E. McKenney
2014-02-23 20:05 ` [PATCH 4/9] firewire: don't use PREPARE_DELAYED_WORK James Bottomley
2014-02-23 22:32 ` Peter Hurley
2014-02-21 20:45 ` Stefan Richter
2014-02-21 20:45 ` Stefan Richter
2014-03-05 21:34 ` Stefan Richter
2014-03-07 15:18 ` Tejun Heo
2014-03-07 15:26 ` [PATCH UPDATED " Tejun Heo
2014-03-07 15:26 ` Tejun Heo
2014-02-20 20:44 ` [PATCH 5/9] usb: " Tejun Heo
2014-02-20 20:59 ` Greg Kroah-Hartman
2014-02-21 15:06 ` Alan Stern
2014-02-21 15:07 ` Tejun Heo
2014-02-22 14:59 ` [PATCH v2 " Tejun Heo
2014-02-22 15:14 ` Alan Stern
2014-02-22 15:20 ` Peter Hurley
2014-02-22 15:37 ` Tejun Heo
2014-02-22 23:03 ` Alan Stern
2014-02-23 4:29 ` Tejun Heo
2014-02-20 20:44 ` [PATCH 6/9] nvme: don't use PREPARE_WORK Tejun Heo
2014-02-20 20:44 ` Tejun Heo
2014-03-07 15:26 ` Tejun Heo
2014-03-07 15:26 ` Tejun Heo
2014-02-20 20:44 ` Tejun Heo [this message]
2014-02-20 22:00 ` [PATCH 7/9] afs: " David Howells
2014-02-20 22:46 ` Tejun Heo
2014-03-07 15:27 ` Tejun Heo
2014-02-20 20:44 ` [PATCH 8/9] staging/fwserial: " Tejun Heo
2014-02-21 15:13 ` Peter Hurley
2014-02-20 20:44 ` [PATCH 9/9] workqueue: remove PREPARE_[DELAYED_]WORK() Tejun Heo
2014-03-07 15:27 ` Tejun Heo
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1392929071-16555-8-git-send-email-tj@kernel.org \
--to=tj@kernel.org \
--cc=dhowells@redhat.com \
--cc=laijs@cn.fujitsu.com \
--cc=linux-afs@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.