summaryrefslogtreecommitdiff
path: root/libbcachefs/io.c
diff options
context:
space:
mode:
Diffstat (limited to 'libbcachefs/io.c')
-rw-r--r--libbcachefs/io.c29
1 files changed, 19 insertions, 10 deletions
diff --git a/libbcachefs/io.c b/libbcachefs/io.c
index 3369a2ff..e045eb20 100644
--- a/libbcachefs/io.c
+++ b/libbcachefs/io.c
@@ -262,16 +262,17 @@ static void bch2_write_index(struct closure *cl)
if (test_bit(ptr->dev, op->failed.d))
bch2_extent_drop_ptr(e, ptr);
- ret = bch2_extent_nr_ptrs(e.c)
- ? bch2_check_mark_super(c, e.c, BCH_DATA_USER)
- : -EIO;
- if (ret) {
- keys->top = keys->keys;
- op->error = ret;
- op->flags |= BCH_WRITE_DONE;
+ if (!bch2_extent_nr_ptrs(e.c)) {
+ ret = -EIO;
goto err;
}
+ if (!(op->flags & BCH_WRITE_NOMARK_REPLICAS)) {
+ ret = bch2_check_mark_super(c, e.c, BCH_DATA_USER);
+ if (ret)
+ goto err;
+ }
+
dst = bkey_next(dst);
}
@@ -290,7 +291,7 @@ static void bch2_write_index(struct closure *cl)
op->error = ret;
}
}
-err:
+out:
bch2_open_bucket_put_refs(c, &op->open_buckets_nr, op->open_buckets);
if (!(op->flags & BCH_WRITE_DONE))
@@ -304,6 +305,12 @@ err:
} else {
continue_at_nobarrier(cl, bch2_write_done, NULL);
}
+ return;
+err:
+ keys->top = keys->keys;
+ op->error = ret;
+ op->flags |= BCH_WRITE_DONE;
+ goto out;
}
static void bch2_write_endio(struct bio *bio)
@@ -351,7 +358,6 @@ static void init_append_extent(struct bch_write_op *op,
bch2_extent_crc_append(e, crc);
bch2_alloc_sectors_append_ptrs(op->c, wp, e, crc.compressed_size);
- bkey_extent_set_cached(&e->k, (op->flags & BCH_WRITE_CACHED));
bch2_keylist_push(&op->insert_keys);
}
@@ -1298,7 +1304,10 @@ int __bch2_read_extent(struct bch_fs *c, struct bch_read_bio *orig,
struct bpos pos = bkey_start_pos(e.k);
int ret = 0;
- PTR_BUCKET(pick->ca, &pick->ptr)->prio[READ] = c->prio_clock[READ].hand;
+ lg_local_lock(&c->usage_lock);
+ bucket_io_clock_reset(c, pick->ca,
+ PTR_BUCKET_NR(pick->ca, &pick->ptr), READ);
+ lg_local_unlock(&c->usage_lock);
narrow_crcs = should_narrow_crcs(e, pick, flags);