]> Pileus Git - ~andy/linux/blobdiff - drivers/md/bcache/super.c
bcache: Allocation kthread fixes
[~andy/linux] / drivers / md / bcache / super.c
index f6a62174e8f6ac6e448e7f259a3bf74fe0392291..547c4c57b052efbb6fcd3df67c4b52c505023606 100644 (file)
@@ -16,6 +16,7 @@
 #include <linux/buffer_head.h>
 #include <linux/debugfs.h>
 #include <linux/genhd.h>
+#include <linux/kthread.h>
 #include <linux/module.h>
 #include <linux/random.h>
 #include <linux/reboot.h>
@@ -1329,11 +1330,9 @@ static void cache_set_free(struct closure *cl)
 static void cache_set_flush(struct closure *cl)
 {
        struct cache_set *c = container_of(cl, struct cache_set, caching);
+       struct cache *ca;
        struct btree *b;
-
-       /* Shut down allocator threads */
-       set_bit(CACHE_SET_STOPPING_2, &c->flags);
-       wake_up_allocators(c);
+       unsigned i;
 
        bch_cache_accounting_destroy(&c->accounting);
 
@@ -1348,6 +1347,10 @@ static void cache_set_flush(struct closure *cl)
                if (btree_node_dirty(b))
                        bch_btree_node_write(b, NULL);
 
+       for_each_cache(ca, c, i)
+               if (ca->alloc_thread)
+                       kthread_stop(ca->alloc_thread);
+
        closure_return(cl);
 }