purge_directory() of libsheepdog can call bunch of unlink(2), so it
can cause long request blocking because sheep process calls the
function in its main thread. For avoiding such a problem, this patch
add a new interface for registering workqueue used in util.c of
libsheepdog and let sheep use it.

Cc: Philip Crotwell <[email protected]>
Cc: Masahiro Tsuji <[email protected]>
Signed-off-by: Hitoshi Mitake <[email protected]>
---
 include/util.h | 3 +++
 lib/util.c     | 8 ++++++++
 sheep/sheep.c  | 7 +++++++
 3 files changed, 18 insertions(+)

v2:
 - use ordered workqueue

diff --git a/include/util.h b/include/util.h
index 69e114b..6a513e0 100644
--- a/include/util.h
+++ b/include/util.h
@@ -575,4 +575,7 @@ static inline uint64_t clock_get_time(void)
 
 char *xstrdup(const char *s);
 
+struct work_queue;
+void register_util_wq(struct work_queue *wq);
+
 #endif
diff --git a/lib/util.c b/lib/util.c
index 164f755..82cf28c 100644
--- a/lib/util.c
+++ b/lib/util.c
@@ -21,6 +21,14 @@
 #include <fcntl.h>
 
 #include "util.h"
+#include "work.h"
+
+static struct work_queue *util_wqueue;
+
+void register_util_wq(struct work_queue *wq)
+{
+       util_wqueue = wq;
+}
 
 mode_t sd_def_dmode = S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IWGRP | 
S_IXGRP;
 mode_t sd_def_fmode = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP;
diff --git a/sheep/sheep.c b/sheep/sheep.c
index 328a7fe..2e91d0f 100644
--- a/sheep/sheep.c
+++ b/sheep/sheep.c
@@ -439,6 +439,8 @@ static size_t get_nr_nodes(void)
 
 static int create_work_queues(void)
 {
+       struct work_queue *util_wq;
+
        if (init_work_queue(get_nr_nodes))
                return -1;
 
@@ -462,6 +464,11 @@ static int create_work_queues(void)
            !sys->areq_wqueue)
                        return -1;
 
+       util_wq = create_ordered_work_queue("util");
+       if (!util_wq)
+               return -1;
+       register_util_wq(util_wq);
+
        return 0;
 }
 
-- 
1.8.3.2

-- 
sheepdog mailing list
[email protected]
http://lists.wpkg.org/mailman/listinfo/sheepdog

Reply via email to