diff options
37 files changed, 43 insertions, 131 deletions
diff --git a/fs/adfs/file.c b/fs/adfs/file.c index f544a2855923..36e381c6a99a 100644 --- a/fs/adfs/file.c +++ b/fs/adfs/file.c | |||
@@ -33,7 +33,7 @@ const struct file_operations adfs_file_operations = { | |||
33 | .fsync = file_fsync, | 33 | .fsync = file_fsync, |
34 | .write = do_sync_write, | 34 | .write = do_sync_write, |
35 | .aio_write = generic_file_aio_write, | 35 | .aio_write = generic_file_aio_write, |
36 | .sendfile = generic_file_sendfile, | 36 | .splice_read = generic_file_splice_read, |
37 | }; | 37 | }; |
38 | 38 | ||
39 | const struct inode_operations adfs_file_inode_operations = { | 39 | const struct inode_operations adfs_file_inode_operations = { |
diff --git a/fs/affs/file.c b/fs/affs/file.c index c8796906f584..c314a35f0918 100644 --- a/fs/affs/file.c +++ b/fs/affs/file.c | |||
@@ -35,7 +35,7 @@ const struct file_operations affs_file_operations = { | |||
35 | .open = affs_file_open, | 35 | .open = affs_file_open, |
36 | .release = affs_file_release, | 36 | .release = affs_file_release, |
37 | .fsync = file_fsync, | 37 | .fsync = file_fsync, |
38 | .sendfile = generic_file_sendfile, | 38 | .splice_read = generic_file_splice_read, |
39 | }; | 39 | }; |
40 | 40 | ||
41 | const struct inode_operations affs_file_inode_operations = { | 41 | const struct inode_operations affs_file_inode_operations = { |
diff --git a/fs/afs/file.c b/fs/afs/file.c index 9c0e721d9fc2..aede7eb66dd4 100644 --- a/fs/afs/file.c +++ b/fs/afs/file.c | |||
@@ -32,7 +32,7 @@ const struct file_operations afs_file_operations = { | |||
32 | .aio_read = generic_file_aio_read, | 32 | .aio_read = generic_file_aio_read, |
33 | .aio_write = afs_file_write, | 33 | .aio_write = afs_file_write, |
34 | .mmap = generic_file_readonly_mmap, | 34 | .mmap = generic_file_readonly_mmap, |
35 | .sendfile = generic_file_sendfile, | 35 | .splice_read = generic_file_splice_read, |
36 | .fsync = afs_fsync, | 36 | .fsync = afs_fsync, |
37 | }; | 37 | }; |
38 | 38 | ||
diff --git a/fs/bfs/file.c b/fs/bfs/file.c index ef4d1fa04e65..24310e9ee05a 100644 --- a/fs/bfs/file.c +++ b/fs/bfs/file.c | |||
@@ -24,7 +24,7 @@ const struct file_operations bfs_file_operations = { | |||
24 | .write = do_sync_write, | 24 | .write = do_sync_write, |
25 | .aio_write = generic_file_aio_write, | 25 | .aio_write = generic_file_aio_write, |
26 | .mmap = generic_file_mmap, | 26 | .mmap = generic_file_mmap, |
27 | .sendfile = generic_file_sendfile, | 27 | .splice_read = generic_file_splice_read, |
28 | }; | 28 | }; |
29 | 29 | ||
30 | static int bfs_move_block(unsigned long from, unsigned long to, struct super_block *sb) | 30 | static int bfs_move_block(unsigned long from, unsigned long to, struct super_block *sb) |
diff --git a/fs/block_dev.c b/fs/block_dev.c index ea1480a16f51..b3e9bfa748cf 100644 --- a/fs/block_dev.c +++ b/fs/block_dev.c | |||
@@ -1346,7 +1346,6 @@ const struct file_operations def_blk_fops = { | |||
1346 | #ifdef CONFIG_COMPAT | 1346 | #ifdef CONFIG_COMPAT |
1347 | .compat_ioctl = compat_blkdev_ioctl, | 1347 | .compat_ioctl = compat_blkdev_ioctl, |
1348 | #endif | 1348 | #endif |
1349 | .sendfile = generic_file_sendfile, | ||
1350 | .splice_read = generic_file_splice_read, | 1349 | .splice_read = generic_file_splice_read, |
1351 | .splice_write = generic_file_splice_write, | 1350 | .splice_write = generic_file_splice_write, |
1352 | }; | 1351 | }; |
diff --git a/fs/cifs/cifsfs.c b/fs/cifs/cifsfs.c index 7c04752b76cb..8b0cbf4a4ad0 100644 --- a/fs/cifs/cifsfs.c +++ b/fs/cifs/cifsfs.c | |||
@@ -616,7 +616,7 @@ const struct file_operations cifs_file_ops = { | |||
616 | .fsync = cifs_fsync, | 616 | .fsync = cifs_fsync, |
617 | .flush = cifs_flush, | 617 | .flush = cifs_flush, |
618 | .mmap = cifs_file_mmap, | 618 | .mmap = cifs_file_mmap, |
619 | .sendfile = generic_file_sendfile, | 619 | .splice_read = generic_file_splice_read, |
620 | .llseek = cifs_llseek, | 620 | .llseek = cifs_llseek, |
621 | #ifdef CONFIG_CIFS_POSIX | 621 | #ifdef CONFIG_CIFS_POSIX |
622 | .ioctl = cifs_ioctl, | 622 | .ioctl = cifs_ioctl, |
@@ -637,7 +637,7 @@ const struct file_operations cifs_file_direct_ops = { | |||
637 | .lock = cifs_lock, | 637 | .lock = cifs_lock, |
638 | .fsync = cifs_fsync, | 638 | .fsync = cifs_fsync, |
639 | .flush = cifs_flush, | 639 | .flush = cifs_flush, |
640 | .sendfile = generic_file_sendfile, /* BB removeme BB */ | 640 | .splice_read = generic_file_splice_read, |
641 | #ifdef CONFIG_CIFS_POSIX | 641 | #ifdef CONFIG_CIFS_POSIX |
642 | .ioctl = cifs_ioctl, | 642 | .ioctl = cifs_ioctl, |
643 | #endif /* CONFIG_CIFS_POSIX */ | 643 | #endif /* CONFIG_CIFS_POSIX */ |
@@ -656,7 +656,7 @@ const struct file_operations cifs_file_nobrl_ops = { | |||
656 | .fsync = cifs_fsync, | 656 | .fsync = cifs_fsync, |
657 | .flush = cifs_flush, | 657 | .flush = cifs_flush, |
658 | .mmap = cifs_file_mmap, | 658 | .mmap = cifs_file_mmap, |
659 | .sendfile = generic_file_sendfile, | 659 | .splice_read = generic_file_splice_read, |
660 | .llseek = cifs_llseek, | 660 | .llseek = cifs_llseek, |
661 | #ifdef CONFIG_CIFS_POSIX | 661 | #ifdef CONFIG_CIFS_POSIX |
662 | .ioctl = cifs_ioctl, | 662 | .ioctl = cifs_ioctl, |
@@ -676,7 +676,7 @@ const struct file_operations cifs_file_direct_nobrl_ops = { | |||
676 | .release = cifs_close, | 676 | .release = cifs_close, |
677 | .fsync = cifs_fsync, | 677 | .fsync = cifs_fsync, |
678 | .flush = cifs_flush, | 678 | .flush = cifs_flush, |
679 | .sendfile = generic_file_sendfile, /* BB removeme BB */ | 679 | .splice_read = generic_file_splice_read, |
680 | #ifdef CONFIG_CIFS_POSIX | 680 | #ifdef CONFIG_CIFS_POSIX |
681 | .ioctl = cifs_ioctl, | 681 | .ioctl = cifs_ioctl, |
682 | #endif /* CONFIG_CIFS_POSIX */ | 682 | #endif /* CONFIG_CIFS_POSIX */ |
diff --git a/fs/coda/file.c b/fs/coda/file.c index 5ef2b609ec7d..99dbe866816d 100644 --- a/fs/coda/file.c +++ b/fs/coda/file.c | |||
@@ -47,8 +47,9 @@ coda_file_read(struct file *coda_file, char __user *buf, size_t count, loff_t *p | |||
47 | } | 47 | } |
48 | 48 | ||
49 | static ssize_t | 49 | static ssize_t |
50 | coda_file_sendfile(struct file *coda_file, loff_t *ppos, size_t count, | 50 | coda_file_splice_read(struct file *coda_file, loff_t *ppos, |
51 | read_actor_t actor, void *target) | 51 | struct pipe_inode_info *pipe, size_t count, |
52 | unsigned int flags) | ||
52 | { | 53 | { |
53 | struct coda_file_info *cfi; | 54 | struct coda_file_info *cfi; |
54 | struct file *host_file; | 55 | struct file *host_file; |
@@ -57,10 +58,10 @@ coda_file_sendfile(struct file *coda_file, loff_t *ppos, size_t count, | |||
57 | BUG_ON(!cfi || cfi->cfi_magic != CODA_MAGIC); | 58 | BUG_ON(!cfi || cfi->cfi_magic != CODA_MAGIC); |
58 | host_file = cfi->cfi_container; | 59 | host_file = cfi->cfi_container; |
59 | 60 | ||
60 | if (!host_file->f_op || !host_file->f_op->sendfile) | 61 | if (!host_file->f_op || !host_file->f_op->splice_read) |
61 | return -EINVAL; | 62 | return -EINVAL; |
62 | 63 | ||
63 | return host_file->f_op->sendfile(host_file, ppos, count, actor, target); | 64 | return host_file->f_op->splice_read(host_file, ppos, pipe, count,flags); |
64 | } | 65 | } |
65 | 66 | ||
66 | static ssize_t | 67 | static ssize_t |
@@ -295,6 +296,6 @@ const struct file_operations coda_file_operations = { | |||
295 | .flush = coda_flush, | 296 | .flush = coda_flush, |
296 | .release = coda_release, | 297 | .release = coda_release, |
297 | .fsync = coda_fsync, | 298 | .fsync = coda_fsync, |
298 | .sendfile = coda_file_sendfile, | 299 | .splice_read = coda_file_splice_read, |
299 | }; | 300 | }; |
300 | 301 | ||
diff --git a/fs/ecryptfs/file.c b/fs/ecryptfs/file.c index 59288d817078..94f456fe4d9b 100644 --- a/fs/ecryptfs/file.c +++ b/fs/ecryptfs/file.c | |||
@@ -338,16 +338,17 @@ static int ecryptfs_fasync(int fd, struct file *file, int flag) | |||
338 | return rc; | 338 | return rc; |
339 | } | 339 | } |
340 | 340 | ||
341 | static ssize_t ecryptfs_sendfile(struct file *file, loff_t * ppos, | 341 | static ssize_t ecryptfs_splice_read(struct file *file, loff_t * ppos, |
342 | size_t count, read_actor_t actor, void *target) | 342 | struct pipe_inode_info *pipe, size_t count, |
343 | unsigned int flags) | ||
343 | { | 344 | { |
344 | struct file *lower_file = NULL; | 345 | struct file *lower_file = NULL; |
345 | int rc = -EINVAL; | 346 | int rc = -EINVAL; |
346 | 347 | ||
347 | lower_file = ecryptfs_file_to_lower(file); | 348 | lower_file = ecryptfs_file_to_lower(file); |
348 | if (lower_file->f_op && lower_file->f_op->sendfile) | 349 | if (lower_file->f_op && lower_file->f_op->splice_read) |
349 | rc = lower_file->f_op->sendfile(lower_file, ppos, count, | 350 | rc = lower_file->f_op->splice_read(lower_file, ppos, pipe, |
350 | actor, target); | 351 | count, flags); |
351 | 352 | ||
352 | return rc; | 353 | return rc; |
353 | } | 354 | } |
@@ -364,7 +365,7 @@ const struct file_operations ecryptfs_dir_fops = { | |||
364 | .release = ecryptfs_release, | 365 | .release = ecryptfs_release, |
365 | .fsync = ecryptfs_fsync, | 366 | .fsync = ecryptfs_fsync, |
366 | .fasync = ecryptfs_fasync, | 367 | .fasync = ecryptfs_fasync, |
367 | .sendfile = ecryptfs_sendfile, | 368 | .splice_read = ecryptfs_splice_read, |
368 | }; | 369 | }; |
369 | 370 | ||
370 | const struct file_operations ecryptfs_main_fops = { | 371 | const struct file_operations ecryptfs_main_fops = { |
@@ -381,7 +382,7 @@ const struct file_operations ecryptfs_main_fops = { | |||
381 | .release = ecryptfs_release, | 382 | .release = ecryptfs_release, |
382 | .fsync = ecryptfs_fsync, | 383 | .fsync = ecryptfs_fsync, |
383 | .fasync = ecryptfs_fasync, | 384 | .fasync = ecryptfs_fasync, |
384 | .sendfile = ecryptfs_sendfile, | 385 | .splice_read = ecryptfs_splice_read, |
385 | }; | 386 | }; |
386 | 387 | ||
387 | static int | 388 | static int |
diff --git a/fs/ext2/file.c b/fs/ext2/file.c index 566d4e2d3852..072a1909b2bc 100644 --- a/fs/ext2/file.c +++ b/fs/ext2/file.c | |||
@@ -53,7 +53,6 @@ const struct file_operations ext2_file_operations = { | |||
53 | .open = generic_file_open, | 53 | .open = generic_file_open, |
54 | .release = ext2_release_file, | 54 | .release = ext2_release_file, |
55 | .fsync = ext2_sync_file, | 55 | .fsync = ext2_sync_file, |
56 | .sendfile = generic_file_sendfile, | ||
57 | .splice_read = generic_file_splice_read, | 56 | .splice_read = generic_file_splice_read, |
58 | .splice_write = generic_file_splice_write, | 57 | .splice_write = generic_file_splice_write, |
59 | }; | 58 | }; |
diff --git a/fs/ext3/file.c b/fs/ext3/file.c index 1e6f13864536..acc4913d3019 100644 --- a/fs/ext3/file.c +++ b/fs/ext3/file.c | |||
@@ -120,7 +120,6 @@ const struct file_operations ext3_file_operations = { | |||
120 | .open = generic_file_open, | 120 | .open = generic_file_open, |
121 | .release = ext3_release_file, | 121 | .release = ext3_release_file, |
122 | .fsync = ext3_sync_file, | 122 | .fsync = ext3_sync_file, |
123 | .sendfile = generic_file_sendfile, | ||
124 | .splice_read = generic_file_splice_read, | 123 | .splice_read = generic_file_splice_read, |
125 | .splice_write = generic_file_splice_write, | 124 | .splice_write = generic_file_splice_write, |
126 | }; | 125 | }; |
diff --git a/fs/ext4/file.c b/fs/ext4/file.c index 3c6c1fd2be90..d4c8186aed64 100644 --- a/fs/ext4/file.c +++ b/fs/ext4/file.c | |||
@@ -120,7 +120,6 @@ const struct file_operations ext4_file_operations = { | |||
120 | .open = generic_file_open, | 120 | .open = generic_file_open, |
121 | .release = ext4_release_file, | 121 | .release = ext4_release_file, |
122 | .fsync = ext4_sync_file, | 122 | .fsync = ext4_sync_file, |
123 | .sendfile = generic_file_sendfile, | ||
124 | .splice_read = generic_file_splice_read, | 123 | .splice_read = generic_file_splice_read, |
125 | .splice_write = generic_file_splice_write, | 124 | .splice_write = generic_file_splice_write, |
126 | }; | 125 | }; |
diff --git a/fs/fat/file.c b/fs/fat/file.c index 55d3c7461c5b..69a83b59dce8 100644 --- a/fs/fat/file.c +++ b/fs/fat/file.c | |||
@@ -134,7 +134,7 @@ const struct file_operations fat_file_operations = { | |||
134 | .release = fat_file_release, | 134 | .release = fat_file_release, |
135 | .ioctl = fat_generic_ioctl, | 135 | .ioctl = fat_generic_ioctl, |
136 | .fsync = file_fsync, | 136 | .fsync = file_fsync, |
137 | .sendfile = generic_file_sendfile, | 137 | .splice_read = generic_file_splice_read, |
138 | }; | 138 | }; |
139 | 139 | ||
140 | static int fat_cont_expand(struct inode *inode, loff_t size) | 140 | static int fat_cont_expand(struct inode *inode, loff_t size) |
diff --git a/fs/fuse/file.c b/fs/fuse/file.c index adf7995232b8..f79de7c8cdfa 100644 --- a/fs/fuse/file.c +++ b/fs/fuse/file.c | |||
@@ -802,7 +802,7 @@ static const struct file_operations fuse_file_operations = { | |||
802 | .release = fuse_release, | 802 | .release = fuse_release, |
803 | .fsync = fuse_fsync, | 803 | .fsync = fuse_fsync, |
804 | .lock = fuse_file_lock, | 804 | .lock = fuse_file_lock, |
805 | .sendfile = generic_file_sendfile, | 805 | .splice_read = generic_file_splice_read, |
806 | }; | 806 | }; |
807 | 807 | ||
808 | static const struct file_operations fuse_direct_io_file_operations = { | 808 | static const struct file_operations fuse_direct_io_file_operations = { |
@@ -814,7 +814,7 @@ static const struct file_operations fuse_direct_io_file_operations = { | |||
814 | .release = fuse_release, | 814 | .release = fuse_release, |
815 | .fsync = fuse_fsync, | 815 | .fsync = fuse_fsync, |
816 | .lock = fuse_file_lock, | 816 | .lock = fuse_file_lock, |
817 | /* no mmap and sendfile */ | 817 | /* no mmap and splice_read */ |
818 | }; | 818 | }; |
819 | 819 | ||
820 | static const struct address_space_operations fuse_file_aops = { | 820 | static const struct address_space_operations fuse_file_aops = { |
diff --git a/fs/gfs2/ops_file.c b/fs/gfs2/ops_file.c index 064df8804582..7dc3be108204 100644 --- a/fs/gfs2/ops_file.c +++ b/fs/gfs2/ops_file.c | |||
@@ -635,7 +635,6 @@ const struct file_operations gfs2_file_fops = { | |||
635 | .release = gfs2_close, | 635 | .release = gfs2_close, |
636 | .fsync = gfs2_fsync, | 636 | .fsync = gfs2_fsync, |
637 | .lock = gfs2_lock, | 637 | .lock = gfs2_lock, |
638 | .sendfile = generic_file_sendfile, | ||
639 | .flock = gfs2_flock, | 638 | .flock = gfs2_flock, |
640 | .splice_read = generic_file_splice_read, | 639 | .splice_read = generic_file_splice_read, |
641 | .splice_write = generic_file_splice_write, | 640 | .splice_write = generic_file_splice_write, |
diff --git a/fs/hfs/inode.c b/fs/hfs/inode.c index 9a934db0bd8a..bc835f272a6e 100644 --- a/fs/hfs/inode.c +++ b/fs/hfs/inode.c | |||
@@ -607,7 +607,7 @@ static const struct file_operations hfs_file_operations = { | |||
607 | .write = do_sync_write, | 607 | .write = do_sync_write, |
608 | .aio_write = generic_file_aio_write, | 608 | .aio_write = generic_file_aio_write, |
609 | .mmap = generic_file_mmap, | 609 | .mmap = generic_file_mmap, |
610 | .sendfile = generic_file_sendfile, | 610 | .splice_read = generic_file_splice_read, |
611 | .fsync = file_fsync, | 611 | .fsync = file_fsync, |
612 | .open = hfs_file_open, | 612 | .open = hfs_file_open, |
613 | .release = hfs_file_release, | 613 | .release = hfs_file_release, |
diff --git a/fs/hfsplus/inode.c b/fs/hfsplus/inode.c index 45dab5d6cc10..409ce5429c91 100644 --- a/fs/hfsplus/inode.c +++ b/fs/hfsplus/inode.c | |||
@@ -288,7 +288,7 @@ static const struct file_operations hfsplus_file_operations = { | |||
288 | .write = do_sync_write, | 288 | .write = do_sync_write, |
289 | .aio_write = generic_file_aio_write, | 289 | .aio_write = generic_file_aio_write, |
290 | .mmap = generic_file_mmap, | 290 | .mmap = generic_file_mmap, |
291 | .sendfile = generic_file_sendfile, | 291 | .splice_read = generic_file_splice_read, |
292 | .fsync = file_fsync, | 292 | .fsync = file_fsync, |
293 | .open = hfsplus_file_open, | 293 | .open = hfsplus_file_open, |
294 | .release = hfsplus_file_release, | 294 | .release = hfsplus_file_release, |
diff --git a/fs/hostfs/hostfs_kern.c b/fs/hostfs/hostfs_kern.c index 8286491dbf31..c77862032e84 100644 --- a/fs/hostfs/hostfs_kern.c +++ b/fs/hostfs/hostfs_kern.c | |||
@@ -390,7 +390,7 @@ int hostfs_fsync(struct file *file, struct dentry *dentry, int datasync) | |||
390 | static const struct file_operations hostfs_file_fops = { | 390 | static const struct file_operations hostfs_file_fops = { |
391 | .llseek = generic_file_llseek, | 391 | .llseek = generic_file_llseek, |
392 | .read = do_sync_read, | 392 | .read = do_sync_read, |
393 | .sendfile = generic_file_sendfile, | 393 | .splice_read = generic_file_splice_read, |
394 | .aio_read = generic_file_aio_read, | 394 | .aio_read = generic_file_aio_read, |
395 | .aio_write = generic_file_aio_write, | 395 | .aio_write = generic_file_aio_write, |
396 | .write = do_sync_write, | 396 | .write = do_sync_write, |
diff --git a/fs/hpfs/file.c b/fs/hpfs/file.c index b4eafc0f1e54..5b53e5c5d8df 100644 --- a/fs/hpfs/file.c +++ b/fs/hpfs/file.c | |||
@@ -129,7 +129,7 @@ const struct file_operations hpfs_file_ops = | |||
129 | .mmap = generic_file_mmap, | 129 | .mmap = generic_file_mmap, |
130 | .release = hpfs_file_release, | 130 | .release = hpfs_file_release, |
131 | .fsync = hpfs_file_fsync, | 131 | .fsync = hpfs_file_fsync, |
132 | .sendfile = generic_file_sendfile, | 132 | .splice_read = generic_file_splice_read, |
133 | }; | 133 | }; |
134 | 134 | ||
135 | const struct inode_operations hpfs_file_iops = | 135 | const struct inode_operations hpfs_file_iops = |
diff --git a/fs/jffs2/file.c b/fs/jffs2/file.c index 99871279a1ed..c2530197be0c 100644 --- a/fs/jffs2/file.c +++ b/fs/jffs2/file.c | |||
@@ -47,7 +47,7 @@ const struct file_operations jffs2_file_operations = | |||
47 | .ioctl = jffs2_ioctl, | 47 | .ioctl = jffs2_ioctl, |
48 | .mmap = generic_file_readonly_mmap, | 48 | .mmap = generic_file_readonly_mmap, |
49 | .fsync = jffs2_fsync, | 49 | .fsync = jffs2_fsync, |
50 | .sendfile = generic_file_sendfile | 50 | .splice_read = generic_file_splice_read, |
51 | }; | 51 | }; |
52 | 52 | ||
53 | /* jffs2_file_inode_operations */ | 53 | /* jffs2_file_inode_operations */ |
diff --git a/fs/jfs/file.c b/fs/jfs/file.c index f7f8eff19b7b..87eb93694af7 100644 --- a/fs/jfs/file.c +++ b/fs/jfs/file.c | |||
@@ -108,7 +108,6 @@ const struct file_operations jfs_file_operations = { | |||
108 | .aio_read = generic_file_aio_read, | 108 | .aio_read = generic_file_aio_read, |
109 | .aio_write = generic_file_aio_write, | 109 | .aio_write = generic_file_aio_write, |
110 | .mmap = generic_file_mmap, | 110 | .mmap = generic_file_mmap, |
111 | .sendfile = generic_file_sendfile, | ||
112 | .splice_read = generic_file_splice_read, | 111 | .splice_read = generic_file_splice_read, |
113 | .splice_write = generic_file_splice_write, | 112 | .splice_write = generic_file_splice_write, |
114 | .fsync = jfs_fsync, | 113 | .fsync = jfs_fsync, |
diff --git a/fs/minix/file.c b/fs/minix/file.c index f92baa1d7570..17765f697e50 100644 --- a/fs/minix/file.c +++ b/fs/minix/file.c | |||
@@ -23,7 +23,7 @@ const struct file_operations minix_file_operations = { | |||
23 | .aio_write = generic_file_aio_write, | 23 | .aio_write = generic_file_aio_write, |
24 | .mmap = generic_file_mmap, | 24 | .mmap = generic_file_mmap, |
25 | .fsync = minix_sync_file, | 25 | .fsync = minix_sync_file, |
26 | .sendfile = generic_file_sendfile, | 26 | .splice_read = generic_file_splice_read, |
27 | }; | 27 | }; |
28 | 28 | ||
29 | const struct inode_operations minix_file_inode_operations = { | 29 | const struct inode_operations minix_file_inode_operations = { |
diff --git a/fs/ntfs/file.c b/fs/ntfs/file.c index 7ed56390b582..ffcc504a1667 100644 --- a/fs/ntfs/file.c +++ b/fs/ntfs/file.c | |||
@@ -2276,7 +2276,7 @@ const struct file_operations ntfs_file_ops = { | |||
2276 | mounted filesystem. */ | 2276 | mounted filesystem. */ |
2277 | .mmap = generic_file_mmap, /* Mmap file. */ | 2277 | .mmap = generic_file_mmap, /* Mmap file. */ |
2278 | .open = ntfs_file_open, /* Open file. */ | 2278 | .open = ntfs_file_open, /* Open file. */ |
2279 | .sendfile = generic_file_sendfile, /* Zero-copy data send with | 2279 | .splice_read = generic_file_splice_read /* Zero-copy data send with |
2280 | the data source being on | 2280 | the data source being on |
2281 | the ntfs partition. We do | 2281 | the ntfs partition. We do |
2282 | not need to care about the | 2282 | not need to care about the |
diff --git a/fs/ocfs2/file.c b/fs/ocfs2/file.c index 222f108ee454..ed1ffa70cc38 100644 --- a/fs/ocfs2/file.c +++ b/fs/ocfs2/file.c | |||
@@ -1822,7 +1822,6 @@ const struct inode_operations ocfs2_special_file_iops = { | |||
1822 | const struct file_operations ocfs2_fops = { | 1822 | const struct file_operations ocfs2_fops = { |
1823 | .read = do_sync_read, | 1823 | .read = do_sync_read, |
1824 | .write = do_sync_write, | 1824 | .write = do_sync_write, |
1825 | .sendfile = generic_file_sendfile, | ||
1826 | .mmap = ocfs2_mmap, | 1825 | .mmap = ocfs2_mmap, |
1827 | .fsync = ocfs2_sync_file, | 1826 | .fsync = ocfs2_sync_file, |
1828 | .release = ocfs2_file_release, | 1827 | .release = ocfs2_file_release, |
diff --git a/fs/qnx4/file.c b/fs/qnx4/file.c index 44649981bbc8..867f42b02035 100644 --- a/fs/qnx4/file.c +++ b/fs/qnx4/file.c | |||
@@ -25,7 +25,7 @@ const struct file_operations qnx4_file_operations = | |||
25 | .read = do_sync_read, | 25 | .read = do_sync_read, |
26 | .aio_read = generic_file_aio_read, | 26 | .aio_read = generic_file_aio_read, |
27 | .mmap = generic_file_mmap, | 27 | .mmap = generic_file_mmap, |
28 | .sendfile = generic_file_sendfile, | 28 | .splice_read = generic_file_splice_read, |
29 | #ifdef CONFIG_QNX4FS_RW | 29 | #ifdef CONFIG_QNX4FS_RW |
30 | .write = do_sync_write, | 30 | .write = do_sync_write, |
31 | .aio_write = generic_file_aio_write, | 31 | .aio_write = generic_file_aio_write, |
diff --git a/fs/ramfs/file-mmu.c b/fs/ramfs/file-mmu.c index 2f14774a124f..97bdc0b2f9d2 100644 --- a/fs/ramfs/file-mmu.c +++ b/fs/ramfs/file-mmu.c | |||
@@ -41,7 +41,7 @@ const struct file_operations ramfs_file_operations = { | |||
41 | .aio_write = generic_file_aio_write, | 41 | .aio_write = generic_file_aio_write, |
42 | .mmap = generic_file_mmap, | 42 | .mmap = generic_file_mmap, |
43 | .fsync = simple_sync_file, | 43 | .fsync = simple_sync_file, |
44 | .sendfile = generic_file_sendfile, | 44 | .splice_read = generic_file_splice_read, |
45 | .llseek = generic_file_llseek, | 45 | .llseek = generic_file_llseek, |
46 | }; | 46 | }; |
47 | 47 | ||
diff --git a/fs/ramfs/file-nommu.c b/fs/ramfs/file-nommu.c index 5d258c40a2fd..cad2b7ace630 100644 --- a/fs/ramfs/file-nommu.c +++ b/fs/ramfs/file-nommu.c | |||
@@ -42,7 +42,7 @@ const struct file_operations ramfs_file_operations = { | |||
42 | .write = do_sync_write, | 42 | .write = do_sync_write, |
43 | .aio_write = generic_file_aio_write, | 43 | .aio_write = generic_file_aio_write, |
44 | .fsync = simple_sync_file, | 44 | .fsync = simple_sync_file, |
45 | .sendfile = generic_file_sendfile, | 45 | .splice_read = generic_file_splice_read, |
46 | .llseek = generic_file_llseek, | 46 | .llseek = generic_file_llseek, |
47 | }; | 47 | }; |
48 | 48 | ||
diff --git a/fs/reiserfs/file.c b/fs/reiserfs/file.c index 9e451a68580f..30eebfb1b2d8 100644 --- a/fs/reiserfs/file.c +++ b/fs/reiserfs/file.c | |||
@@ -1531,7 +1531,6 @@ const struct file_operations reiserfs_file_operations = { | |||
1531 | .open = generic_file_open, | 1531 | .open = generic_file_open, |
1532 | .release = reiserfs_file_release, | 1532 | .release = reiserfs_file_release, |
1533 | .fsync = reiserfs_sync_file, | 1533 | .fsync = reiserfs_sync_file, |
1534 | .sendfile = generic_file_sendfile, | ||
1535 | .aio_read = generic_file_aio_read, | 1534 | .aio_read = generic_file_aio_read, |
1536 | .aio_write = generic_file_aio_write, | 1535 | .aio_write = generic_file_aio_write, |
1537 | .splice_read = generic_file_splice_read, | 1536 | .splice_read = generic_file_splice_read, |
diff --git a/fs/smbfs/file.c b/fs/smbfs/file.c index aea3f8aa54c0..c5d78a7e492b 100644 --- a/fs/smbfs/file.c +++ b/fs/smbfs/file.c | |||
@@ -262,8 +262,9 @@ out: | |||
262 | } | 262 | } |
263 | 263 | ||
264 | static ssize_t | 264 | static ssize_t |
265 | smb_file_sendfile(struct file *file, loff_t *ppos, | 265 | smb_file_splice_read(struct file *file, loff_t *ppos, |
266 | size_t count, read_actor_t actor, void *target) | 266 | struct pipe_inode_info *pipe, size_t count, |
267 | unsigned int flags) | ||
267 | { | 268 | { |
268 | struct dentry *dentry = file->f_path.dentry; | 269 | struct dentry *dentry = file->f_path.dentry; |
269 | ssize_t status; | 270 | ssize_t status; |
@@ -277,7 +278,7 @@ smb_file_sendfile(struct file *file, loff_t *ppos, | |||
277 | DENTRY_PATH(dentry), status); | 278 | DENTRY_PATH(dentry), status); |
278 | goto out; | 279 | goto out; |
279 | } | 280 | } |
280 | status = generic_file_sendfile(file, ppos, count, actor, target); | 281 | status = generic_file_splice_read(file, ppos, pipe, count, flags); |
281 | out: | 282 | out: |
282 | return status; | 283 | return status; |
283 | } | 284 | } |
@@ -416,7 +417,7 @@ const struct file_operations smb_file_operations = | |||
416 | .open = smb_file_open, | 417 | .open = smb_file_open, |
417 | .release = smb_file_release, | 418 | .release = smb_file_release, |
418 | .fsync = smb_fsync, | 419 | .fsync = smb_fsync, |
419 | .sendfile = smb_file_sendfile, | 420 | .splice_read = smb_file_splice_read, |
420 | }; | 421 | }; |
421 | 422 | ||
422 | const struct inode_operations smb_file_inode_operations = | 423 | const struct inode_operations smb_file_inode_operations = |
diff --git a/fs/sysv/file.c b/fs/sysv/file.c index 0732ddb9020b..589be21d884e 100644 --- a/fs/sysv/file.c +++ b/fs/sysv/file.c | |||
@@ -27,7 +27,7 @@ const struct file_operations sysv_file_operations = { | |||
27 | .aio_write = generic_file_aio_write, | 27 | .aio_write = generic_file_aio_write, |
28 | .mmap = generic_file_mmap, | 28 | .mmap = generic_file_mmap, |
29 | .fsync = sysv_sync_file, | 29 | .fsync = sysv_sync_file, |
30 | .sendfile = generic_file_sendfile, | 30 | .splice_read = generic_file_splice_read, |
31 | }; | 31 | }; |
32 | 32 | ||
33 | const struct inode_operations sysv_file_inode_operations = { | 33 | const struct inode_operations sysv_file_inode_operations = { |
diff --git a/fs/udf/file.c b/fs/udf/file.c index 51b5764685e7..df070bee8d4f 100644 --- a/fs/udf/file.c +++ b/fs/udf/file.c | |||
@@ -261,7 +261,7 @@ const struct file_operations udf_file_operations = { | |||
261 | .aio_write = udf_file_aio_write, | 261 | .aio_write = udf_file_aio_write, |
262 | .release = udf_release_file, | 262 | .release = udf_release_file, |
263 | .fsync = udf_fsync_file, | 263 | .fsync = udf_fsync_file, |
264 | .sendfile = generic_file_sendfile, | 264 | .splice_read = generic_file_splice_read, |
265 | }; | 265 | }; |
266 | 266 | ||
267 | const struct inode_operations udf_file_inode_operations = { | 267 | const struct inode_operations udf_file_inode_operations = { |
diff --git a/fs/ufs/file.c b/fs/ufs/file.c index 1e096323bad4..6705d74c6d2d 100644 --- a/fs/ufs/file.c +++ b/fs/ufs/file.c | |||
@@ -60,5 +60,5 @@ const struct file_operations ufs_file_operations = { | |||
60 | .mmap = generic_file_mmap, | 60 | .mmap = generic_file_mmap, |
61 | .open = generic_file_open, | 61 | .open = generic_file_open, |
62 | .fsync = ufs_sync_file, | 62 | .fsync = ufs_sync_file, |
63 | .sendfile = generic_file_sendfile, | 63 | .splice_read = generic_file_splice_read, |
64 | }; | 64 | }; |
diff --git a/fs/xfs/linux-2.6/xfs_file.c b/fs/xfs/linux-2.6/xfs_file.c index cb51dc961355..8c43cd2e237a 100644 --- a/fs/xfs/linux-2.6/xfs_file.c +++ b/fs/xfs/linux-2.6/xfs_file.c | |||
@@ -124,30 +124,6 @@ xfs_file_aio_write_invis( | |||
124 | } | 124 | } |
125 | 125 | ||
126 | STATIC ssize_t | 126 | STATIC ssize_t |
127 | xfs_file_sendfile( | ||
128 | struct file *filp, | ||
129 | loff_t *pos, | ||
130 | size_t count, | ||
131 | read_actor_t actor, | ||
132 | void *target) | ||
133 | { | ||
134 | return bhv_vop_sendfile(vn_from_inode(filp->f_path.dentry->d_inode), | ||
135 | filp, pos, 0, count, actor, target, NULL); | ||
136 | } | ||
137 | |||
138 | STATIC ssize_t | ||
139 | xfs_file_sendfile_invis( | ||
140 | struct file *filp, | ||
141 | loff_t *pos, | ||
142 | size_t count, | ||
143 | read_actor_t actor, | ||
144 | void *target) | ||
145 | { | ||
146 | return bhv_vop_sendfile(vn_from_inode(filp->f_path.dentry->d_inode), | ||
147 | filp, pos, IO_INVIS, count, actor, target, NULL); | ||
148 | } | ||
149 | |||
150 | STATIC ssize_t | ||
151 | xfs_file_splice_read( | 127 | xfs_file_splice_read( |
152 | struct file *infilp, | 128 | struct file *infilp, |
153 | loff_t *ppos, | 129 | loff_t *ppos, |
@@ -452,7 +428,6 @@ const struct file_operations xfs_file_operations = { | |||
452 | .write = do_sync_write, | 428 | .write = do_sync_write, |
453 | .aio_read = xfs_file_aio_read, | 429 | .aio_read = xfs_file_aio_read, |
454 | .aio_write = xfs_file_aio_write, | 430 | .aio_write = xfs_file_aio_write, |
455 | .sendfile = xfs_file_sendfile, | ||
456 | .splice_read = xfs_file_splice_read, | 431 | .splice_read = xfs_file_splice_read, |
457 | .splice_write = xfs_file_splice_write, | 432 | .splice_write = xfs_file_splice_write, |
458 | .unlocked_ioctl = xfs_file_ioctl, | 433 | .unlocked_ioctl = xfs_file_ioctl, |
@@ -475,7 +450,6 @@ const struct file_operations xfs_invis_file_operations = { | |||
475 | .write = do_sync_write, | 450 | .write = do_sync_write, |
476 | .aio_read = xfs_file_aio_read_invis, | 451 | .aio_read = xfs_file_aio_read_invis, |
477 | .aio_write = xfs_file_aio_write_invis, | 452 | .aio_write = xfs_file_aio_write_invis, |
478 | .sendfile = xfs_file_sendfile_invis, | ||
479 | .splice_read = xfs_file_splice_read_invis, | 453 | .splice_read = xfs_file_splice_read_invis, |
480 | .splice_write = xfs_file_splice_write_invis, | 454 | .splice_write = xfs_file_splice_write_invis, |
481 | .unlocked_ioctl = xfs_file_ioctl_invis, | 455 | .unlocked_ioctl = xfs_file_ioctl_invis, |
diff --git a/fs/xfs/linux-2.6/xfs_linux.h b/fs/xfs/linux-2.6/xfs_linux.h index 715adad7dd4d..af24a457d3a3 100644 --- a/fs/xfs/linux-2.6/xfs_linux.h +++ b/fs/xfs/linux-2.6/xfs_linux.h | |||
@@ -101,7 +101,6 @@ | |||
101 | * Feature macros (disable/enable) | 101 | * Feature macros (disable/enable) |
102 | */ | 102 | */ |
103 | #undef HAVE_REFCACHE /* reference cache not needed for NFS in 2.6 */ | 103 | #undef HAVE_REFCACHE /* reference cache not needed for NFS in 2.6 */ |
104 | #define HAVE_SENDFILE /* sendfile(2) exists in 2.6, but not in 2.4 */ | ||
105 | #define HAVE_SPLICE /* a splice(2) exists in 2.6, but not in 2.4 */ | 104 | #define HAVE_SPLICE /* a splice(2) exists in 2.6, but not in 2.4 */ |
106 | #ifdef CONFIG_SMP | 105 | #ifdef CONFIG_SMP |
107 | #define HAVE_PERCPU_SB /* per cpu superblock counters are a 2.6 feature */ | 106 | #define HAVE_PERCPU_SB /* per cpu superblock counters are a 2.6 feature */ |
diff --git a/fs/xfs/linux-2.6/xfs_lrw.c b/fs/xfs/linux-2.6/xfs_lrw.c index ed90403f0ee7..765ec16a6e39 100644 --- a/fs/xfs/linux-2.6/xfs_lrw.c +++ b/fs/xfs/linux-2.6/xfs_lrw.c | |||
@@ -287,50 +287,6 @@ xfs_read( | |||
287 | } | 287 | } |
288 | 288 | ||
289 | ssize_t | 289 | ssize_t |
290 | xfs_sendfile( | ||
291 | bhv_desc_t *bdp, | ||
292 | struct file *filp, | ||
293 | loff_t *offset, | ||
294 | int ioflags, | ||
295 | size_t count, | ||
296 | read_actor_t actor, | ||
297 | void *target, | ||
298 | cred_t *credp) | ||
299 | { | ||
300 | xfs_inode_t *ip = XFS_BHVTOI(bdp); | ||
301 | xfs_mount_t *mp = ip->i_mount; | ||
302 | ssize_t ret; | ||
303 | |||
304 | XFS_STATS_INC(xs_read_calls); | ||
305 | if (XFS_FORCED_SHUTDOWN(mp)) | ||
306 | return -EIO; | ||
307 | |||
308 | xfs_ilock(ip, XFS_IOLOCK_SHARED); | ||
309 | |||
310 | if (DM_EVENT_ENABLED(BHV_TO_VNODE(bdp)->v_vfsp, ip, DM_EVENT_READ) && | ||
311 | (!(ioflags & IO_INVIS))) { | ||
312 | bhv_vrwlock_t locktype = VRWLOCK_READ; | ||
313 | int error; | ||
314 | |||
315 | error = XFS_SEND_DATA(mp, DM_EVENT_READ, BHV_TO_VNODE(bdp), | ||
316 | *offset, count, | ||
317 | FILP_DELAY_FLAG(filp), &locktype); | ||
318 | if (error) { | ||
319 | xfs_iunlock(ip, XFS_IOLOCK_SHARED); | ||
320 | return -error; | ||
321 | } | ||
322 | } | ||
323 | xfs_rw_enter_trace(XFS_SENDFILE_ENTER, &ip->i_iocore, | ||
324 | (void *)(unsigned long)target, count, *offset, ioflags); | ||
325 | ret = generic_file_sendfile(filp, offset, count, actor, target); | ||
326 | if (ret > 0) | ||
327 | XFS_STATS_ADD(xs_read_bytes, ret); | ||
328 | |||
329 | xfs_iunlock(ip, XFS_IOLOCK_SHARED); | ||
330 | return ret; | ||
331 | } | ||
332 | |||
333 | ssize_t | ||
334 | xfs_splice_read( | 290 | xfs_splice_read( |
335 | bhv_desc_t *bdp, | 291 | bhv_desc_t *bdp, |
336 | struct file *infilp, | 292 | struct file *infilp, |
diff --git a/fs/xfs/linux-2.6/xfs_lrw.h b/fs/xfs/linux-2.6/xfs_lrw.h index 7ac51b1d2161..7c60a1eed88b 100644 --- a/fs/xfs/linux-2.6/xfs_lrw.h +++ b/fs/xfs/linux-2.6/xfs_lrw.h | |||
@@ -90,9 +90,6 @@ extern ssize_t xfs_read(struct bhv_desc *, struct kiocb *, | |||
90 | extern ssize_t xfs_write(struct bhv_desc *, struct kiocb *, | 90 | extern ssize_t xfs_write(struct bhv_desc *, struct kiocb *, |
91 | const struct iovec *, unsigned int, | 91 | const struct iovec *, unsigned int, |
92 | loff_t *, int, struct cred *); | 92 | loff_t *, int, struct cred *); |
93 | extern ssize_t xfs_sendfile(struct bhv_desc *, struct file *, | ||
94 | loff_t *, int, size_t, read_actor_t, | ||
95 | void *, struct cred *); | ||
96 | extern ssize_t xfs_splice_read(struct bhv_desc *, struct file *, loff_t *, | 93 | extern ssize_t xfs_splice_read(struct bhv_desc *, struct file *, loff_t *, |
97 | struct pipe_inode_info *, size_t, int, int, | 94 | struct pipe_inode_info *, size_t, int, int, |
98 | struct cred *); | 95 | struct cred *); |
diff --git a/fs/xfs/linux-2.6/xfs_vnode.h b/fs/xfs/linux-2.6/xfs_vnode.h index d1b2d01843d1..013048a92643 100644 --- a/fs/xfs/linux-2.6/xfs_vnode.h +++ b/fs/xfs/linux-2.6/xfs_vnode.h | |||
@@ -139,9 +139,6 @@ typedef ssize_t (*vop_read_t)(bhv_desc_t *, struct kiocb *, | |||
139 | typedef ssize_t (*vop_write_t)(bhv_desc_t *, struct kiocb *, | 139 | typedef ssize_t (*vop_write_t)(bhv_desc_t *, struct kiocb *, |
140 | const struct iovec *, unsigned int, | 140 | const struct iovec *, unsigned int, |
141 | loff_t *, int, struct cred *); | 141 | loff_t *, int, struct cred *); |
142 | typedef ssize_t (*vop_sendfile_t)(bhv_desc_t *, struct file *, | ||
143 | loff_t *, int, size_t, read_actor_t, | ||
144 | void *, struct cred *); | ||
145 | typedef ssize_t (*vop_splice_read_t)(bhv_desc_t *, struct file *, loff_t *, | 142 | typedef ssize_t (*vop_splice_read_t)(bhv_desc_t *, struct file *, loff_t *, |
146 | struct pipe_inode_info *, size_t, int, int, | 143 | struct pipe_inode_info *, size_t, int, int, |
147 | struct cred *); | 144 | struct cred *); |
@@ -206,7 +203,6 @@ typedef struct bhv_vnodeops { | |||
206 | vop_close_t vop_close; | 203 | vop_close_t vop_close; |
207 | vop_read_t vop_read; | 204 | vop_read_t vop_read; |
208 | vop_write_t vop_write; | 205 | vop_write_t vop_write; |
209 | vop_sendfile_t vop_sendfile; | ||
210 | vop_splice_read_t vop_splice_read; | 206 | vop_splice_read_t vop_splice_read; |
211 | vop_splice_write_t vop_splice_write; | 207 | vop_splice_write_t vop_splice_write; |
212 | vop_ioctl_t vop_ioctl; | 208 | vop_ioctl_t vop_ioctl; |
@@ -254,8 +250,6 @@ typedef struct bhv_vnodeops { | |||
254 | VOP(vop_read, vp)(VNHEAD(vp),file,iov,segs,offset,ioflags,cr) | 250 | VOP(vop_read, vp)(VNHEAD(vp),file,iov,segs,offset,ioflags,cr) |
255 | #define bhv_vop_write(vp,file,iov,segs,offset,ioflags,cr) \ | 251 | #define bhv_vop_write(vp,file,iov,segs,offset,ioflags,cr) \ |
256 | VOP(vop_write, vp)(VNHEAD(vp),file,iov,segs,offset,ioflags,cr) | 252 | VOP(vop_write, vp)(VNHEAD(vp),file,iov,segs,offset,ioflags,cr) |
257 | #define bhv_vop_sendfile(vp,f,off,ioflags,cnt,act,targ,cr) \ | ||
258 | VOP(vop_sendfile, vp)(VNHEAD(vp),f,off,ioflags,cnt,act,targ,cr) | ||
259 | #define bhv_vop_splice_read(vp,f,o,pipe,cnt,fl,iofl,cr) \ | 253 | #define bhv_vop_splice_read(vp,f,o,pipe,cnt,fl,iofl,cr) \ |
260 | VOP(vop_splice_read, vp)(VNHEAD(vp),f,o,pipe,cnt,fl,iofl,cr) | 254 | VOP(vop_splice_read, vp)(VNHEAD(vp),f,o,pipe,cnt,fl,iofl,cr) |
261 | #define bhv_vop_splice_write(vp,f,o,pipe,cnt,fl,iofl,cr) \ | 255 | #define bhv_vop_splice_write(vp,f,o,pipe,cnt,fl,iofl,cr) \ |
diff --git a/fs/xfs/xfs_vnodeops.c b/fs/xfs/xfs_vnodeops.c index de17aed578f0..70bc82f65311 100644 --- a/fs/xfs/xfs_vnodeops.c +++ b/fs/xfs/xfs_vnodeops.c | |||
@@ -4680,9 +4680,6 @@ bhv_vnodeops_t xfs_vnodeops = { | |||
4680 | .vop_open = xfs_open, | 4680 | .vop_open = xfs_open, |
4681 | .vop_close = xfs_close, | 4681 | .vop_close = xfs_close, |
4682 | .vop_read = xfs_read, | 4682 | .vop_read = xfs_read, |
4683 | #ifdef HAVE_SENDFILE | ||
4684 | .vop_sendfile = xfs_sendfile, | ||
4685 | #endif | ||
4686 | #ifdef HAVE_SPLICE | 4683 | #ifdef HAVE_SPLICE |
4687 | .vop_splice_read = xfs_splice_read, | 4684 | .vop_splice_read = xfs_splice_read, |
4688 | .vop_splice_write = xfs_splice_write, | 4685 | .vop_splice_write = xfs_splice_write, |