]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
bcachefs: Fix WARN() in bch2_bkey_pick_read_device()
authorKent Overstreet <kent.overstreet@linux.dev>
Fri, 28 Mar 2025 16:35:05 +0000 (12:35 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Fri, 28 Mar 2025 16:35:05 +0000 (12:35 -0400)
syzbot discovered that this one is possible: we have pointers, but none
of them are to valid devices.

Reported-by: syzbot+336a6e6a2dbb7d4dba9a@syzkaller.appspotmail.com
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/errcode.h
fs/bcachefs/extents.c

index 5c8e40dea7119206e757b6358fff6e8f3cc65bc8..c8696f01eb14f670f22278686ec88ee4f33776e6 100644 (file)
        x(BCH_ERR_data_write,           data_write_misaligned)                  \
        x(BCH_ERR_decompress,           data_read)                              \
        x(BCH_ERR_data_read,            no_device_to_read_from)                 \
+       x(BCH_ERR_data_read,            no_devices_valid)                       \
        x(BCH_ERR_data_read,            data_read_io_err)                       \
        x(BCH_ERR_data_read,            data_read_csum_err)                     \
        x(BCH_ERR_data_read,            data_read_retry)                        \
index ae1a1d917805b1704ad6703ac6be88217826952a..ae7c7a177e10b243f08cc4d432a48c2a7ef85808 100644 (file)
@@ -227,8 +227,11 @@ int bch2_bkey_pick_read_device(struct bch_fs *c, struct bkey_s_c k,
        if (have_io_errors)
                return -BCH_ERR_data_read_io_err;
 
-       WARN_ONCE(1, "unhandled error case in %s\n", __func__);
-       return -EINVAL;
+       /*
+        * If we get here, we have pointers (bkey_ptrs_validate() ensures that),
+        * but they don't point to valid devices:
+        */
+       return -BCH_ERR_no_devices_valid;
 }
 
 /* KEY_TYPE_btree_ptr: */