cifs: Fix memory leak when using fscache
[ Upstream commit c6f62f81b488d00afaa86bae26c6ce9ab12c709e ] If we hit the 'index == next_cached' case, we leak a refcount on the struct page. Fix this by using readahead_folio() which takes care of the refcount for you. Fixes: 0174ee9947bd ("cifs: Implement cache I/O by accessing the cache directly") Cc: David Howells <dhowells@redhat.com> Cc: Jeff Layton <jlayton@kernel.org> Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> Signed-off-by: Steve French <stfrench@microsoft.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
e0a6bb00d1
commit
ae497726cd
@ -4459,10 +4459,10 @@ static void cifs_readahead(struct readahead_control *ractl)
|
||||
* TODO: Send a whole batch of pages to be read
|
||||
* by the cache.
|
||||
*/
|
||||
page = readahead_page(ractl);
|
||||
last_batch_size = 1 << thp_order(page);
|
||||
struct folio *folio = readahead_folio(ractl);
|
||||
last_batch_size = folio_nr_pages(folio);
|
||||
if (cifs_readpage_from_fscache(ractl->mapping->host,
|
||||
page) < 0) {
|
||||
&folio->page) < 0) {
|
||||
/*
|
||||
* TODO: Deal with cache read failure
|
||||
* here, but for the moment, delegate
|
||||
@ -4470,7 +4470,7 @@ static void cifs_readahead(struct readahead_control *ractl)
|
||||
*/
|
||||
caching = false;
|
||||
}
|
||||
unlock_page(page);
|
||||
folio_unlock(folio);
|
||||
next_cached++;
|
||||
cache_nr_pages--;
|
||||
if (cache_nr_pages == 0)
|
||||
|
Loading…
x
Reference in New Issue
Block a user