Commit c6f62f81 authored by Matthew Wilcox (Oracle)'s avatar Matthew Wilcox (Oracle) Committed by Steve French
Browse files

cifs: Fix memory leak when using fscache



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: 0174ee99 ("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: default avatarMatthew Wilcox (Oracle) <willy@infradead.org>
Signed-off-by: default avatarSteve French <stfrench@microsoft.com>
parent 89e42f49
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -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)