projects
/
deliverable
/
linux.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
vfs: pass a flags argument to vfs_readv/vfs_writev
[deliverable/linux.git]
/
fs
/
read_write.c
diff --git
a/fs/read_write.c
b/fs/read_write.c
index 324ec271cc4e64868c34e3ff2f28ac2c0542475e..7d453c3e1cb67ecee9f3aacaf797badd8f7be093 100644
(file)
--- a/
fs/read_write.c
+++ b/
fs/read_write.c
@@
-692,11
+692,14
@@
unsigned long iov_shorten(struct iovec *iov, unsigned long nr_segs, size_t to)
EXPORT_SYMBOL(iov_shorten);
static ssize_t do_iter_readv_writev(struct file *filp, struct iov_iter *iter,
EXPORT_SYMBOL(iov_shorten);
static ssize_t do_iter_readv_writev(struct file *filp, struct iov_iter *iter,
- loff_t *ppos, iter_fn_t fn)
+ loff_t *ppos, iter_fn_t fn
, int flags
)
{
struct kiocb kiocb;
ssize_t ret;
{
struct kiocb kiocb;
ssize_t ret;
+ if (flags)
+ return -EOPNOTSUPP;
+
init_sync_kiocb(&kiocb, filp);
kiocb.ki_pos = *ppos;
init_sync_kiocb(&kiocb, filp);
kiocb.ki_pos = *ppos;
@@
-708,10
+711,13
@@
static ssize_t do_iter_readv_writev(struct file *filp, struct iov_iter *iter,
/* Do it by hand, with file-ops */
static ssize_t do_loop_readv_writev(struct file *filp, struct iov_iter *iter,
/* Do it by hand, with file-ops */
static ssize_t do_loop_readv_writev(struct file *filp, struct iov_iter *iter,
- loff_t *ppos, io_fn_t fn)
+ loff_t *ppos, io_fn_t fn
, int flags
)
{
ssize_t ret = 0;
{
ssize_t ret = 0;
+ if (flags)
+ return -EOPNOTSUPP;
+
while (iov_iter_count(iter)) {
struct iovec iovec = iov_iter_iovec(iter);
ssize_t nr;
while (iov_iter_count(iter)) {
struct iovec iovec = iov_iter_iovec(iter);
ssize_t nr;
@@
-812,7
+818,8
@@
out:
static ssize_t do_readv_writev(int type, struct file *file,
const struct iovec __user * uvector,
static ssize_t do_readv_writev(int type, struct file *file,
const struct iovec __user * uvector,
- unsigned long nr_segs, loff_t *pos)
+ unsigned long nr_segs, loff_t *pos,
+ int flags)
{
size_t tot_len;
struct iovec iovstack[UIO_FASTIOV];
{
size_t tot_len;
struct iovec iovstack[UIO_FASTIOV];
@@
-844,9
+851,9
@@
static ssize_t do_readv_writev(int type, struct file *file,
}
if (iter_fn)
}
if (iter_fn)
- ret = do_iter_readv_writev(file, &iter, pos, iter_fn);
+ ret = do_iter_readv_writev(file, &iter, pos, iter_fn
, flags
);
else
else
- ret = do_loop_readv_writev(file, &iter, pos, fn);
+ ret = do_loop_readv_writev(file, &iter, pos, fn
, flags
);
if (type != READ)
file_end_write(file);
if (type != READ)
file_end_write(file);
@@
-863,27
+870,27
@@
out:
}
ssize_t vfs_readv(struct file *file, const struct iovec __user *vec,
}
ssize_t vfs_readv(struct file *file, const struct iovec __user *vec,
- unsigned long vlen, loff_t *pos)
+ unsigned long vlen, loff_t *pos
, int flags
)
{
if (!(file->f_mode & FMODE_READ))
return -EBADF;
if (!(file->f_mode & FMODE_CAN_READ))
return -EINVAL;
{
if (!(file->f_mode & FMODE_READ))
return -EBADF;
if (!(file->f_mode & FMODE_CAN_READ))
return -EINVAL;
- return do_readv_writev(READ, file, vec, vlen, pos);
+ return do_readv_writev(READ, file, vec, vlen, pos
, flags
);
}
EXPORT_SYMBOL(vfs_readv);
ssize_t vfs_writev(struct file *file, const struct iovec __user *vec,
}
EXPORT_SYMBOL(vfs_readv);
ssize_t vfs_writev(struct file *file, const struct iovec __user *vec,
- unsigned long vlen, loff_t *pos)
+ unsigned long vlen, loff_t *pos
, int flags
)
{
if (!(file->f_mode & FMODE_WRITE))
return -EBADF;
if (!(file->f_mode & FMODE_CAN_WRITE))
return -EINVAL;
{
if (!(file->f_mode & FMODE_WRITE))
return -EBADF;
if (!(file->f_mode & FMODE_CAN_WRITE))
return -EINVAL;
- return do_readv_writev(WRITE, file, vec, vlen, pos);
+ return do_readv_writev(WRITE, file, vec, vlen, pos
, flags
);
}
EXPORT_SYMBOL(vfs_writev);
}
EXPORT_SYMBOL(vfs_writev);
@@
-896,7
+903,7
@@
SYSCALL_DEFINE3(readv, unsigned long, fd, const struct iovec __user *, vec,
if (f.file) {
loff_t pos = file_pos_read(f.file);
if (f.file) {
loff_t pos = file_pos_read(f.file);
- ret = vfs_readv(f.file, vec, vlen, &pos);
+ ret = vfs_readv(f.file, vec, vlen, &pos
, 0
);
if (ret >= 0)
file_pos_write(f.file, pos);
fdput_pos(f);
if (ret >= 0)
file_pos_write(f.file, pos);
fdput_pos(f);
@@
-916,7
+923,7
@@
SYSCALL_DEFINE3(writev, unsigned long, fd, const struct iovec __user *, vec,
if (f.file) {
loff_t pos = file_pos_read(f.file);
if (f.file) {
loff_t pos = file_pos_read(f.file);
- ret = vfs_writev(f.file, vec, vlen, &pos);
+ ret = vfs_writev(f.file, vec, vlen, &pos
, 0
);
if (ret >= 0)
file_pos_write(f.file, pos);
fdput_pos(f);
if (ret >= 0)
file_pos_write(f.file, pos);
fdput_pos(f);
@@
-948,7
+955,7
@@
SYSCALL_DEFINE5(preadv, unsigned long, fd, const struct iovec __user *, vec,
if (f.file) {
ret = -ESPIPE;
if (f.file->f_mode & FMODE_PREAD)
if (f.file) {
ret = -ESPIPE;
if (f.file->f_mode & FMODE_PREAD)
- ret = vfs_readv(f.file, vec, vlen, &pos);
+ ret = vfs_readv(f.file, vec, vlen, &pos
, 0
);
fdput(f);
}
fdput(f);
}
@@
-972,7
+979,7
@@
SYSCALL_DEFINE5(pwritev, unsigned long, fd, const struct iovec __user *, vec,
if (f.file) {
ret = -ESPIPE;
if (f.file->f_mode & FMODE_PWRITE)
if (f.file) {
ret = -ESPIPE;
if (f.file->f_mode & FMODE_PWRITE)
- ret = vfs_writev(f.file, vec, vlen, &pos);
+ ret = vfs_writev(f.file, vec, vlen, &pos
, 0
);
fdput(f);
}
fdput(f);
}
@@
-986,7
+993,8
@@
SYSCALL_DEFINE5(pwritev, unsigned long, fd, const struct iovec __user *, vec,
static ssize_t compat_do_readv_writev(int type, struct file *file,
const struct compat_iovec __user *uvector,
static ssize_t compat_do_readv_writev(int type, struct file *file,
const struct compat_iovec __user *uvector,
- unsigned long nr_segs, loff_t *pos)
+ unsigned long nr_segs, loff_t *pos,
+ int flags)
{
compat_ssize_t tot_len;
struct iovec iovstack[UIO_FASTIOV];
{
compat_ssize_t tot_len;
struct iovec iovstack[UIO_FASTIOV];
@@
-1018,9
+1026,9
@@
static ssize_t compat_do_readv_writev(int type, struct file *file,
}
if (iter_fn)
}
if (iter_fn)
- ret = do_iter_readv_writev(file, &iter, pos, iter_fn);
+ ret = do_iter_readv_writev(file, &iter, pos, iter_fn
, flags
);
else
else
- ret = do_loop_readv_writev(file, &iter, pos, fn);
+ ret = do_loop_readv_writev(file, &iter, pos, fn
, flags
);
if (type != READ)
file_end_write(file);
if (type != READ)
file_end_write(file);
@@
-1049,7
+1057,7
@@
static size_t compat_readv(struct file *file,
if (!(file->f_mode & FMODE_CAN_READ))
goto out;
if (!(file->f_mode & FMODE_CAN_READ))
goto out;
- ret = compat_do_readv_writev(READ, file, vec, vlen, pos);
+ ret = compat_do_readv_writev(READ, file, vec, vlen, pos
, 0
);
out:
if (ret > 0)
out:
if (ret > 0)
@@
-1126,7
+1134,7
@@
static size_t compat_writev(struct file *file,
if (!(file->f_mode & FMODE_CAN_WRITE))
goto out;
if (!(file->f_mode & FMODE_CAN_WRITE))
goto out;
- ret = compat_do_readv_writev(WRITE, file, vec, vlen, pos);
+ ret = compat_do_readv_writev(WRITE, file, vec, vlen, pos
, 0
);
out:
if (ret > 0)
out:
if (ret > 0)
This page took
0.027548 seconds
and
5
git commands to generate.