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:
@@ -98,6 +98,8 @@ ssize_t iov_iter_get_pages_alloc(struct iov_iter *i, struct page ***pages,
|
|||||||
size_t maxsize, size_t *start);
|
size_t maxsize, size_t *start);
|
||||||
int iov_iter_npages(const struct iov_iter *i, int maxpages);
|
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)
|
static inline size_t iov_iter_count(struct iov_iter *i)
|
||||||
{
|
{
|
||||||
return i->count;
|
return i->count;
|
||||||
|
|||||||
@@ -751,3 +751,18 @@ int iov_iter_npages(const struct iov_iter *i, int maxpages)
|
|||||||
return npages;
|
return npages;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(iov_iter_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);
|
||||||
|
|||||||
Reference in New Issue
Block a user