Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'bcachefs-2024-02-17' of https://evilpiepirate.org/git/bcachefs

Pull bcachefs fixes from Kent Overstreet:
"Mostly pretty trivial, the user visible ones are:

- don't barf when replicas_required > replicas

- fix check_version_upgrade() so it doesn't do something nonsensical
when we're downgrading"

* tag 'bcachefs-2024-02-17' of https://evilpiepirate.org/git/bcachefs:
bcachefs: Fix missing va_end()
bcachefs: Fix check_version_upgrade()
bcachefs: Clamp replicas_required to replicas
bcachefs: fix missing endiannes conversion in sb_members
bcachefs: fix kmemleak in __bch2_read_super error handling path
bcachefs: Fix missing bch2_err_class() calls

+35 -16
+12
fs/bcachefs/bcachefs.h
··· 1249 1249 return stdio; 1250 1250 } 1251 1251 1252 + static inline unsigned metadata_replicas_required(struct bch_fs *c) 1253 + { 1254 + return min(c->opts.metadata_replicas, 1255 + c->opts.metadata_replicas_required); 1256 + } 1257 + 1258 + static inline unsigned data_replicas_required(struct bch_fs *c) 1259 + { 1260 + return min(c->opts.data_replicas, 1261 + c->opts.data_replicas_required); 1262 + } 1263 + 1252 1264 #define BKEY_PADDED_ONSTACK(key, pad) \ 1253 1265 struct { struct bkey_i key; __u64 key ## _pad[pad]; } 1254 1266
+2 -1
fs/bcachefs/btree_update_interior.c
··· 280 280 writepoint_ptr(&c->btree_write_point), 281 281 &devs_have, 282 282 res->nr_replicas, 283 - c->opts.metadata_replicas_required, 283 + min(res->nr_replicas, 284 + c->opts.metadata_replicas_required), 284 285 watermark, 0, cl, &wp); 285 286 if (unlikely(ret)) 286 287 return ERR_PTR(ret);
+5 -4
fs/bcachefs/fs.c
··· 435 435 bch2_subvol_is_ro(c, inode->ei_subvol) ?: 436 436 __bch2_link(c, inode, dir, dentry); 437 437 if (unlikely(ret)) 438 - return ret; 438 + return bch2_err_class(ret); 439 439 440 440 ihold(&inode->v); 441 441 d_instantiate(dentry, &inode->v); ··· 487 487 struct bch_inode_info *dir= to_bch_ei(vdir); 488 488 struct bch_fs *c = dir->v.i_sb->s_fs_info; 489 489 490 - return bch2_subvol_is_ro(c, dir->ei_subvol) ?: 490 + int ret = bch2_subvol_is_ro(c, dir->ei_subvol) ?: 491 491 __bch2_unlink(vdir, dentry, false); 492 + return bch2_err_class(ret); 492 493 } 493 494 494 495 static int bch2_symlink(struct mnt_idmap *idmap, ··· 524 523 return 0; 525 524 err: 526 525 iput(&inode->v); 527 - return ret; 526 + return bch2_err_class(ret); 528 527 } 529 528 530 529 static int bch2_mkdir(struct mnt_idmap *idmap, ··· 642 641 src_inode, 643 642 dst_inode); 644 643 645 - return ret; 644 + return bch2_err_class(ret); 646 645 } 647 646 648 647 static void bch2_setattr_copy(struct mnt_idmap *idmap,
+1
fs/bcachefs/io_write.c
··· 1564 1564 BUG_ON(!op->write_point.v); 1565 1565 BUG_ON(bkey_eq(op->pos, POS_MAX)); 1566 1566 1567 + op->nr_replicas_required = min_t(unsigned, op->nr_replicas_required, op->nr_replicas); 1567 1568 op->start_time = local_clock(); 1568 1569 bch2_keylist_init(&op->insert_keys, op->inline_keys); 1569 1570 wbio_init(bio)->put_bio = false;
+3 -1
fs/bcachefs/journal_io.c
··· 1478 1478 c->opts.foreground_target; 1479 1479 unsigned i, replicas = 0, replicas_want = 1480 1480 READ_ONCE(c->opts.metadata_replicas); 1481 + unsigned replicas_need = min_t(unsigned, replicas_want, 1482 + READ_ONCE(c->opts.metadata_replicas_required)); 1481 1483 1482 1484 rcu_read_lock(); 1483 1485 retry: ··· 1528 1526 1529 1527 BUG_ON(bkey_val_u64s(&w->key.k) > BCH_REPLICAS_MAX); 1530 1528 1531 - return replicas >= c->opts.metadata_replicas_required ? 0 : -EROFS; 1529 + return replicas >= replicas_need ? 0 : -EROFS; 1532 1530 } 1533 1531 1534 1532 static void journal_buf_realloc(struct journal *j, struct journal_buf *buf)
+1 -1
fs/bcachefs/journal_reclaim.c
··· 205 205 206 206 j->can_discard = can_discard; 207 207 208 - if (nr_online < c->opts.metadata_replicas_required) { 208 + if (nr_online < metadata_replicas_required(c)) { 209 209 ret = JOURNAL_ERR_insufficient_devices; 210 210 goto out; 211 211 }
+1
fs/bcachefs/printbuf.c
··· 56 56 57 57 va_copy(args2, args); 58 58 len = vsnprintf(out->buf + out->pos, printbuf_remaining(out), fmt, args2); 59 + va_end(args2); 59 60 } while (len + 1 >= printbuf_remaining(out) && 60 61 !bch2_printbuf_make_room(out, len + 1)); 61 62
+6 -5
fs/bcachefs/recovery.c
··· 577 577 578 578 static bool check_version_upgrade(struct bch_fs *c) 579 579 { 580 - unsigned latest_compatible = bch2_latest_compatible_version(c->sb.version); 581 580 unsigned latest_version = bcachefs_metadata_version_current; 581 + unsigned latest_compatible = min(latest_version, 582 + bch2_latest_compatible_version(c->sb.version)); 582 583 unsigned old_version = c->sb.version_upgrade_complete ?: c->sb.version; 583 584 unsigned new_version = 0; 584 585 ··· 598 597 new_version = latest_version; 599 598 break; 600 599 case BCH_VERSION_UPGRADE_none: 601 - new_version = old_version; 600 + new_version = min(old_version, latest_version); 602 601 break; 603 602 } 604 603 } ··· 775 774 goto err; 776 775 } 777 776 778 - if (!(c->opts.nochanges && c->opts.norecovery)) { 777 + if (!c->opts.nochanges) { 779 778 mutex_lock(&c->sb_lock); 780 779 bool write_sb = false; 781 780 ··· 805 804 if (bch2_check_version_downgrade(c)) { 806 805 struct printbuf buf = PRINTBUF; 807 806 808 - prt_str(&buf, "Version downgrade required:\n"); 807 + prt_str(&buf, "Version downgrade required:"); 809 808 810 809 __le64 passes = ext->recovery_passes_required[0]; 811 810 bch2_sb_set_downgrade(c, ··· 813 812 BCH_VERSION_MINOR(c->sb.version)); 814 813 passes = ext->recovery_passes_required[0] & ~passes; 815 814 if (passes) { 816 - prt_str(&buf, " running recovery passes: "); 815 + prt_str(&buf, "\n running recovery passes: "); 817 816 prt_bitflags(&buf, bch2_recovery_passes, 818 817 bch2_recovery_passes_from_stable(le64_to_cpu(passes))); 819 818 }
+1 -1
fs/bcachefs/sb-members.c
··· 421 421 m = bch2_members_v2_get_mut(c->disk_sb.sb, ca->dev_idx); 422 422 for (unsigned i = 0; i < ARRAY_SIZE(m->errors_at_reset); i++) 423 423 m->errors_at_reset[i] = cpu_to_le64(atomic64_read(&ca->errors[i])); 424 - m->errors_reset_time = ktime_get_real_seconds(); 424 + m->errors_reset_time = cpu_to_le64(ktime_get_real_seconds()); 425 425 426 426 bch2_write_super(c); 427 427 mutex_unlock(&c->sb_lock);
+1 -1
fs/bcachefs/super-io.c
··· 717 717 718 718 if (IS_ERR(sb->bdev_handle)) { 719 719 ret = PTR_ERR(sb->bdev_handle); 720 - goto out; 720 + goto err; 721 721 } 722 722 sb->bdev = sb->bdev_handle->bdev; 723 723
+2 -2
fs/bcachefs/super.c
··· 1428 1428 1429 1429 required = max(!(flags & BCH_FORCE_IF_METADATA_DEGRADED) 1430 1430 ? c->opts.metadata_replicas 1431 - : c->opts.metadata_replicas_required, 1431 + : metadata_replicas_required(c), 1432 1432 !(flags & BCH_FORCE_IF_DATA_DEGRADED) 1433 1433 ? c->opts.data_replicas 1434 - : c->opts.data_replicas_required); 1434 + : data_replicas_required(c)); 1435 1435 1436 1436 return nr_rw >= required; 1437 1437 case BCH_MEMBER_STATE_failed: