diff mbox series

[RFC,19/37,xarray] iov_iter_npages(): just use DIV_ROUND_UP()

Message ID 20210606191051.1216821-19-viro@zeniv.linux.org.uk (mailing list archive)
State New, archived
Headers show
Series [RFC,01/37] ntfs_copy_from_user_iter(): don't bother with copying iov_iter | expand

Commit Message

Al Viro June 6, 2021, 7:10 p.m. UTC
Compiler is capable of recognizing division by power of 2 and turning
it into shifts.

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
 lib/iov_iter.c | 16 ++--------------
 1 file changed, 2 insertions(+), 14 deletions(-)
diff mbox series

Patch

diff --git a/lib/iov_iter.c b/lib/iov_iter.c
index 04c81481d309..6a968d2ff081 100644
--- a/lib/iov_iter.c
+++ b/lib/iov_iter.c
@@ -1938,20 +1938,8 @@  int iov_iter_npages(const struct iov_iter *i, int maxpages)
 		return min(npages, maxpages);
 	}
 	if (iov_iter_is_xarray(i)) {
-		size_t size = i->count;
-		unsigned offset;
-		int npages;
-
-		offset = (i->xarray_start + i->iov_offset) & ~PAGE_MASK;
-
-		npages = 1;
-		if (size > PAGE_SIZE - offset) {
-			size -= PAGE_SIZE - offset;
-			npages += size >> PAGE_SHIFT;
-			size &= ~PAGE_MASK;
-			if (size)
-				npages++;
-		}
+		unsigned offset = (i->xarray_start + i->iov_offset) % PAGE_SIZE;
+		int npages = DIV_ROUND_UP(offset + i->count, PAGE_SIZE);
 		return min(npages, maxpages);
 	}
 	return 0;