diff options
Diffstat (limited to 'lib/iov_iter.c')
| -rw-r--r-- | lib/iov_iter.c | 8 | 
1 files changed, 6 insertions, 2 deletions
| diff --git a/lib/iov_iter.c b/lib/iov_iter.c index 65f550cb5081..8c7fdb7d8c8f 100644 --- a/lib/iov_iter.c +++ b/lib/iov_iter.c @@ -1190,8 +1190,12 @@ static ssize_t __iov_iter_get_pages_alloc(struct iov_iter *i,  		if (!n)  			return -ENOMEM;  		p = *pages; -		for (int k = 0; k < n; k++) -			get_page(p[k] = page + k); +		for (int k = 0; k < n; k++) { +			struct folio *folio = page_folio(page); +			p[k] = page + k; +			if (!folio_test_slab(folio)) +				folio_get(folio); +		}  		maxsize = min_t(size_t, maxsize, n * PAGE_SIZE - *start);  		i->count -= maxsize;  		i->iov_offset += maxsize; | 
