]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
bcachefs: bch2_alloc_sectors_append_ptrs() now takes cached flag
authorKent Overstreet <kent.overstreet@gmail.com>
Sun, 26 Dec 2021 02:14:49 +0000 (21:14 -0500)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:09:20 +0000 (17:09 -0400)
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/alloc_foreground.c
fs/bcachefs/alloc_foreground.h
fs/bcachefs/btree_update_interior.c
fs/bcachefs/io.c

index e38ee6bf0c464c713ce6e33868acb9990449e23c..af651dd9a36f34799b0a73f266adcbd45dc12f94 100644 (file)
@@ -866,7 +866,8 @@ err:
  * as allocated out of @ob
  */
 void bch2_alloc_sectors_append_ptrs(struct bch_fs *c, struct write_point *wp,
-                                   struct bkey_i *k, unsigned sectors)
+                                   struct bkey_i *k, unsigned sectors,
+                                   bool cached)
 
 {
        struct open_bucket *ob;
@@ -877,13 +878,14 @@ void bch2_alloc_sectors_append_ptrs(struct bch_fs *c, struct write_point *wp,
 
        open_bucket_for_each(c, &wp->ptrs, ob, i) {
                struct bch_dev *ca = bch_dev_bkey_exists(c, ob->ptr.dev);
-               struct bch_extent_ptr tmp = ob->ptr;
+               struct bch_extent_ptr ptr = ob->ptr;
 
-               tmp.cached = !ca->mi.durability &&
-                       wp->type == BCH_DATA_user;
+               ptr.cached = cached ||
+                       (!ca->mi.durability &&
+                        wp->type == BCH_DATA_user);
 
-               tmp.offset += ca->mi.bucket_size - ob->sectors_free;
-               bch2_bkey_append_ptr(k, tmp);
+               ptr.offset += ca->mi.bucket_size - ob->sectors_free;
+               bch2_bkey_append_ptr(k, ptr);
 
                BUG_ON(sectors > ob->sectors_free);
                ob->sectors_free -= sectors;
index 2e81712ba8d1f727ab1d068df1505552a352d617..d8888785676d85c6c7b4944462c046895b28e731 100644 (file)
@@ -106,7 +106,7 @@ struct write_point *bch2_alloc_sectors_start(struct bch_fs *,
                                             struct closure *);
 
 void bch2_alloc_sectors_append_ptrs(struct bch_fs *, struct write_point *,
-                                   struct bkey_i *, unsigned);
+                                   struct bkey_i *, unsigned, bool);
 void bch2_alloc_sectors_done(struct bch_fs *, struct write_point *);
 
 void bch2_open_buckets_stop_dev(struct bch_fs *, struct bch_dev *,
index fd4089d19ad2ef60350ee903f1707078af0298e6..6ef0711431a1f13fdd30e42b32d23fe19e3c793a 100644 (file)
@@ -236,7 +236,7 @@ retry:
        }
 
        bkey_btree_ptr_v2_init(&tmp.k);
-       bch2_alloc_sectors_append_ptrs(c, wp, &tmp.k, btree_sectors(c));
+       bch2_alloc_sectors_append_ptrs(c, wp, &tmp.k, btree_sectors(c), false);
 
        bch2_open_bucket_get(c, wp, &ob);
        bch2_alloc_sectors_done(c, wp);
index 649373acde734860255d62221f75d91735647faf..d69e63e519bf988967a6e2b7654c239dd3c6a80a 100644 (file)
@@ -746,7 +746,6 @@ static void init_append_extent(struct bch_write_op *op,
                               struct bch_extent_crc_unpacked crc)
 {
        struct bkey_i_extent *e;
-       struct bch_extent_ptr *ptr;
 
        op->pos.offset += crc.uncompressed_size;
 
@@ -760,11 +759,8 @@ static void init_append_extent(struct bch_write_op *op,
            crc.nonce)
                bch2_extent_crc_append(&e->k_i, crc);
 
-       bch2_alloc_sectors_append_ptrs(op->c, wp, &e->k_i, crc.compressed_size);
-
-       if (op->flags & BCH_WRITE_CACHED)
-               extent_for_each_ptr(extent_i_to_s(e), ptr)
-                       ptr->cached = true;
+       bch2_alloc_sectors_append_ptrs(op->c, wp, &e->k_i, crc.compressed_size,
+                                      op->flags & BCH_WRITE_CACHED);
 
        bch2_keylist_push(&op->insert_keys);
 }