summaryrefslogtreecommitdiff
path: root/libbcache/super-io.h
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2017-03-09 08:27:30 -0900
committerKent Overstreet <kent.overstreet@gmail.com>2017-03-09 09:14:11 -0900
commitac1b32acb4ca8c59c0e4911a8d3b27fd72dc54af (patch)
treee73a6ea5ddb6f3ece6a3e6c069ffa9ecc5e1ee44 /libbcache/super-io.h
parenta17f7bcec7ed810a247c24e56229af8f43a9a6ae (diff)
cmd_device_fail
Add a comamnd for setting a device as failed, update bcache sources
Diffstat (limited to 'libbcache/super-io.h')
-rw-r--r--libbcache/super-io.h16
1 files changed, 13 insertions, 3 deletions
diff --git a/libbcache/super-io.h b/libbcache/super-io.h
index ae1e8b9d..21ba6e07 100644
--- a/libbcache/super-io.h
+++ b/libbcache/super-io.h
@@ -129,17 +129,27 @@ static inline bool bch_check_super_marked(struct cache_set *c,
struct bkey_s_c_extent e = bkey_i_to_s_c_extent(k);
const struct bch_extent_ptr *ptr;
struct cache_member_cpu *mi = cache_member_info_get(c)->m;
+ unsigned nr_replicas = 0;
bool ret = true;
- extent_for_each_ptr(e, ptr)
- if (!ptr->cached &&
- !(meta
+ extent_for_each_ptr(e, ptr) {
+ if (ptr->cached)
+ continue;
+
+ if (!(meta
? mi[ptr->dev].has_metadata
: mi[ptr->dev].has_data)) {
ret = false;
break;
}
+ nr_replicas++;
+ }
+
+ if (nr_replicas <
+ (meta ? c->sb.meta_replicas_have : c->sb.data_replicas_have))
+ ret = false;
+
cache_member_info_put();
return ret;