[xarray] iov_iter_npages(): just use DIV_ROUND_UP()
authorAl Viro <viro@zeniv.linux.org.uk>
Mon, 3 May 2021 15:05:29 +0000 (11:05 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Thu, 10 Jun 2021 15:45:13 +0000 (11:45 -0400)
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

index 1c65de1..72c5bb7 100644 (file)
@@ -1925,20 +1925,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;