mirror of
https://github.com/torvalds/linux.git
synced 2024-11-22 12:11:40 +00:00
new helper: dup_iter()
Copy iter and kmemdup the underlying array for the copy. Returns a pointer to result of kmemdup() to be kfree()'d later. Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
f5af19d10d
commit
4b8164b91d
@ -98,6 +98,8 @@ ssize_t iov_iter_get_pages_alloc(struct iov_iter *i, struct page ***pages,
|
||||
size_t maxsize, size_t *start);
|
||||
int iov_iter_npages(const struct iov_iter *i, int maxpages);
|
||||
|
||||
const void *dup_iter(struct iov_iter *new, struct iov_iter *old, gfp_t flags);
|
||||
|
||||
static inline size_t iov_iter_count(struct iov_iter *i)
|
||||
{
|
||||
return i->count;
|
||||
|
@ -751,3 +751,18 @@ int iov_iter_npages(const struct iov_iter *i, int maxpages)
|
||||
return npages;
|
||||
}
|
||||
EXPORT_SYMBOL(iov_iter_npages);
|
||||
|
||||
const void *dup_iter(struct iov_iter *new, struct iov_iter *old, gfp_t flags)
|
||||
{
|
||||
*new = *old;
|
||||
if (new->type & ITER_BVEC)
|
||||
return new->bvec = kmemdup(new->bvec,
|
||||
new->nr_segs * sizeof(struct bio_vec),
|
||||
flags);
|
||||
else
|
||||
/* iovec and kvec have identical layout */
|
||||
return new->iov = kmemdup(new->iov,
|
||||
new->nr_segs * sizeof(struct iovec),
|
||||
flags);
|
||||
}
|
||||
EXPORT_SYMBOL(dup_iter);
|
||||
|
Loading…
Reference in New Issue
Block a user