bcachefs: bch2_evacuate_bucket() -> bch2_dev_tryget()
authorKent Overstreet <kent.overstreet@linux.dev>
Tue, 30 Apr 2024 19:46:45 +0000 (15:46 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Wed, 8 May 2024 21:29:23 +0000 (17:29 -0400)
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/move.c

index 12bc577354ff0100d1cc20834accfe4d14955d06..c441ce7c92eca4b067b3cb41a76bfa8384feb1e7 100644 (file)
@@ -690,6 +690,10 @@ int bch2_evacuate_bucket(struct moving_context *ctxt,
        struct bpos bp_pos = POS_MIN;
        int ret = 0;
 
+       struct bch_dev *ca = bch2_dev_tryget(c, bucket.inode);
+       if (!ca)
+               return 0;
+
        trace_bucket_evacuate(c, &bucket);
 
        bch2_bkey_buf_init(&sk);
@@ -711,7 +715,7 @@ int bch2_evacuate_bucket(struct moving_context *ctxt,
 
        a = bch2_alloc_to_v4(k, &a_convert);
        dirty_sectors = bch2_bucket_sectors_dirty(*a);
-       bucket_size = bch2_dev_bkey_exists(c, bucket.inode)->mi.bucket_size;
+       bucket_size = ca->mi.bucket_size;
        fragmentation = a->fragmentation_lru;
 
        ret = bch2_btree_write_buffer_tryflush(trans);
@@ -823,6 +827,7 @@ next:
 
        trace_evacuate_bucket(c, &bucket, dirty_sectors, bucket_size, fragmentation, ret);
 err:
+       bch2_dev_put(ca);
        bch2_bkey_buf_exit(&sk, c);
        return ret;
 }