bio_map_user_iov(): get rid of the iov_for_each()
Use iov_iter_npages() Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
Родитель
98f0bc9905
Коммит
b282cc7669
21
block/bio.c
21
block/bio.c
|
@ -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)
|
||||
if (!iov_iter_count(iter))
|
||||
return ERR_PTR(-EINVAL);
|
||||
|
||||
nr_pages += end - start;
|
||||
}
|
||||
|
||||
if (!nr_pages)
|
||||
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);
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче