]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
bcachefs: Improve bch2_dev_bucket_missing()
authorKent Overstreet <kent.overstreet@linux.dev>
Mon, 28 Apr 2025 16:01:51 +0000 (12:01 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Mon, 28 Apr 2025 20:46:13 +0000 (16:46 -0400)
More useful error message.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/sb-members.c
fs/bcachefs/sb-members.h

index 116131f95815f32f26a1a2c639c294e31f368f93..72779912939b6f0014b6211def00ba2b515b5a11 100644 (file)
@@ -15,9 +15,11 @@ void bch2_dev_missing(struct bch_fs *c, unsigned dev)
                bch2_fs_inconsistent(c, "pointer to nonexistent device %u", dev);
 }
 
-void bch2_dev_bucket_missing(struct bch_fs *c, struct bpos bucket)
+void bch2_dev_bucket_missing(struct bch_dev *ca, u64 bucket)
 {
-       bch2_fs_inconsistent(c, "pointer to nonexistent bucket %llu:%llu", bucket.inode, bucket.offset);
+       bch2_fs_inconsistent(ca->fs,
+               "pointer to nonexistent bucket %llu on device %s (valid range %u-%llu)",
+               bucket, ca->name, ca->mi.first_bucket, ca->mi.nbuckets);
 }
 
 #define x(t, n, ...) [n] = #t,
index 06bb41a3f3605b84e26ed47f16c1cf23f0aaf2de..42786657522ce1e7517f1f70a50c4d6bca295b88 100644 (file)
@@ -249,20 +249,23 @@ static inline struct bch_dev *bch2_dev_tryget(struct bch_fs *c, unsigned dev)
 static inline struct bch_dev *bch2_dev_bucket_tryget_noerror(struct bch_fs *c, struct bpos bucket)
 {
        struct bch_dev *ca = bch2_dev_tryget_noerror(c, bucket.inode);
-       if (ca && !bucket_valid(ca, bucket.offset)) {
+       if (ca && unlikely(!bucket_valid(ca, bucket.offset))) {
                bch2_dev_put(ca);
                ca = NULL;
        }
        return ca;
 }
 
-void bch2_dev_bucket_missing(struct bch_fs *, struct bpos);
+void bch2_dev_bucket_missing(struct bch_dev *, u64);
 
 static inline struct bch_dev *bch2_dev_bucket_tryget(struct bch_fs *c, struct bpos bucket)
 {
-       struct bch_dev *ca = bch2_dev_bucket_tryget_noerror(c, bucket);
-       if (!ca)
-               bch2_dev_bucket_missing(c, bucket);
+       struct bch_dev *ca = bch2_dev_tryget(c, bucket.inode);
+       if (ca && unlikely(!bucket_valid(ca, bucket.offset))) {
+               bch2_dev_bucket_missing(ca, bucket.offset);
+               bch2_dev_put(ca);
+               ca = NULL;
+       }
        return ca;
 }