Thread (2 messages) 2 messages, 2 authors, 2017-06-08

Re: [PATCH] bcache: gc does not work when triggering by manual command

From: Coly Li <hidden>
Date: 2017-06-08 15:53:51

On 2017/6/8 下午2:39, tang.junhui@zte.com.cn wrote:
From: Tang Junhui <redacted>

I try to execute the following command to trigger gc thread:
[root@localhost internal]# echo 1 > trigger_gc
But it does not work, I debug the code in gc_should_run(), It works only
if in invalidating or sectors_to_gc < 0. So set sectors_to_gc to -1 to
meet the condition when we trigger gc by manual command.

Signed-off-by: Tang Junhui <redacted>
This fix may make things more complicated. First we need to know why
when writeback cashe is full but sectors_to_gc < 0 ? If we don't find
out the root reason, this fix is not convinced.

Thanks.

Coly

quoted hunk ↗ jump to hunk
---
 drivers/md/bcache/btree.h | 6 ++++++
 drivers/md/bcache/sysfs.c | 2 +-
 2 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/drivers/md/bcache/btree.h b/drivers/md/bcache/btree.h
index 9b80417..bab07d4 100644
--- a/drivers/md/bcache/btree.h
+++ b/drivers/md/bcache/btree.h
@@ -263,6 +263,12 @@ static inline void wake_up_gc(struct cache_set *c)
 	wake_up(&c->gc_wait);
 }
 
+static inline void wake_up_gc_force(struct cache_set *c)
+{
+	atomic_set(&c->sectors_to_gc, -1);
+	wake_up(&c->gc_wait);
+}
+
 #define MAP_DONE	0
 #define MAP_CONTINUE	1
 
diff --git a/drivers/md/bcache/sysfs.c b/drivers/md/bcache/sysfs.c
index b3ff57d..5fdb86c 100644
--- a/drivers/md/bcache/sysfs.c
+++ b/drivers/md/bcache/sysfs.c
@@ -615,7 +615,7 @@ STORE(__bch_cache_set)
 	}
 
 	if (attr == &sysfs_trigger_gc)
-		wake_up_gc(c);
+		wake_up_gc_force(c);
 
 	if (attr == &sysfs_prune_cache) {
 		struct shrink_control sc;
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help