* XXX: exact copy from kernel code (__generic_file_aio_write_nolock)
*/
static int ll_file_get_iov_count(const struct iovec *iov,
- unsigned long *nr_segs, size_t *count)
+ unsigned long *nr_segs, size_t *count,
+ int access_flags)
{
size_t cnt = 0;
unsigned long seg;
cnt += iv->iov_len;
if (unlikely((ssize_t)(cnt|iv->iov_len) < 0))
return -EINVAL;
- if (access_ok(VERIFY_READ, iv->iov_base, iv->iov_len))
+ if (access_ok(access_flags, iv->iov_base, iv->iov_len))
continue;
if (seg == 0)
return -EFAULT;
ssize_t result;
ENTRY;
- result = ll_file_get_iov_count(iov, &nr_segs, &iov_count);
+ result = ll_file_get_iov_count(iov, &nr_segs, &iov_count, VERIFY_READ);
if (result)
RETURN(result);
ssize_t result;
ENTRY;
- result = ll_file_get_iov_count(iov, &nr_segs, &iov_count);
+ result = ll_file_get_iov_count(iov, &nr_segs, &iov_count, VERIFY_WRITE);
if (result)
RETURN(result);