Commit dd018c23 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'bcachefs-2024-07-22' of https://evilpiepirate.org/git/bcachefs

Pull bcachefs fixes from Kent Overstreet:

 - another fix for fsck getting stuck, from marcin

 - small syzbot fix

 - another undefined shift fix

* tag 'bcachefs-2024-07-22' of https://evilpiepirate.org/git/bcachefs:
  bcachefs: Fix printbuf usage while atomic
  bcachefs: More informative error message in reattach_inode()
  bcachefs: kill btree_trans_too_many_iters() in bch2_bucket_alloc_freelist()
  bcachefs: mean_and_variance: Avoid too-large shift amounts
parents 5ea6d724 737759fc
...@@ -496,12 +496,6 @@ static struct open_bucket *bch2_bucket_alloc_freelist(struct btree_trans *trans, ...@@ -496,12 +496,6 @@ static struct open_bucket *bch2_bucket_alloc_freelist(struct btree_trans *trans,
for (alloc_cursor = max(alloc_cursor, bkey_start_offset(k.k)); for (alloc_cursor = max(alloc_cursor, bkey_start_offset(k.k));
alloc_cursor < k.k->p.offset; alloc_cursor < k.k->p.offset;
alloc_cursor++) { alloc_cursor++) {
ret = btree_trans_too_many_iters(trans);
if (ret) {
ob = ERR_PTR(ret);
break;
}
s->buckets_seen++; s->buckets_seen++;
u64 bucket = alloc_cursor & ~(~0ULL << 56); u64 bucket = alloc_cursor & ~(~0ULL << 56);
......
...@@ -283,6 +283,7 @@ static int reattach_inode(struct btree_trans *trans, ...@@ -283,6 +283,7 @@ static int reattach_inode(struct btree_trans *trans,
struct bch_inode_unpacked *inode, struct bch_inode_unpacked *inode,
u32 inode_snapshot) u32 inode_snapshot)
{ {
struct bch_fs *c = trans->c;
struct bch_hash_info dir_hash; struct bch_hash_info dir_hash;
struct bch_inode_unpacked lostfound; struct bch_inode_unpacked lostfound;
char name_buf[20]; char name_buf[20];
...@@ -317,7 +318,7 @@ static int reattach_inode(struct btree_trans *trans, ...@@ -317,7 +318,7 @@ static int reattach_inode(struct btree_trans *trans,
return ret; return ret;
} }
dir_hash = bch2_hash_info_init(trans->c, &lostfound); dir_hash = bch2_hash_info_init(c, &lostfound);
name = (struct qstr) QSTR(name_buf); name = (struct qstr) QSTR(name_buf);
...@@ -330,8 +331,10 @@ static int reattach_inode(struct btree_trans *trans, ...@@ -330,8 +331,10 @@ static int reattach_inode(struct btree_trans *trans,
inode->bi_subvol ?: inode->bi_inum, inode->bi_subvol ?: inode->bi_inum,
&dir_offset, &dir_offset,
STR_HASH_must_create); STR_HASH_must_create);
if (ret) if (ret) {
bch_err_msg(c, ret, "error creating dirent");
return ret; return ret;
}
inode->bi_dir = lostfound.bi_inum; inode->bi_dir = lostfound.bi_inum;
inode->bi_dir_offset = dir_offset; inode->bi_dir_offset = dir_offset;
......
...@@ -206,6 +206,7 @@ void bch2_journal_space_available(struct journal *j) ...@@ -206,6 +206,7 @@ void bch2_journal_space_available(struct journal *j)
if (nr_online < metadata_replicas_required(c)) { if (nr_online < metadata_replicas_required(c)) {
struct printbuf buf = PRINTBUF; struct printbuf buf = PRINTBUF;
buf.atomic++;
prt_printf(&buf, "insufficient writeable journal devices available: have %u, need %u\n" prt_printf(&buf, "insufficient writeable journal devices available: have %u, need %u\n"
"rw journal devs:", nr_online, metadata_replicas_required(c)); "rw journal devs:", nr_online, metadata_replicas_required(c));
......
...@@ -111,11 +111,11 @@ static inline u128_u u128_shl(u128_u i, s8 shift) ...@@ -111,11 +111,11 @@ static inline u128_u u128_shl(u128_u i, s8 shift)
{ {
u128_u r; u128_u r;
r.lo = i.lo << shift; r.lo = i.lo << (shift & 63);
if (shift < 64) if (shift < 64)
r.hi = (i.hi << shift) | (i.lo >> (64 - shift)); r.hi = (i.hi << (shift & 63)) | (i.lo >> (-shift & 63));
else { else {
r.hi = i.lo << (shift - 64); r.hi = i.lo << (-shift & 63);
r.lo = 0; r.lo = 0;
} }
return r; return r;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment