diff options
Diffstat (limited to 'lib/iov_iter.c')
| -rw-r--r-- | lib/iov_iter.c | 20 | 
1 files changed, 4 insertions, 16 deletions
diff --git a/lib/iov_iter.c b/lib/iov_iter.c index 6dd5330f7a99..0b64695ab632 100644 --- a/lib/iov_iter.c +++ b/lib/iov_iter.c @@ -1434,7 +1434,7 @@ static ssize_t iter_xarray_get_pages(struct iov_iter *i,  {  	unsigned nr, offset;  	pgoff_t index, count; -	size_t size = maxsize, actual; +	size_t size = maxsize;  	loff_t pos;  	if (!size || !maxpages) @@ -1461,13 +1461,7 @@ static ssize_t iter_xarray_get_pages(struct iov_iter *i,  	if (nr == 0)  		return 0; -	actual = PAGE_SIZE * nr; -	actual -= offset; -	if (nr == count && size > 0) { -		unsigned last_offset = (nr > 1) ? 0 : offset; -		actual -= PAGE_SIZE - (last_offset + size); -	} -	return actual; +	return min_t(size_t, nr * PAGE_SIZE - offset, maxsize);  }  /* must be done on non-empty ITER_IOVEC one */ @@ -1602,7 +1596,7 @@ static ssize_t iter_xarray_get_pages_alloc(struct iov_iter *i,  	struct page **p;  	unsigned nr, offset;  	pgoff_t index, count; -	size_t size = maxsize, actual; +	size_t size = maxsize;  	loff_t pos;  	if (!size) @@ -1631,13 +1625,7 @@ static ssize_t iter_xarray_get_pages_alloc(struct iov_iter *i,  	if (nr == 0)  		return 0; -	actual = PAGE_SIZE * nr; -	actual -= offset; -	if (nr == count && size > 0) { -		unsigned last_offset = (nr > 1) ? 0 : offset; -		actual -= PAGE_SIZE - (last_offset + size); -	} -	return actual; +	return min_t(size_t, nr * PAGE_SIZE - offset, maxsize);  }  ssize_t iov_iter_get_pages_alloc(struct iov_iter *i,  |