From: Kent Overstreet Date: Fri, 5 Apr 2019 01:28:16 +0000 (-0400) Subject: bcachefs: don't lose errors from iterators that have been freed X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=ece254b258980cfd5a0fa11adce8e178c8d34181;p=linux.git bcachefs: don't lose errors from iterators that have been freed Signed-off-by: Kent Overstreet --- diff --git a/fs/bcachefs/btree_iter.c b/fs/bcachefs/btree_iter.c index fbbb7428c592e..02eb28bfe9b97 100644 --- a/fs/bcachefs/btree_iter.c +++ b/fs/bcachefs/btree_iter.c @@ -983,6 +983,7 @@ retry_all: } if (unlikely(ret == -EIO)) { + trans->error = true; iter->flags |= BTREE_ITER_ERROR; iter->l[iter->level].b = BTREE_ITER_NOT_END; goto out; @@ -1943,7 +1944,7 @@ void bch2_trans_init(struct btree_trans *trans, struct bch_fs *c) int bch2_trans_exit(struct btree_trans *trans) { - int ret = bch2_trans_unlock(trans); + bch2_trans_unlock(trans); kfree(trans->mem); if (trans->used_mempool) @@ -1952,5 +1953,6 @@ int bch2_trans_exit(struct btree_trans *trans) kfree(trans->iters); trans->mem = (void *) 0x1; trans->iters = (void *) 0x1; - return ret; + + return trans->error ? -EIO : 0; } diff --git a/fs/bcachefs/btree_types.h b/fs/bcachefs/btree_types.h index bd6852d951ea4..8c6f5fe6998e8 100644 --- a/fs/bcachefs/btree_types.h +++ b/fs/bcachefs/btree_types.h @@ -280,6 +280,7 @@ struct btree_trans { u8 nr_updates; u8 size; unsigned used_mempool:1; + unsigned error:1; unsigned mem_top; unsigned mem_bytes;