diff options
| author | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2008-12-20 04:54:54 -0500 | 
|---|---|---|
| committer | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2008-12-20 04:54:54 -0500 | 
| commit | 93b8eef1c098efbea2f1fc0be7e3c681f259a7e7 (patch) | |
| tree | 462cc8c2bc07bbc825dab2a200891a28d8643329 /drivers/dma/iovlock.c | |
| parent | a2d781fc8d9b16113dd9440107d73c0f21d7cbef (diff) | |
| parent | 929096fe9ff1f4b3645cf3919527ab47e8d5e17c (diff) | |
| download | olio-linux-3.10-93b8eef1c098efbea2f1fc0be7e3c681f259a7e7.tar.xz olio-linux-3.10-93b8eef1c098efbea2f1fc0be7e3c681f259a7e7.zip  | |
Merge commit 'v2.6.28-rc9' into next
Diffstat (limited to 'drivers/dma/iovlock.c')
| -rw-r--r-- | drivers/dma/iovlock.c | 17 | 
1 files changed, 6 insertions, 11 deletions
diff --git a/drivers/dma/iovlock.c b/drivers/dma/iovlock.c index e763d723e4c..9f6fe46a9b8 100644 --- a/drivers/dma/iovlock.c +++ b/drivers/dma/iovlock.c @@ -55,7 +55,6 @@ struct dma_pinned_list *dma_pin_iovec_pages(struct iovec *iov, size_t len)  	int nr_iovecs = 0;  	int iovec_len_used = 0;  	int iovec_pages_used = 0; -	long err;  	/* don't pin down non-user-based iovecs */  	if (segment_eq(get_fs(), KERNEL_DS)) @@ -72,23 +71,21 @@ struct dma_pinned_list *dma_pin_iovec_pages(struct iovec *iov, size_t len)  	local_list = kmalloc(sizeof(*local_list)  		+ (nr_iovecs * sizeof (struct dma_page_list))  		+ (iovec_pages_used * sizeof (struct page*)), GFP_KERNEL); -	if (!local_list) { -		err = -ENOMEM; +	if (!local_list)  		goto out; -	}  	/* list of pages starts right after the page list array */  	pages = (struct page **) &local_list->page_list[nr_iovecs]; +	local_list->nr_iovecs = 0; +  	for (i = 0; i < nr_iovecs; i++) {  		struct dma_page_list *page_list = &local_list->page_list[i];  		len -= iov[i].iov_len; -		if (!access_ok(VERIFY_WRITE, iov[i].iov_base, iov[i].iov_len)) { -			err = -EFAULT; +		if (!access_ok(VERIFY_WRITE, iov[i].iov_base, iov[i].iov_len))  			goto unpin; -		}  		page_list->nr_pages = num_pages_spanned(&iov[i]);  		page_list->base_address = iov[i].iov_base; @@ -109,10 +106,8 @@ struct dma_pinned_list *dma_pin_iovec_pages(struct iovec *iov, size_t len)  			NULL);  		up_read(¤t->mm->mmap_sem); -		if (ret != page_list->nr_pages) { -			err = -ENOMEM; +		if (ret != page_list->nr_pages)  			goto unpin; -		}  		local_list->nr_iovecs = i + 1;  	} @@ -122,7 +117,7 @@ struct dma_pinned_list *dma_pin_iovec_pages(struct iovec *iov, size_t len)  unpin:  	dma_unpin_iovec_pages(local_list);  out: -	return ERR_PTR(err); +	return NULL;  }  void dma_unpin_iovec_pages(struct dma_pinned_list *pinned_list)  |