pvfs_bufmap_copy_from_iovec(): don't rely upon size being equal to iov_iter_count(iter)
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk> Signed-off-by: Mike Marshall <hubcap@omnibond.com>
This commit is contained in:
parent
5c278228bb
commit
34204fde4c
1 changed files with 11 additions and 12 deletions
|
@ -512,26 +512,25 @@ int pvfs_bufmap_copy_from_iovec(struct pvfs2_bufmap *bufmap,
|
|||
int buffer_index,
|
||||
size_t size)
|
||||
{
|
||||
struct pvfs_bufmap_desc *to;
|
||||
struct page *page;
|
||||
size_t copied;
|
||||
struct pvfs_bufmap_desc *to = &bufmap->desc_array[buffer_index];
|
||||
int i;
|
||||
|
||||
gossip_debug(GOSSIP_BUFMAP_DEBUG,
|
||||
"%s: buffer_index:%d: size:%lu:\n",
|
||||
"%s: buffer_index:%d: size:%zu:\n",
|
||||
__func__, buffer_index, size);
|
||||
|
||||
to = &bufmap->desc_array[buffer_index];
|
||||
|
||||
for (i = 0; size; i++) {
|
||||
page = to->page_array[i];
|
||||
copied = copy_page_from_iter(page, 0, PAGE_SIZE, iter);
|
||||
size -= copied;
|
||||
if ((copied == 0) && (size))
|
||||
break;
|
||||
struct page *page = to->page_array[i];
|
||||
size_t n = size;
|
||||
if (n > PAGE_SIZE)
|
||||
n = PAGE_SIZE;
|
||||
n = copy_page_from_iter(page, 0, n, iter);
|
||||
if (!n)
|
||||
return -EFAULT;
|
||||
size -= n;
|
||||
}
|
||||
|
||||
return size ? -EFAULT : 0;
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue