]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
bcachefs: disk_accounting: bch2_dev_rcu -> bch2_dev_rcu_noerror
authorKent Overstreet <kent.overstreet@linux.dev>
Mon, 25 Nov 2024 03:23:41 +0000 (22:23 -0500)
committerKent Overstreet <kent.overstreet@linux.dev>
Sat, 21 Dec 2024 06:36:19 +0000 (01:36 -0500)
Accounting keys that reference invalid devices are corrected by fsck,
they shouldn't cause an emergency shutdown.

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

index 55a00018dc8bd5e99c4a766e12add464b9d78c4c..fa821d278c45b4b9726286221384345e8d3d520c 100644 (file)
@@ -805,7 +805,7 @@ int bch2_accounting_read(struct bch_fs *c)
                        break;
                case BCH_DISK_ACCOUNTING_dev_data_type:
                        rcu_read_lock();
-                       struct bch_dev *ca = bch2_dev_rcu(c, k.dev_data_type.dev);
+                       struct bch_dev *ca = bch2_dev_rcu_noerror(c, k.dev_data_type.dev);
                        if (ca) {
                                struct bch_dev_usage_type __percpu *d = &ca->usage->d[k.dev_data_type.data_type];
                                percpu_u64_set(&d->buckets,     v[0]);
@@ -911,7 +911,7 @@ void bch2_verify_accounting_clean(struct bch_fs *c)
                                break;
                        case BCH_DISK_ACCOUNTING_dev_data_type: {
                                rcu_read_lock();
-                               struct bch_dev *ca = bch2_dev_rcu(c, acc_k.dev_data_type.dev);
+                               struct bch_dev *ca = bch2_dev_rcu_noerror(c, acc_k.dev_data_type.dev);
                                if (!ca) {
                                        rcu_read_unlock();
                                        continue;
index 6639535dc91c9d408811a21f36f6722de9535517..8b2b2f83e6a43534899bfba0a4c257534dd9d83f 100644 (file)
@@ -142,7 +142,7 @@ static inline int bch2_accounting_mem_mod_locked(struct btree_trans *trans,
                        break;
                case BCH_DISK_ACCOUNTING_dev_data_type:
                        rcu_read_lock();
-                       struct bch_dev *ca = bch2_dev_rcu(c, acc_k.dev_data_type.dev);
+                       struct bch_dev *ca = bch2_dev_rcu_noerror(c, acc_k.dev_data_type.dev);
                        if (ca) {
                                this_cpu_add(ca->usage->d[acc_k.dev_data_type.data_type].buckets, a.v->d[0]);
                                this_cpu_add(ca->usage->d[acc_k.dev_data_type.data_type].sectors, a.v->d[1]);