summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@gmail.com>2018-03-28 08:56:42 -0400
committerKent Overstreet <kent.overstreet@gmail.com>2018-05-22 00:44:18 -0400
commit9578fb06b7ecb8448f1b6d86a8585153682d4f99 (patch)
treebc007f228ed68df020131143e28de24339e60f76
parente388237d9452e971b185b459d0e71abac8d3cfdf (diff)
bcachefs: fix should_promote()
-rw-r--r--fs/bcachefs/extents.c8
-rw-r--r--fs/bcachefs/io.c2
2 files changed, 7 insertions, 3 deletions
diff --git a/fs/bcachefs/extents.c b/fs/bcachefs/extents.c
index f73e7562e723..2632aea90dfe 100644
--- a/fs/bcachefs/extents.c
+++ b/fs/bcachefs/extents.c
@@ -160,9 +160,13 @@ bch2_extent_has_target(struct bch_fs *c, struct bkey_s_c_extent e, unsigned targ
{
const struct bch_extent_ptr *ptr;
- extent_for_each_ptr(e, ptr)
- if (dev_in_target(c->devs[ptr->dev], target))
+ extent_for_each_ptr(e, ptr) {
+ struct bch_dev *ca = bch_dev_bkey_exists(c, ptr->dev);
+
+ if (dev_in_target(ca, target) &&
+ (!ptr->cached || !ptr_stale(ca, ptr)))
return ptr;
+ }
return NULL;
}
diff --git a/fs/bcachefs/io.c b/fs/bcachefs/io.c
index 739543fd572a..51a2d8f4b0d4 100644
--- a/fs/bcachefs/io.c
+++ b/fs/bcachefs/io.c
@@ -981,7 +981,7 @@ static bool should_promote(struct bch_fs *c, struct bkey_s_c_extent e,
if (percpu_ref_is_dying(&c->writes))
return false;
- return bch2_extent_has_target(c, e, target);
+ return bch2_extent_has_target(c, e, target) == NULL;
}
/* Read */