bcachefs: Fix btree_trans leak in bch2_readahead()
Reported-by: syzbot+d797fe78808e968d6c84@syzkaller.appspotmail.com Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
parent
5fa421448d
commit
70dd062e27
|
@ -257,7 +257,6 @@ void bch2_readahead(struct readahead_control *ractl)
|
||||||
struct bch_inode_info *inode = to_bch_ei(ractl->mapping->host);
|
struct bch_inode_info *inode = to_bch_ei(ractl->mapping->host);
|
||||||
struct bch_fs *c = inode->v.i_sb->s_fs_info;
|
struct bch_fs *c = inode->v.i_sb->s_fs_info;
|
||||||
struct bch_io_opts opts;
|
struct bch_io_opts opts;
|
||||||
struct btree_trans *trans = bch2_trans_get(c);
|
|
||||||
struct folio *folio;
|
struct folio *folio;
|
||||||
struct readpages_iter readpages_iter;
|
struct readpages_iter readpages_iter;
|
||||||
|
|
||||||
|
@ -269,6 +268,7 @@ void bch2_readahead(struct readahead_control *ractl)
|
||||||
|
|
||||||
bch2_pagecache_add_get(inode);
|
bch2_pagecache_add_get(inode);
|
||||||
|
|
||||||
|
struct btree_trans *trans = bch2_trans_get(c);
|
||||||
while ((folio = readpage_iter_peek(&readpages_iter))) {
|
while ((folio = readpage_iter_peek(&readpages_iter))) {
|
||||||
unsigned n = min_t(unsigned,
|
unsigned n = min_t(unsigned,
|
||||||
readpages_iter.folios.nr -
|
readpages_iter.folios.nr -
|
||||||
|
@ -289,10 +289,10 @@ void bch2_readahead(struct readahead_control *ractl)
|
||||||
&readpages_iter);
|
&readpages_iter);
|
||||||
bch2_trans_unlock(trans);
|
bch2_trans_unlock(trans);
|
||||||
}
|
}
|
||||||
|
bch2_trans_put(trans);
|
||||||
|
|
||||||
bch2_pagecache_add_put(inode);
|
bch2_pagecache_add_put(inode);
|
||||||
|
|
||||||
bch2_trans_put(trans);
|
|
||||||
darray_exit(&readpages_iter.folios);
|
darray_exit(&readpages_iter.folios);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue