mirror of
https://github.com/koverstreet/bcachefs-tools.git
synced 2025-02-09 00:00:04 +03:00
Update bcachefs sources to 7e42539c80 bcachefs: Don't overflow stack in bch2_extent_merge_inline()
This commit is contained in:
parent
7e35389599
commit
34b9374705
@ -1 +1 @@
|
|||||||
f38382c5747090ac9160e6d5fa1386954cb1f23c
|
7e42539c80470cb655bbc46cd0f144de6c644523
|
||||||
|
@ -32,10 +32,7 @@ struct bkey_s {
|
|||||||
|
|
||||||
#define bkey_next(_k) vstruct_next(_k)
|
#define bkey_next(_k) vstruct_next(_k)
|
||||||
|
|
||||||
static inline unsigned bkey_val_u64s(const struct bkey *k)
|
#define bkey_val_u64s(_k) ((_k)->u64s - BKEY_U64s)
|
||||||
{
|
|
||||||
return k->u64s - BKEY_U64s;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline size_t bkey_val_bytes(const struct bkey *k)
|
static inline size_t bkey_val_bytes(const struct bkey *k)
|
||||||
{
|
{
|
||||||
|
@ -958,9 +958,10 @@ static void btree_iter_up(struct btree_iter *iter)
|
|||||||
int __must_check __bch2_btree_iter_traverse(struct btree_iter *);
|
int __must_check __bch2_btree_iter_traverse(struct btree_iter *);
|
||||||
|
|
||||||
static int __btree_iter_traverse_all(struct btree_trans *trans,
|
static int __btree_iter_traverse_all(struct btree_trans *trans,
|
||||||
struct btree_iter *iter, int ret)
|
struct btree_iter *orig_iter, int ret)
|
||||||
{
|
{
|
||||||
struct bch_fs *c = trans->c;
|
struct bch_fs *c = trans->c;
|
||||||
|
struct btree_iter *iter;
|
||||||
u8 sorted[BTREE_ITER_MAX];
|
u8 sorted[BTREE_ITER_MAX];
|
||||||
unsigned i, nr_sorted = 0;
|
unsigned i, nr_sorted = 0;
|
||||||
|
|
||||||
@ -989,8 +990,8 @@ retry_all:
|
|||||||
|
|
||||||
if (unlikely(ret == -EIO)) {
|
if (unlikely(ret == -EIO)) {
|
||||||
trans->error = true;
|
trans->error = true;
|
||||||
iter->flags |= BTREE_ITER_ERROR;
|
orig_iter->flags |= BTREE_ITER_ERROR;
|
||||||
iter->l[iter->level].b = BTREE_ITER_NO_NODE_ERROR;
|
orig_iter->l[orig_iter->level].b = BTREE_ITER_NO_NODE_ERROR;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1651,6 +1651,10 @@ static bool bch2_extent_merge_inline(struct bch_fs *c,
|
|||||||
|
|
||||||
EBUG_ON(bkey_written(b, m));
|
EBUG_ON(bkey_written(b, m));
|
||||||
|
|
||||||
|
if (bkey_val_u64s(l) > BKEY_EXTENT_VAL_U64s_MAX ||
|
||||||
|
bkey_val_u64s(r) > BKEY_EXTENT_VAL_U64s_MAX)
|
||||||
|
return BCH_MERGE_NOMERGE;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We need to save copies of both l and r, because we might get a
|
* We need to save copies of both l and r, because we might get a
|
||||||
* partial merge (which modifies both) and then fails to repack
|
* partial merge (which modifies both) and then fails to repack
|
||||||
|
@ -282,7 +282,8 @@ int bch2_copygc_start(struct bch_fs *c, struct bch_dev *ca)
|
|||||||
{
|
{
|
||||||
struct task_struct *t;
|
struct task_struct *t;
|
||||||
|
|
||||||
BUG_ON(ca->copygc_thread);
|
if (ca->copygc_thread)
|
||||||
|
return 0;
|
||||||
|
|
||||||
if (c->opts.nochanges)
|
if (c->opts.nochanges)
|
||||||
return 0;
|
return 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user