]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
bcachefs: Invalid devices are now checked for by fsck, not .invalid methods
authorKent Overstreet <kent.overstreet@linux.dev>
Wed, 1 May 2024 23:15:29 +0000 (19:15 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Thu, 9 May 2024 20:23:36 +0000 (16:23 -0400)
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/extents.c
fs/bcachefs/journal_io.c

index b785712ae9b266591b1af1ca817dabc75a99424f..094caf1cdb35b29220162f5ee3d24519294b16a8 100644 (file)
@@ -1101,22 +1101,8 @@ static int extent_ptr_invalid(struct bch_fs *c,
                              bool metadata,
                              struct printbuf *err)
 {
-       struct bkey_ptrs_c ptrs = bch2_bkey_ptrs_c(k);
        int ret = 0;
 
-       if (!bch2_dev_exists(c, ptr->dev)) {
-               /*
-                * If we're in the write path this key might have already been
-                * overwritten, and we could be seeing a device that doesn't
-                * exist anymore due to racing with device removal:
-                */
-               if (flags & BKEY_INVALID_WRITE)
-                       return 0;
-
-               bkey_fsck_err(c, err, ptr_to_invalid_device,
-                          "pointer to invalid device (%u)", ptr->dev);
-       }
-
        rcu_read_lock();
        struct bch_dev *ca = bch2_dev_rcu(c, ptr->dev);
        if (!ca) {
@@ -1130,6 +1116,7 @@ static int extent_ptr_invalid(struct bch_fs *c,
        unsigned bucket_size    = ca->mi.bucket_size;
        rcu_read_unlock();
 
+       struct bkey_ptrs_c ptrs = bch2_bkey_ptrs_c(k);
        bkey_for_each_ptr(ptrs, ptr2)
                bkey_fsck_err_on(ptr != ptr2 && ptr->dev == ptr2->dev, c, err,
                                 ptr_to_duplicate_device,
index d3bc5df0f3de5c820ece071140ee849326fa1137..56f4d46ef094154c1821ab4766358bf417edcd41 100644 (file)
@@ -690,7 +690,6 @@ static int journal_entry_dev_usage_validate(struct bch_fs *c,
                container_of(entry, struct jset_entry_dev_usage, entry);
        unsigned bytes = jset_u64s(le16_to_cpu(entry->u64s)) * sizeof(u64);
        unsigned expected = sizeof(*u);
-       unsigned dev;
        int ret = 0;
 
        if (journal_entry_err_on(bytes < expected,
@@ -702,16 +701,6 @@ static int journal_entry_dev_usage_validate(struct bch_fs *c,
                return ret;
        }
 
-       dev = le32_to_cpu(u->dev);
-
-       if (journal_entry_err_on(!bch2_dev_exists(c, dev),
-                                c, version, jset, entry,
-                                journal_entry_dev_usage_bad_dev,
-                                "bad dev")) {
-               journal_entry_null_range(entry, vstruct_next(entry));
-               return ret;
-       }
-
        if (journal_entry_err_on(u->pad,
                                 c, version, jset, entry,
                                 journal_entry_dev_usage_bad_pad,