Skip to content

Commit ee0b3e6

Browse files
Badari PulavartyLinus Torvalds
Badari Pulavarty
authored and
Linus Torvalds
committed
[PATCH] Remove readv/writev methods and use aio_read/aio_write instead
This patch removes readv() and writev() methods and replaces them with aio_read()/aio_write() methods. Signed-off-by: Badari Pulavarty <[email protected]> Signed-off-by: Christoph Hellwig <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
1 parent 027445c commit ee0b3e6

File tree

21 files changed

+154
-388
lines changed

21 files changed

+154
-388
lines changed

drivers/char/raw.c

-2
Original file line numberDiff line numberDiff line change
@@ -257,8 +257,6 @@ static const struct file_operations raw_fops = {
257257
.open = raw_open,
258258
.release= raw_release,
259259
.ioctl = raw_ioctl,
260-
.readv = generic_file_readv,
261-
.writev = generic_file_writev,
262260
.owner = THIS_MODULE,
263261
};
264262

drivers/net/tun.c

+10-27
Original file line numberDiff line numberDiff line change
@@ -288,11 +288,10 @@ static inline size_t iov_total(const struct iovec *iv, unsigned long count)
288288
return len;
289289
}
290290

291-
/* Writev */
292-
static ssize_t tun_chr_writev(struct file * file, const struct iovec *iv,
293-
unsigned long count, loff_t *pos)
291+
static ssize_t tun_chr_aio_write(struct kiocb *iocb, const struct iovec *iv,
292+
unsigned long count, loff_t pos)
294293
{
295-
struct tun_struct *tun = file->private_data;
294+
struct tun_struct *tun = iocb->ki_filp->private_data;
296295

297296
if (!tun)
298297
return -EBADFD;
@@ -302,14 +301,6 @@ static ssize_t tun_chr_writev(struct file * file, const struct iovec *iv,
302301
return tun_get_user(tun, (struct iovec *) iv, iov_total(iv, count));
303302
}
304303

305-
/* Write */
306-
static ssize_t tun_chr_write(struct file * file, const char __user * buf,
307-
size_t count, loff_t *pos)
308-
{
309-
struct iovec iv = { (void __user *) buf, count };
310-
return tun_chr_writev(file, &iv, 1, pos);
311-
}
312-
313304
/* Put packet to the user space buffer */
314305
static __inline__ ssize_t tun_put_user(struct tun_struct *tun,
315306
struct sk_buff *skb,
@@ -343,10 +334,10 @@ static __inline__ ssize_t tun_put_user(struct tun_struct *tun,
343334
return total;
344335
}
345336

346-
/* Readv */
347-
static ssize_t tun_chr_readv(struct file *file, const struct iovec *iv,
348-
unsigned long count, loff_t *pos)
337+
static ssize_t tun_chr_aio_read(struct kiocb *iocb, const struct iovec *iv,
338+
unsigned long count, loff_t pos)
349339
{
340+
struct file *file = iocb->ki_filp;
350341
struct tun_struct *tun = file->private_data;
351342
DECLARE_WAITQUEUE(wait, current);
352343
struct sk_buff *skb;
@@ -426,14 +417,6 @@ static ssize_t tun_chr_readv(struct file *file, const struct iovec *iv,
426417
return ret;
427418
}
428419

429-
/* Read */
430-
static ssize_t tun_chr_read(struct file * file, char __user * buf,
431-
size_t count, loff_t *pos)
432-
{
433-
struct iovec iv = { buf, count };
434-
return tun_chr_readv(file, &iv, 1, pos);
435-
}
436-
437420
static void tun_setup(struct net_device *dev)
438421
{
439422
struct tun_struct *tun = netdev_priv(dev);
@@ -764,10 +747,10 @@ static int tun_chr_close(struct inode *inode, struct file *file)
764747
static struct file_operations tun_fops = {
765748
.owner = THIS_MODULE,
766749
.llseek = no_llseek,
767-
.read = tun_chr_read,
768-
.readv = tun_chr_readv,
769-
.write = tun_chr_write,
770-
.writev = tun_chr_writev,
750+
.read = do_sync_read,
751+
.aio_read = tun_chr_aio_read,
752+
.write = do_sync_write,
753+
.aio_write = tun_chr_aio_write,
771754
.poll = tun_chr_poll,
772755
.ioctl = tun_chr_ioctl,
773756
.open = tun_chr_open,

fs/bad_inode.c

-2
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,6 @@ static const struct file_operations bad_file_ops =
4040
.aio_fsync = EIO_ERROR,
4141
.fasync = EIO_ERROR,
4242
.lock = EIO_ERROR,
43-
.readv = EIO_ERROR,
44-
.writev = EIO_ERROR,
4543
.sendfile = EIO_ERROR,
4644
.sendpage = EIO_ERROR,
4745
.get_unmapped_area = EIO_ERROR,

fs/block_dev.c

-2
Original file line numberDiff line numberDiff line change
@@ -1191,8 +1191,6 @@ const struct file_operations def_blk_fops = {
11911191
#ifdef CONFIG_COMPAT
11921192
.compat_ioctl = compat_blkdev_ioctl,
11931193
#endif
1194-
.readv = generic_file_readv,
1195-
.writev = generic_file_write_nolock,
11961194
.sendfile = generic_file_sendfile,
11971195
.splice_read = generic_file_splice_read,
11981196
.splice_write = generic_file_splice_write,

fs/cifs/cifsfs.c

-16
Original file line numberDiff line numberDiff line change
@@ -480,18 +480,6 @@ cifs_get_sb(struct file_system_type *fs_type,
480480
return simple_set_mnt(mnt, sb);
481481
}
482482

483-
static ssize_t cifs_file_writev(struct file *file, const struct iovec *iov,
484-
unsigned long nr_segs, loff_t *ppos)
485-
{
486-
struct inode *inode = file->f_dentry->d_inode;
487-
ssize_t written;
488-
489-
written = generic_file_writev(file, iov, nr_segs, ppos);
490-
if (!CIFS_I(inode)->clientCanCacheAll)
491-
filemap_fdatawrite(inode->i_mapping);
492-
return written;
493-
}
494-
495483
static ssize_t cifs_file_aio_write(struct kiocb *iocb, const struct iovec *iov,
496484
unsigned long nr_segs, loff_t pos)
497485
{
@@ -577,8 +565,6 @@ struct inode_operations cifs_symlink_inode_ops = {
577565
const struct file_operations cifs_file_ops = {
578566
.read = do_sync_read,
579567
.write = do_sync_write,
580-
.readv = generic_file_readv,
581-
.writev = cifs_file_writev,
582568
.aio_read = generic_file_aio_read,
583569
.aio_write = cifs_file_aio_write,
584570
.open = cifs_open,
@@ -620,8 +606,6 @@ const struct file_operations cifs_file_direct_ops = {
620606
const struct file_operations cifs_file_nobrl_ops = {
621607
.read = do_sync_read,
622608
.write = do_sync_write,
623-
.readv = generic_file_readv,
624-
.writev = cifs_file_writev,
625609
.aio_read = generic_file_aio_read,
626610
.aio_write = cifs_file_aio_write,
627611
.open = cifs_open,

fs/compat.c

+11-33
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,8 @@ int compat_printk(const char *fmt, ...)
7070
return ret;
7171
}
7272

73+
#include "read_write.h"
74+
7375
/*
7476
* Not all architectures have sys_utime, so implement this in terms
7577
* of sys_utimes.
@@ -1149,9 +1151,6 @@ static ssize_t compat_do_readv_writev(int type, struct file *file,
11491151
const struct compat_iovec __user *uvector,
11501152
unsigned long nr_segs, loff_t *pos)
11511153
{
1152-
typedef ssize_t (*io_fn_t)(struct file *, char __user *, size_t, loff_t *);
1153-
typedef ssize_t (*iov_fn_t)(struct file *, const struct iovec *, unsigned long, loff_t *);
1154-
11551154
compat_ssize_t tot_len;
11561155
struct iovec iovstack[UIO_FASTIOV];
11571156
struct iovec *iov=iovstack, *vector;
@@ -1234,39 +1233,18 @@ static ssize_t compat_do_readv_writev(int type, struct file *file,
12341233
fnv = NULL;
12351234
if (type == READ) {
12361235
fn = file->f_op->read;
1237-
fnv = file->f_op->readv;
1236+
fnv = file->f_op->aio_read;
12381237
} else {
12391238
fn = (io_fn_t)file->f_op->write;
1240-
fnv = file->f_op->writev;
1241-
}
1242-
if (fnv) {
1243-
ret = fnv(file, iov, nr_segs, pos);
1244-
goto out;
1239+
fnv = file->f_op->aio_write;
12451240
}
12461241

1247-
/* Do it by hand, with file-ops */
1248-
ret = 0;
1249-
vector = iov;
1250-
while (nr_segs > 0) {
1251-
void __user * base;
1252-
size_t len;
1253-
ssize_t nr;
1254-
1255-
base = vector->iov_base;
1256-
len = vector->iov_len;
1257-
vector++;
1258-
nr_segs--;
1259-
1260-
nr = fn(file, base, len, pos);
1242+
if (fnv)
1243+
ret = do_sync_readv_writev(file, iov, nr_segs, tot_len,
1244+
pos, fnv);
1245+
else
1246+
ret = do_loop_readv_writev(file, iov, nr_segs, pos, fn);
12611247

1262-
if (nr < 0) {
1263-
if (!ret) ret = nr;
1264-
break;
1265-
}
1266-
ret += nr;
1267-
if (nr != len)
1268-
break;
1269-
}
12701248
out:
12711249
if (iov != iovstack)
12721250
kfree(iov);
@@ -1294,7 +1272,7 @@ compat_sys_readv(unsigned long fd, const struct compat_iovec __user *vec, unsign
12941272
goto out;
12951273

12961274
ret = -EINVAL;
1297-
if (!file->f_op || (!file->f_op->readv && !file->f_op->read))
1275+
if (!file->f_op || (!file->f_op->aio_read && !file->f_op->read))
12981276
goto out;
12991277

13001278
ret = compat_do_readv_writev(READ, file, vec, vlen, &file->f_pos);
@@ -1317,7 +1295,7 @@ compat_sys_writev(unsigned long fd, const struct compat_iovec __user *vec, unsig
13171295
goto out;
13181296

13191297
ret = -EINVAL;
1320-
if (!file->f_op || (!file->f_op->writev && !file->f_op->write))
1298+
if (!file->f_op || (!file->f_op->aio_write && !file->f_op->write))
13211299
goto out;
13221300

13231301
ret = compat_do_readv_writev(WRITE, file, vec, vlen, &file->f_pos);

fs/ext2/file.c

-2
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,6 @@ const struct file_operations ext2_file_operations = {
5353
.open = generic_file_open,
5454
.release = ext2_release_file,
5555
.fsync = ext2_sync_file,
56-
.readv = generic_file_readv,
57-
.writev = generic_file_writev,
5856
.sendfile = generic_file_sendfile,
5957
.splice_read = generic_file_splice_read,
6058
.splice_write = generic_file_splice_write,

fs/ext3/file.c

-2
Original file line numberDiff line numberDiff line change
@@ -112,8 +112,6 @@ const struct file_operations ext3_file_operations = {
112112
.write = do_sync_write,
113113
.aio_read = generic_file_aio_read,
114114
.aio_write = ext3_file_write,
115-
.readv = generic_file_readv,
116-
.writev = generic_file_writev,
117115
.ioctl = ext3_ioctl,
118116
#ifdef CONFIG_COMPAT
119117
.compat_ioctl = ext3_compat_ioctl,

fs/fat/file.c

-2
Original file line numberDiff line numberDiff line change
@@ -127,8 +127,6 @@ const struct file_operations fat_file_operations = {
127127
.llseek = generic_file_llseek,
128128
.read = do_sync_read,
129129
.write = do_sync_write,
130-
.readv = generic_file_readv,
131-
.writev = generic_file_writev,
132130
.aio_read = generic_file_aio_read,
133131
.aio_write = generic_file_aio_write,
134132
.mmap = generic_file_mmap,

fs/fuse/dev.c

+10-27
Original file line numberDiff line numberDiff line change
@@ -680,14 +680,15 @@ static int fuse_read_interrupt(struct fuse_conn *fc, struct fuse_req *req,
680680
* request_end(). Otherwise add it to the processing list, and set
681681
* the 'sent' flag.
682682
*/
683-
static ssize_t fuse_dev_readv(struct file *file, const struct iovec *iov,
684-
unsigned long nr_segs, loff_t *off)
683+
static ssize_t fuse_dev_read(struct kiocb *iocb, const struct iovec *iov,
684+
unsigned long nr_segs, loff_t pos)
685685
{
686686
int err;
687687
struct fuse_req *req;
688688
struct fuse_in *in;
689689
struct fuse_copy_state cs;
690690
unsigned reqsize;
691+
struct file *file = iocb->ki_filp;
691692
struct fuse_conn *fc = fuse_get_conn(file);
692693
if (!fc)
693694
return -EPERM;
@@ -761,15 +762,6 @@ static ssize_t fuse_dev_readv(struct file *file, const struct iovec *iov,
761762
return err;
762763
}
763764

764-
static ssize_t fuse_dev_read(struct file *file, char __user *buf,
765-
size_t nbytes, loff_t *off)
766-
{
767-
struct iovec iov;
768-
iov.iov_len = nbytes;
769-
iov.iov_base = buf;
770-
return fuse_dev_readv(file, &iov, 1, off);
771-
}
772-
773765
/* Look up request on processing list by unique ID */
774766
static struct fuse_req *request_find(struct fuse_conn *fc, u64 unique)
775767
{
@@ -814,15 +806,15 @@ static int copy_out_args(struct fuse_copy_state *cs, struct fuse_out *out,
814806
* it from the list and copy the rest of the buffer to the request.
815807
* The request is finished by calling request_end()
816808
*/
817-
static ssize_t fuse_dev_writev(struct file *file, const struct iovec *iov,
818-
unsigned long nr_segs, loff_t *off)
809+
static ssize_t fuse_dev_write(struct kiocb *iocb, const struct iovec *iov,
810+
unsigned long nr_segs, loff_t pos)
819811
{
820812
int err;
821813
unsigned nbytes = iov_length(iov, nr_segs);
822814
struct fuse_req *req;
823815
struct fuse_out_header oh;
824816
struct fuse_copy_state cs;
825-
struct fuse_conn *fc = fuse_get_conn(file);
817+
struct fuse_conn *fc = fuse_get_conn(iocb->ki_filp);
826818
if (!fc)
827819
return -EPERM;
828820

@@ -898,15 +890,6 @@ static ssize_t fuse_dev_writev(struct file *file, const struct iovec *iov,
898890
return err;
899891
}
900892

901-
static ssize_t fuse_dev_write(struct file *file, const char __user *buf,
902-
size_t nbytes, loff_t *off)
903-
{
904-
struct iovec iov;
905-
iov.iov_len = nbytes;
906-
iov.iov_base = (char __user *) buf;
907-
return fuse_dev_writev(file, &iov, 1, off);
908-
}
909-
910893
static unsigned fuse_dev_poll(struct file *file, poll_table *wait)
911894
{
912895
unsigned mask = POLLOUT | POLLWRNORM;
@@ -1041,10 +1024,10 @@ static int fuse_dev_fasync(int fd, struct file *file, int on)
10411024
const struct file_operations fuse_dev_operations = {
10421025
.owner = THIS_MODULE,
10431026
.llseek = no_llseek,
1044-
.read = fuse_dev_read,
1045-
.readv = fuse_dev_readv,
1046-
.write = fuse_dev_write,
1047-
.writev = fuse_dev_writev,
1027+
.read = do_sync_read,
1028+
.aio_read = fuse_dev_read,
1029+
.write = do_sync_write,
1030+
.aio_write = fuse_dev_write,
10481031
.poll = fuse_dev_poll,
10491032
.release = fuse_dev_release,
10501033
.fasync = fuse_dev_fasync,

fs/hostfs/hostfs_kern.c

-2
Original file line numberDiff line numberDiff line change
@@ -389,8 +389,6 @@ static const struct file_operations hostfs_file_fops = {
389389
.sendfile = generic_file_sendfile,
390390
.aio_read = generic_file_aio_read,
391391
.aio_write = generic_file_aio_write,
392-
.readv = generic_file_readv,
393-
.writev = generic_file_writev,
394392
.write = generic_file_write,
395393
.mmap = generic_file_mmap,
396394
.open = hostfs_file_open,

fs/jfs/file.c

-2
Original file line numberDiff line numberDiff line change
@@ -108,8 +108,6 @@ const struct file_operations jfs_file_operations = {
108108
.aio_read = generic_file_aio_read,
109109
.aio_write = generic_file_aio_write,
110110
.mmap = generic_file_mmap,
111-
.readv = generic_file_readv,
112-
.writev = generic_file_writev,
113111
.sendfile = generic_file_sendfile,
114112
.fsync = jfs_fsync,
115113
.release = jfs_release,

fs/ntfs/file.c

-2
Original file line numberDiff line numberDiff line change
@@ -2298,11 +2298,9 @@ const struct file_operations ntfs_file_ops = {
22982298
.llseek = generic_file_llseek, /* Seek inside file. */
22992299
.read = generic_file_read, /* Read from file. */
23002300
.aio_read = generic_file_aio_read, /* Async read from file. */
2301-
.readv = generic_file_readv, /* Read from file. */
23022301
#ifdef NTFS_RW
23032302
.write = ntfs_file_write, /* Write to file. */
23042303
.aio_write = ntfs_file_aio_write, /* Async write to file. */
2305-
.writev = ntfs_file_writev, /* Write to file. */
23062304
/*.release = ,*/ /* Last file is closed. See
23072305
fs/ext2/file.c::
23082306
ext2_release_file() for

0 commit comments

Comments
 (0)