bcachefs: Fix a transaction path overflow

readdir() in a directory with many subvolumes could overflow transaction
paths - this is a simple hack around the issue.

Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
This commit is contained in:
Kent Overstreet 2021-10-22 17:33:38 -04:00 committed by Kent Overstreet
parent de924abbe7
commit ab44d7bdee

View File

@ -529,6 +529,15 @@ int bch2_readdir(struct bch_fs *c, subvol_inum inum, struct dir_context *ctx)
vfs_d_type(dirent.v->d_type)))
break;
ctx->pos = dirent.k->p.offset + 1;
/*
* read_target looks up subvolumes, we can overflow paths if the
* directory has many subvolumes in it
*/
if (hweight64(trans.paths_allocated) > BTREE_ITER_MAX / 2) {
ret = -EINTR;
break;
}
}
bch2_trans_iter_exit(&trans, &iter);
err: