So looking at the various callers I'm not sure this API is the
best. If we want to do something fancy I'd hide the struct iovec
instances entirely with something like:
struct iov_storage {
struct iovec stack[UIO_FASTIOV], *vec;
}
int iov_iter_import_iovec(struct iov_iter *iter, struct iov_storage *s,
const struct iovec __user *vec, unsigned long nr_segs,
int type);
and then add a new helper to free the thing if needed:
void iov_iter_release_iovec(struct iov_storage *s)
{
if (s->vec != s->stack)
kfree(s->vec);
}