Commit b282cc76 authored by Al Viro's avatar Al Viro
Browse files

bio_map_user_iov(): get rid of the iov_for_each()



Use iov_iter_npages()

Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 98f0bc99
Loading
Loading
Loading
Loading
+2 −19
Original line number Diff line number Diff line
@@ -1324,32 +1324,15 @@ struct bio *bio_map_user_iov(struct request_queue *q,
			     gfp_t gfp_mask)
{
	int j;
	int nr_pages = 0;
	struct bio *bio;
	int ret;
	struct iov_iter i;
	struct iovec iov;
	struct bio_vec *bvec;

	iov_for_each(iov, i, *iter) {
		unsigned long uaddr = (unsigned long) iov.iov_base;
		unsigned long len = iov.iov_len;
		unsigned long end = (uaddr + len + PAGE_SIZE - 1) >> PAGE_SHIFT;
		unsigned long start = uaddr >> PAGE_SHIFT;

		/*
		 * Overflow, abort
		 */
		if (end < start)
			return ERR_PTR(-EINVAL);

		nr_pages += end - start;
	}

	if (!nr_pages)
	if (!iov_iter_count(iter))
		return ERR_PTR(-EINVAL);

	bio = bio_kmalloc(gfp_mask, nr_pages);
	bio = bio_kmalloc(gfp_mask, iov_iter_npages(iter, BIO_MAX_PAGES));
	if (!bio)
		return ERR_PTR(-ENOMEM);