iterate_and_advance(): get rid of magic in case when n is 0
authorAl Viro <viro@zeniv.linux.org.uk>
Thu, 29 Apr 2021 00:59:08 +0000 (20:59 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Thu, 10 Jun 2021 15:45:15 +0000 (11:45 -0400)
iov_iter_advance() needs to do some non-trivial work when it's given
0 as argument (skip all empty iovecs, mostly).  We used to implement
it via iterate_and_advance(); we no longer do so and for all other
users of iterate_and_advance() zero length is a no-op.

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
lib/iov_iter.c

index 93ae0c2..763114a 100644 (file)
 #define iterate_and_advance(i, n, v, I, B, K, X) {             \
        if (unlikely(i->count < n))                             \
                n = i->count;                                   \
-       if (i->count) {                                         \
+       if (likely(n)) {                                        \
                size_t skip = i->iov_offset;                    \
                if (likely(iter_is_iovec(i))) {                 \
                        const struct iovec *iov;                \