]> git.sesse.net Git - bcachefs-tools-debian/blobdiff - libbcachefs/extents.c
cmd_dump: fix error message
[bcachefs-tools-debian] / libbcachefs / extents.c
index a864de231b69e297e85491dfd285928152c467b8..9d8afcb5979a12456c032a00faf5514962b9aa05 100644 (file)
@@ -649,37 +649,31 @@ unsigned bch2_bkey_replicas(struct bch_fs *c, struct bkey_s_c k)
        return replicas;
 }
 
-unsigned bch2_extent_ptr_desired_durability(struct bch_fs *c, struct extent_ptr_decoded *p)
+static inline unsigned __extent_ptr_durability(struct bch_dev *ca, struct extent_ptr_decoded *p)
 {
-       struct bch_dev *ca;
-
        if (p->ptr.cached)
                return 0;
 
-       ca = bch_dev_bkey_exists(c, p->ptr.dev);
-
-       return ca->mi.durability +
-               (p->has_ec
-                ? p->ec.redundancy
-                : 0);
+       return p->has_ec
+               ? p->ec.redundancy + 1
+               : ca->mi.durability;
 }
 
-unsigned bch2_extent_ptr_durability(struct bch_fs *c, struct extent_ptr_decoded *p)
+unsigned bch2_extent_ptr_desired_durability(struct bch_fs *c, struct extent_ptr_decoded *p)
 {
-       struct bch_dev *ca;
+       struct bch_dev *ca = bch_dev_bkey_exists(c, p->ptr.dev);
 
-       if (p->ptr.cached)
-               return 0;
+       return __extent_ptr_durability(ca, p);
+}
 
-       ca = bch_dev_bkey_exists(c, p->ptr.dev);
+unsigned bch2_extent_ptr_durability(struct bch_fs *c, struct extent_ptr_decoded *p)
+{
+       struct bch_dev *ca = bch_dev_bkey_exists(c, p->ptr.dev);
 
        if (ca->mi.state == BCH_MEMBER_STATE_failed)
                return 0;
 
-       return ca->mi.durability +
-               (p->has_ec
-                ? p->ec.redundancy
-                : 0);
+       return __extent_ptr_durability(ca, p);
 }
 
 unsigned bch2_bkey_durability(struct bch_fs *c, struct bkey_s_c k)
@@ -1300,7 +1294,8 @@ unsigned bch2_bkey_ptrs_need_rebalance(struct bch_fs *c, struct bkey_s_c k,
                unsigned i = 0;
 
                bkey_for_each_ptr_decode(k.k, ptrs, p, entry) {
-                       if (p.crc.compression_type == BCH_COMPRESSION_TYPE_incompressible) {
+                       if (p.crc.compression_type == BCH_COMPRESSION_TYPE_incompressible ||
+                           p.ptr.unwritten) {
                                rewrite_ptrs = 0;
                                goto incompressible;
                        }