From: Bhaktipriya Shridhar <bhaktipriy...@gmail.com>

The workqueue "afs_callback_update_worker" queues multiple work items
viz  &vnode->cb_broken_work, &server->cb_break_work which require strict
execution ordering. Hence, an ordered dedicated workqueue has been used.

Since the workqueue is being used on a memory reclaim path, WQ_MEM_RECLAIM
has been set to ensure forward progress under memory pressure.

Signed-off-by: Bhaktipriya Shridhar <bhaktipriy...@gmail.com>
Signed-off-by: David Howells <dhowe...@redhat.com>
---

 fs/afs/callback.c |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/fs/afs/callback.c b/fs/afs/callback.c
index 7ef637d7f3a5..1e9d2f84e5b5 100644
--- a/fs/afs/callback.c
+++ b/fs/afs/callback.c
@@ -461,8 +461,8 @@ static void afs_callback_updater(struct work_struct *work)
  */
 int __init afs_callback_update_init(void)
 {
-       afs_callback_update_worker =
-               create_singlethread_workqueue("kafs_callbackd");
+       afs_callback_update_worker = alloc_ordered_workqueue("kafs_callbackd",
+                                                            WQ_MEM_RECLAIM);
        return afs_callback_update_worker ? 0 : -ENOMEM;
 }
 

Reply via email to