Signed-off-by: Kent Overstreet <kent.overstr...@gmail.com>
---
 drivers/md/bcache/closure.h | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/drivers/md/bcache/closure.h b/drivers/md/bcache/closure.h
index c88cdc4ae4..376c5e659c 100644
--- a/drivers/md/bcache/closure.h
+++ b/drivers/md/bcache/closure.h
@@ -245,7 +245,7 @@ static inline void closure_queue(struct closure *cl)
                     != offsetof(struct work_struct, func));
        if (wq) {
                INIT_WORK(&cl->work, cl->work.func);
-               BUG_ON(!queue_work(wq, &cl->work));
+               queue_work(wq, &cl->work);
        } else
                cl->fn(cl);
 }
@@ -340,8 +340,13 @@ do {                                                       
                \
  */
 #define continue_at_nobarrier(_cl, _fn, _wq)                           \
 do {                                                                   \
-       set_closure_fn(_cl, _fn, _wq);                                  \
-       closure_queue(_cl);                                             \
+       closure_set_ip(_cl);                                            \
+       if (_wq) {                                                      \
+               INIT_WORK(&(_cl)->work, (void *) _fn);                  \
+               queue_work((_wq), &(_cl)->work);                        \
+       } else {                                                        \
+               (_fn)(_cl);                                             \
+       }                                                               \
 } while (0)
 
 /**
-- 
2.20.1

Reply via email to