mirror of
https://github.com/torvalds/linux.git
synced 2024-12-27 05:11:48 +00:00
sendfile: remove .sendfile from filesystems that use generic_file_sendfile()
They can use generic_file_splice_read() instead. Since sys_sendfile() now prefers that, there should be no change in behaviour. Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
This commit is contained in:
parent
534f2aaa6a
commit
5ffc4ef45b
@ -33,7 +33,7 @@ const struct file_operations adfs_file_operations = {
|
|||||||
.fsync = file_fsync,
|
.fsync = file_fsync,
|
||||||
.write = do_sync_write,
|
.write = do_sync_write,
|
||||||
.aio_write = generic_file_aio_write,
|
.aio_write = generic_file_aio_write,
|
||||||
.sendfile = generic_file_sendfile,
|
.splice_read = generic_file_splice_read,
|
||||||
};
|
};
|
||||||
|
|
||||||
const struct inode_operations adfs_file_inode_operations = {
|
const struct inode_operations adfs_file_inode_operations = {
|
||||||
|
@ -35,7 +35,7 @@ const struct file_operations affs_file_operations = {
|
|||||||
.open = affs_file_open,
|
.open = affs_file_open,
|
||||||
.release = affs_file_release,
|
.release = affs_file_release,
|
||||||
.fsync = file_fsync,
|
.fsync = file_fsync,
|
||||||
.sendfile = generic_file_sendfile,
|
.splice_read = generic_file_splice_read,
|
||||||
};
|
};
|
||||||
|
|
||||||
const struct inode_operations affs_file_inode_operations = {
|
const struct inode_operations affs_file_inode_operations = {
|
||||||
|
@ -32,7 +32,7 @@ const struct file_operations afs_file_operations = {
|
|||||||
.aio_read = generic_file_aio_read,
|
.aio_read = generic_file_aio_read,
|
||||||
.aio_write = afs_file_write,
|
.aio_write = afs_file_write,
|
||||||
.mmap = generic_file_readonly_mmap,
|
.mmap = generic_file_readonly_mmap,
|
||||||
.sendfile = generic_file_sendfile,
|
.splice_read = generic_file_splice_read,
|
||||||
.fsync = afs_fsync,
|
.fsync = afs_fsync,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@ const struct file_operations bfs_file_operations = {
|
|||||||
.write = do_sync_write,
|
.write = do_sync_write,
|
||||||
.aio_write = generic_file_aio_write,
|
.aio_write = generic_file_aio_write,
|
||||||
.mmap = generic_file_mmap,
|
.mmap = generic_file_mmap,
|
||||||
.sendfile = generic_file_sendfile,
|
.splice_read = generic_file_splice_read,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int bfs_move_block(unsigned long from, unsigned long to, struct super_block *sb)
|
static int bfs_move_block(unsigned long from, unsigned long to, struct super_block *sb)
|
||||||
|
@ -1346,7 +1346,6 @@ const struct file_operations def_blk_fops = {
|
|||||||
#ifdef CONFIG_COMPAT
|
#ifdef CONFIG_COMPAT
|
||||||
.compat_ioctl = compat_blkdev_ioctl,
|
.compat_ioctl = compat_blkdev_ioctl,
|
||||||
#endif
|
#endif
|
||||||
.sendfile = generic_file_sendfile,
|
|
||||||
.splice_read = generic_file_splice_read,
|
.splice_read = generic_file_splice_read,
|
||||||
.splice_write = generic_file_splice_write,
|
.splice_write = generic_file_splice_write,
|
||||||
};
|
};
|
||||||
|
@ -616,7 +616,7 @@ const struct file_operations cifs_file_ops = {
|
|||||||
.fsync = cifs_fsync,
|
.fsync = cifs_fsync,
|
||||||
.flush = cifs_flush,
|
.flush = cifs_flush,
|
||||||
.mmap = cifs_file_mmap,
|
.mmap = cifs_file_mmap,
|
||||||
.sendfile = generic_file_sendfile,
|
.splice_read = generic_file_splice_read,
|
||||||
.llseek = cifs_llseek,
|
.llseek = cifs_llseek,
|
||||||
#ifdef CONFIG_CIFS_POSIX
|
#ifdef CONFIG_CIFS_POSIX
|
||||||
.ioctl = cifs_ioctl,
|
.ioctl = cifs_ioctl,
|
||||||
@ -637,7 +637,7 @@ const struct file_operations cifs_file_direct_ops = {
|
|||||||
.lock = cifs_lock,
|
.lock = cifs_lock,
|
||||||
.fsync = cifs_fsync,
|
.fsync = cifs_fsync,
|
||||||
.flush = cifs_flush,
|
.flush = cifs_flush,
|
||||||
.sendfile = generic_file_sendfile, /* BB removeme BB */
|
.splice_read = generic_file_splice_read,
|
||||||
#ifdef CONFIG_CIFS_POSIX
|
#ifdef CONFIG_CIFS_POSIX
|
||||||
.ioctl = cifs_ioctl,
|
.ioctl = cifs_ioctl,
|
||||||
#endif /* CONFIG_CIFS_POSIX */
|
#endif /* CONFIG_CIFS_POSIX */
|
||||||
@ -656,7 +656,7 @@ const struct file_operations cifs_file_nobrl_ops = {
|
|||||||
.fsync = cifs_fsync,
|
.fsync = cifs_fsync,
|
||||||
.flush = cifs_flush,
|
.flush = cifs_flush,
|
||||||
.mmap = cifs_file_mmap,
|
.mmap = cifs_file_mmap,
|
||||||
.sendfile = generic_file_sendfile,
|
.splice_read = generic_file_splice_read,
|
||||||
.llseek = cifs_llseek,
|
.llseek = cifs_llseek,
|
||||||
#ifdef CONFIG_CIFS_POSIX
|
#ifdef CONFIG_CIFS_POSIX
|
||||||
.ioctl = cifs_ioctl,
|
.ioctl = cifs_ioctl,
|
||||||
@ -676,7 +676,7 @@ const struct file_operations cifs_file_direct_nobrl_ops = {
|
|||||||
.release = cifs_close,
|
.release = cifs_close,
|
||||||
.fsync = cifs_fsync,
|
.fsync = cifs_fsync,
|
||||||
.flush = cifs_flush,
|
.flush = cifs_flush,
|
||||||
.sendfile = generic_file_sendfile, /* BB removeme BB */
|
.splice_read = generic_file_splice_read,
|
||||||
#ifdef CONFIG_CIFS_POSIX
|
#ifdef CONFIG_CIFS_POSIX
|
||||||
.ioctl = cifs_ioctl,
|
.ioctl = cifs_ioctl,
|
||||||
#endif /* CONFIG_CIFS_POSIX */
|
#endif /* CONFIG_CIFS_POSIX */
|
||||||
|
@ -47,8 +47,9 @@ coda_file_read(struct file *coda_file, char __user *buf, size_t count, loff_t *p
|
|||||||
}
|
}
|
||||||
|
|
||||||
static ssize_t
|
static ssize_t
|
||||||
coda_file_sendfile(struct file *coda_file, loff_t *ppos, size_t count,
|
coda_file_splice_read(struct file *coda_file, loff_t *ppos,
|
||||||
read_actor_t actor, void *target)
|
struct pipe_inode_info *pipe, size_t count,
|
||||||
|
unsigned int flags)
|
||||||
{
|
{
|
||||||
struct coda_file_info *cfi;
|
struct coda_file_info *cfi;
|
||||||
struct file *host_file;
|
struct file *host_file;
|
||||||
@ -57,10 +58,10 @@ coda_file_sendfile(struct file *coda_file, loff_t *ppos, size_t count,
|
|||||||
BUG_ON(!cfi || cfi->cfi_magic != CODA_MAGIC);
|
BUG_ON(!cfi || cfi->cfi_magic != CODA_MAGIC);
|
||||||
host_file = cfi->cfi_container;
|
host_file = cfi->cfi_container;
|
||||||
|
|
||||||
if (!host_file->f_op || !host_file->f_op->sendfile)
|
if (!host_file->f_op || !host_file->f_op->splice_read)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
return host_file->f_op->sendfile(host_file, ppos, count, actor, target);
|
return host_file->f_op->splice_read(host_file, ppos, pipe, count,flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
static ssize_t
|
static ssize_t
|
||||||
@ -295,6 +296,6 @@ const struct file_operations coda_file_operations = {
|
|||||||
.flush = coda_flush,
|
.flush = coda_flush,
|
||||||
.release = coda_release,
|
.release = coda_release,
|
||||||
.fsync = coda_fsync,
|
.fsync = coda_fsync,
|
||||||
.sendfile = coda_file_sendfile,
|
.splice_read = coda_file_splice_read,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -338,16 +338,17 @@ static int ecryptfs_fasync(int fd, struct file *file, int flag)
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
static ssize_t ecryptfs_sendfile(struct file *file, loff_t * ppos,
|
static ssize_t ecryptfs_splice_read(struct file *file, loff_t * ppos,
|
||||||
size_t count, read_actor_t actor, void *target)
|
struct pipe_inode_info *pipe, size_t count,
|
||||||
|
unsigned int flags)
|
||||||
{
|
{
|
||||||
struct file *lower_file = NULL;
|
struct file *lower_file = NULL;
|
||||||
int rc = -EINVAL;
|
int rc = -EINVAL;
|
||||||
|
|
||||||
lower_file = ecryptfs_file_to_lower(file);
|
lower_file = ecryptfs_file_to_lower(file);
|
||||||
if (lower_file->f_op && lower_file->f_op->sendfile)
|
if (lower_file->f_op && lower_file->f_op->splice_read)
|
||||||
rc = lower_file->f_op->sendfile(lower_file, ppos, count,
|
rc = lower_file->f_op->splice_read(lower_file, ppos, pipe,
|
||||||
actor, target);
|
count, flags);
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
@ -364,7 +365,7 @@ const struct file_operations ecryptfs_dir_fops = {
|
|||||||
.release = ecryptfs_release,
|
.release = ecryptfs_release,
|
||||||
.fsync = ecryptfs_fsync,
|
.fsync = ecryptfs_fsync,
|
||||||
.fasync = ecryptfs_fasync,
|
.fasync = ecryptfs_fasync,
|
||||||
.sendfile = ecryptfs_sendfile,
|
.splice_read = ecryptfs_splice_read,
|
||||||
};
|
};
|
||||||
|
|
||||||
const struct file_operations ecryptfs_main_fops = {
|
const struct file_operations ecryptfs_main_fops = {
|
||||||
@ -381,7 +382,7 @@ const struct file_operations ecryptfs_main_fops = {
|
|||||||
.release = ecryptfs_release,
|
.release = ecryptfs_release,
|
||||||
.fsync = ecryptfs_fsync,
|
.fsync = ecryptfs_fsync,
|
||||||
.fasync = ecryptfs_fasync,
|
.fasync = ecryptfs_fasync,
|
||||||
.sendfile = ecryptfs_sendfile,
|
.splice_read = ecryptfs_splice_read,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -53,7 +53,6 @@ const struct file_operations ext2_file_operations = {
|
|||||||
.open = generic_file_open,
|
.open = generic_file_open,
|
||||||
.release = ext2_release_file,
|
.release = ext2_release_file,
|
||||||
.fsync = ext2_sync_file,
|
.fsync = ext2_sync_file,
|
||||||
.sendfile = generic_file_sendfile,
|
|
||||||
.splice_read = generic_file_splice_read,
|
.splice_read = generic_file_splice_read,
|
||||||
.splice_write = generic_file_splice_write,
|
.splice_write = generic_file_splice_write,
|
||||||
};
|
};
|
||||||
|
@ -120,7 +120,6 @@ const struct file_operations ext3_file_operations = {
|
|||||||
.open = generic_file_open,
|
.open = generic_file_open,
|
||||||
.release = ext3_release_file,
|
.release = ext3_release_file,
|
||||||
.fsync = ext3_sync_file,
|
.fsync = ext3_sync_file,
|
||||||
.sendfile = generic_file_sendfile,
|
|
||||||
.splice_read = generic_file_splice_read,
|
.splice_read = generic_file_splice_read,
|
||||||
.splice_write = generic_file_splice_write,
|
.splice_write = generic_file_splice_write,
|
||||||
};
|
};
|
||||||
|
@ -120,7 +120,6 @@ const struct file_operations ext4_file_operations = {
|
|||||||
.open = generic_file_open,
|
.open = generic_file_open,
|
||||||
.release = ext4_release_file,
|
.release = ext4_release_file,
|
||||||
.fsync = ext4_sync_file,
|
.fsync = ext4_sync_file,
|
||||||
.sendfile = generic_file_sendfile,
|
|
||||||
.splice_read = generic_file_splice_read,
|
.splice_read = generic_file_splice_read,
|
||||||
.splice_write = generic_file_splice_write,
|
.splice_write = generic_file_splice_write,
|
||||||
};
|
};
|
||||||
|
@ -134,7 +134,7 @@ const struct file_operations fat_file_operations = {
|
|||||||
.release = fat_file_release,
|
.release = fat_file_release,
|
||||||
.ioctl = fat_generic_ioctl,
|
.ioctl = fat_generic_ioctl,
|
||||||
.fsync = file_fsync,
|
.fsync = file_fsync,
|
||||||
.sendfile = generic_file_sendfile,
|
.splice_read = generic_file_splice_read,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int fat_cont_expand(struct inode *inode, loff_t size)
|
static int fat_cont_expand(struct inode *inode, loff_t size)
|
||||||
|
@ -802,7 +802,7 @@ static const struct file_operations fuse_file_operations = {
|
|||||||
.release = fuse_release,
|
.release = fuse_release,
|
||||||
.fsync = fuse_fsync,
|
.fsync = fuse_fsync,
|
||||||
.lock = fuse_file_lock,
|
.lock = fuse_file_lock,
|
||||||
.sendfile = generic_file_sendfile,
|
.splice_read = generic_file_splice_read,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct file_operations fuse_direct_io_file_operations = {
|
static const struct file_operations fuse_direct_io_file_operations = {
|
||||||
@ -814,7 +814,7 @@ static const struct file_operations fuse_direct_io_file_operations = {
|
|||||||
.release = fuse_release,
|
.release = fuse_release,
|
||||||
.fsync = fuse_fsync,
|
.fsync = fuse_fsync,
|
||||||
.lock = fuse_file_lock,
|
.lock = fuse_file_lock,
|
||||||
/* no mmap and sendfile */
|
/* no mmap and splice_read */
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct address_space_operations fuse_file_aops = {
|
static const struct address_space_operations fuse_file_aops = {
|
||||||
|
@ -635,7 +635,6 @@ const struct file_operations gfs2_file_fops = {
|
|||||||
.release = gfs2_close,
|
.release = gfs2_close,
|
||||||
.fsync = gfs2_fsync,
|
.fsync = gfs2_fsync,
|
||||||
.lock = gfs2_lock,
|
.lock = gfs2_lock,
|
||||||
.sendfile = generic_file_sendfile,
|
|
||||||
.flock = gfs2_flock,
|
.flock = gfs2_flock,
|
||||||
.splice_read = generic_file_splice_read,
|
.splice_read = generic_file_splice_read,
|
||||||
.splice_write = generic_file_splice_write,
|
.splice_write = generic_file_splice_write,
|
||||||
|
@ -607,7 +607,7 @@ static const struct file_operations hfs_file_operations = {
|
|||||||
.write = do_sync_write,
|
.write = do_sync_write,
|
||||||
.aio_write = generic_file_aio_write,
|
.aio_write = generic_file_aio_write,
|
||||||
.mmap = generic_file_mmap,
|
.mmap = generic_file_mmap,
|
||||||
.sendfile = generic_file_sendfile,
|
.splice_read = generic_file_splice_read,
|
||||||
.fsync = file_fsync,
|
.fsync = file_fsync,
|
||||||
.open = hfs_file_open,
|
.open = hfs_file_open,
|
||||||
.release = hfs_file_release,
|
.release = hfs_file_release,
|
||||||
|
@ -288,7 +288,7 @@ static const struct file_operations hfsplus_file_operations = {
|
|||||||
.write = do_sync_write,
|
.write = do_sync_write,
|
||||||
.aio_write = generic_file_aio_write,
|
.aio_write = generic_file_aio_write,
|
||||||
.mmap = generic_file_mmap,
|
.mmap = generic_file_mmap,
|
||||||
.sendfile = generic_file_sendfile,
|
.splice_read = generic_file_splice_read,
|
||||||
.fsync = file_fsync,
|
.fsync = file_fsync,
|
||||||
.open = hfsplus_file_open,
|
.open = hfsplus_file_open,
|
||||||
.release = hfsplus_file_release,
|
.release = hfsplus_file_release,
|
||||||
|
@ -390,7 +390,7 @@ int hostfs_fsync(struct file *file, struct dentry *dentry, int datasync)
|
|||||||
static const struct file_operations hostfs_file_fops = {
|
static const struct file_operations hostfs_file_fops = {
|
||||||
.llseek = generic_file_llseek,
|
.llseek = generic_file_llseek,
|
||||||
.read = do_sync_read,
|
.read = do_sync_read,
|
||||||
.sendfile = generic_file_sendfile,
|
.splice_read = generic_file_splice_read,
|
||||||
.aio_read = generic_file_aio_read,
|
.aio_read = generic_file_aio_read,
|
||||||
.aio_write = generic_file_aio_write,
|
.aio_write = generic_file_aio_write,
|
||||||
.write = do_sync_write,
|
.write = do_sync_write,
|
||||||
|
@ -129,7 +129,7 @@ const struct file_operations hpfs_file_ops =
|
|||||||
.mmap = generic_file_mmap,
|
.mmap = generic_file_mmap,
|
||||||
.release = hpfs_file_release,
|
.release = hpfs_file_release,
|
||||||
.fsync = hpfs_file_fsync,
|
.fsync = hpfs_file_fsync,
|
||||||
.sendfile = generic_file_sendfile,
|
.splice_read = generic_file_splice_read,
|
||||||
};
|
};
|
||||||
|
|
||||||
const struct inode_operations hpfs_file_iops =
|
const struct inode_operations hpfs_file_iops =
|
||||||
|
@ -47,7 +47,7 @@ const struct file_operations jffs2_file_operations =
|
|||||||
.ioctl = jffs2_ioctl,
|
.ioctl = jffs2_ioctl,
|
||||||
.mmap = generic_file_readonly_mmap,
|
.mmap = generic_file_readonly_mmap,
|
||||||
.fsync = jffs2_fsync,
|
.fsync = jffs2_fsync,
|
||||||
.sendfile = generic_file_sendfile
|
.splice_read = generic_file_splice_read,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* jffs2_file_inode_operations */
|
/* jffs2_file_inode_operations */
|
||||||
|
@ -108,7 +108,6 @@ const struct file_operations jfs_file_operations = {
|
|||||||
.aio_read = generic_file_aio_read,
|
.aio_read = generic_file_aio_read,
|
||||||
.aio_write = generic_file_aio_write,
|
.aio_write = generic_file_aio_write,
|
||||||
.mmap = generic_file_mmap,
|
.mmap = generic_file_mmap,
|
||||||
.sendfile = generic_file_sendfile,
|
|
||||||
.splice_read = generic_file_splice_read,
|
.splice_read = generic_file_splice_read,
|
||||||
.splice_write = generic_file_splice_write,
|
.splice_write = generic_file_splice_write,
|
||||||
.fsync = jfs_fsync,
|
.fsync = jfs_fsync,
|
||||||
|
@ -23,7 +23,7 @@ const struct file_operations minix_file_operations = {
|
|||||||
.aio_write = generic_file_aio_write,
|
.aio_write = generic_file_aio_write,
|
||||||
.mmap = generic_file_mmap,
|
.mmap = generic_file_mmap,
|
||||||
.fsync = minix_sync_file,
|
.fsync = minix_sync_file,
|
||||||
.sendfile = generic_file_sendfile,
|
.splice_read = generic_file_splice_read,
|
||||||
};
|
};
|
||||||
|
|
||||||
const struct inode_operations minix_file_inode_operations = {
|
const struct inode_operations minix_file_inode_operations = {
|
||||||
|
@ -2276,7 +2276,7 @@ const struct file_operations ntfs_file_ops = {
|
|||||||
mounted filesystem. */
|
mounted filesystem. */
|
||||||
.mmap = generic_file_mmap, /* Mmap file. */
|
.mmap = generic_file_mmap, /* Mmap file. */
|
||||||
.open = ntfs_file_open, /* Open file. */
|
.open = ntfs_file_open, /* Open file. */
|
||||||
.sendfile = generic_file_sendfile, /* Zero-copy data send with
|
.splice_read = generic_file_splice_read /* Zero-copy data send with
|
||||||
the data source being on
|
the data source being on
|
||||||
the ntfs partition. We do
|
the ntfs partition. We do
|
||||||
not need to care about the
|
not need to care about the
|
||||||
|
@ -1822,7 +1822,6 @@ const struct inode_operations ocfs2_special_file_iops = {
|
|||||||
const struct file_operations ocfs2_fops = {
|
const struct file_operations ocfs2_fops = {
|
||||||
.read = do_sync_read,
|
.read = do_sync_read,
|
||||||
.write = do_sync_write,
|
.write = do_sync_write,
|
||||||
.sendfile = generic_file_sendfile,
|
|
||||||
.mmap = ocfs2_mmap,
|
.mmap = ocfs2_mmap,
|
||||||
.fsync = ocfs2_sync_file,
|
.fsync = ocfs2_sync_file,
|
||||||
.release = ocfs2_file_release,
|
.release = ocfs2_file_release,
|
||||||
|
@ -25,7 +25,7 @@ const struct file_operations qnx4_file_operations =
|
|||||||
.read = do_sync_read,
|
.read = do_sync_read,
|
||||||
.aio_read = generic_file_aio_read,
|
.aio_read = generic_file_aio_read,
|
||||||
.mmap = generic_file_mmap,
|
.mmap = generic_file_mmap,
|
||||||
.sendfile = generic_file_sendfile,
|
.splice_read = generic_file_splice_read,
|
||||||
#ifdef CONFIG_QNX4FS_RW
|
#ifdef CONFIG_QNX4FS_RW
|
||||||
.write = do_sync_write,
|
.write = do_sync_write,
|
||||||
.aio_write = generic_file_aio_write,
|
.aio_write = generic_file_aio_write,
|
||||||
|
@ -41,7 +41,7 @@ const struct file_operations ramfs_file_operations = {
|
|||||||
.aio_write = generic_file_aio_write,
|
.aio_write = generic_file_aio_write,
|
||||||
.mmap = generic_file_mmap,
|
.mmap = generic_file_mmap,
|
||||||
.fsync = simple_sync_file,
|
.fsync = simple_sync_file,
|
||||||
.sendfile = generic_file_sendfile,
|
.splice_read = generic_file_splice_read,
|
||||||
.llseek = generic_file_llseek,
|
.llseek = generic_file_llseek,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -42,7 +42,7 @@ const struct file_operations ramfs_file_operations = {
|
|||||||
.write = do_sync_write,
|
.write = do_sync_write,
|
||||||
.aio_write = generic_file_aio_write,
|
.aio_write = generic_file_aio_write,
|
||||||
.fsync = simple_sync_file,
|
.fsync = simple_sync_file,
|
||||||
.sendfile = generic_file_sendfile,
|
.splice_read = generic_file_splice_read,
|
||||||
.llseek = generic_file_llseek,
|
.llseek = generic_file_llseek,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1531,7 +1531,6 @@ const struct file_operations reiserfs_file_operations = {
|
|||||||
.open = generic_file_open,
|
.open = generic_file_open,
|
||||||
.release = reiserfs_file_release,
|
.release = reiserfs_file_release,
|
||||||
.fsync = reiserfs_sync_file,
|
.fsync = reiserfs_sync_file,
|
||||||
.sendfile = generic_file_sendfile,
|
|
||||||
.aio_read = generic_file_aio_read,
|
.aio_read = generic_file_aio_read,
|
||||||
.aio_write = generic_file_aio_write,
|
.aio_write = generic_file_aio_write,
|
||||||
.splice_read = generic_file_splice_read,
|
.splice_read = generic_file_splice_read,
|
||||||
|
@ -262,8 +262,9 @@ out:
|
|||||||
}
|
}
|
||||||
|
|
||||||
static ssize_t
|
static ssize_t
|
||||||
smb_file_sendfile(struct file *file, loff_t *ppos,
|
smb_file_splice_read(struct file *file, loff_t *ppos,
|
||||||
size_t count, read_actor_t actor, void *target)
|
struct pipe_inode_info *pipe, size_t count,
|
||||||
|
unsigned int flags)
|
||||||
{
|
{
|
||||||
struct dentry *dentry = file->f_path.dentry;
|
struct dentry *dentry = file->f_path.dentry;
|
||||||
ssize_t status;
|
ssize_t status;
|
||||||
@ -277,7 +278,7 @@ smb_file_sendfile(struct file *file, loff_t *ppos,
|
|||||||
DENTRY_PATH(dentry), status);
|
DENTRY_PATH(dentry), status);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
status = generic_file_sendfile(file, ppos, count, actor, target);
|
status = generic_file_splice_read(file, ppos, pipe, count, flags);
|
||||||
out:
|
out:
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
@ -416,7 +417,7 @@ const struct file_operations smb_file_operations =
|
|||||||
.open = smb_file_open,
|
.open = smb_file_open,
|
||||||
.release = smb_file_release,
|
.release = smb_file_release,
|
||||||
.fsync = smb_fsync,
|
.fsync = smb_fsync,
|
||||||
.sendfile = smb_file_sendfile,
|
.splice_read = smb_file_splice_read,
|
||||||
};
|
};
|
||||||
|
|
||||||
const struct inode_operations smb_file_inode_operations =
|
const struct inode_operations smb_file_inode_operations =
|
||||||
|
@ -27,7 +27,7 @@ const struct file_operations sysv_file_operations = {
|
|||||||
.aio_write = generic_file_aio_write,
|
.aio_write = generic_file_aio_write,
|
||||||
.mmap = generic_file_mmap,
|
.mmap = generic_file_mmap,
|
||||||
.fsync = sysv_sync_file,
|
.fsync = sysv_sync_file,
|
||||||
.sendfile = generic_file_sendfile,
|
.splice_read = generic_file_splice_read,
|
||||||
};
|
};
|
||||||
|
|
||||||
const struct inode_operations sysv_file_inode_operations = {
|
const struct inode_operations sysv_file_inode_operations = {
|
||||||
|
@ -261,7 +261,7 @@ const struct file_operations udf_file_operations = {
|
|||||||
.aio_write = udf_file_aio_write,
|
.aio_write = udf_file_aio_write,
|
||||||
.release = udf_release_file,
|
.release = udf_release_file,
|
||||||
.fsync = udf_fsync_file,
|
.fsync = udf_fsync_file,
|
||||||
.sendfile = generic_file_sendfile,
|
.splice_read = generic_file_splice_read,
|
||||||
};
|
};
|
||||||
|
|
||||||
const struct inode_operations udf_file_inode_operations = {
|
const struct inode_operations udf_file_inode_operations = {
|
||||||
|
@ -60,5 +60,5 @@ const struct file_operations ufs_file_operations = {
|
|||||||
.mmap = generic_file_mmap,
|
.mmap = generic_file_mmap,
|
||||||
.open = generic_file_open,
|
.open = generic_file_open,
|
||||||
.fsync = ufs_sync_file,
|
.fsync = ufs_sync_file,
|
||||||
.sendfile = generic_file_sendfile,
|
.splice_read = generic_file_splice_read,
|
||||||
};
|
};
|
||||||
|
@ -123,30 +123,6 @@ xfs_file_aio_write_invis(
|
|||||||
return __xfs_file_write(iocb, iov, nr_segs, IO_ISAIO|IO_INVIS, pos);
|
return __xfs_file_write(iocb, iov, nr_segs, IO_ISAIO|IO_INVIS, pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
STATIC ssize_t
|
|
||||||
xfs_file_sendfile(
|
|
||||||
struct file *filp,
|
|
||||||
loff_t *pos,
|
|
||||||
size_t count,
|
|
||||||
read_actor_t actor,
|
|
||||||
void *target)
|
|
||||||
{
|
|
||||||
return bhv_vop_sendfile(vn_from_inode(filp->f_path.dentry->d_inode),
|
|
||||||
filp, pos, 0, count, actor, target, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
STATIC ssize_t
|
|
||||||
xfs_file_sendfile_invis(
|
|
||||||
struct file *filp,
|
|
||||||
loff_t *pos,
|
|
||||||
size_t count,
|
|
||||||
read_actor_t actor,
|
|
||||||
void *target)
|
|
||||||
{
|
|
||||||
return bhv_vop_sendfile(vn_from_inode(filp->f_path.dentry->d_inode),
|
|
||||||
filp, pos, IO_INVIS, count, actor, target, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
STATIC ssize_t
|
STATIC ssize_t
|
||||||
xfs_file_splice_read(
|
xfs_file_splice_read(
|
||||||
struct file *infilp,
|
struct file *infilp,
|
||||||
@ -452,7 +428,6 @@ const struct file_operations xfs_file_operations = {
|
|||||||
.write = do_sync_write,
|
.write = do_sync_write,
|
||||||
.aio_read = xfs_file_aio_read,
|
.aio_read = xfs_file_aio_read,
|
||||||
.aio_write = xfs_file_aio_write,
|
.aio_write = xfs_file_aio_write,
|
||||||
.sendfile = xfs_file_sendfile,
|
|
||||||
.splice_read = xfs_file_splice_read,
|
.splice_read = xfs_file_splice_read,
|
||||||
.splice_write = xfs_file_splice_write,
|
.splice_write = xfs_file_splice_write,
|
||||||
.unlocked_ioctl = xfs_file_ioctl,
|
.unlocked_ioctl = xfs_file_ioctl,
|
||||||
@ -475,7 +450,6 @@ const struct file_operations xfs_invis_file_operations = {
|
|||||||
.write = do_sync_write,
|
.write = do_sync_write,
|
||||||
.aio_read = xfs_file_aio_read_invis,
|
.aio_read = xfs_file_aio_read_invis,
|
||||||
.aio_write = xfs_file_aio_write_invis,
|
.aio_write = xfs_file_aio_write_invis,
|
||||||
.sendfile = xfs_file_sendfile_invis,
|
|
||||||
.splice_read = xfs_file_splice_read_invis,
|
.splice_read = xfs_file_splice_read_invis,
|
||||||
.splice_write = xfs_file_splice_write_invis,
|
.splice_write = xfs_file_splice_write_invis,
|
||||||
.unlocked_ioctl = xfs_file_ioctl_invis,
|
.unlocked_ioctl = xfs_file_ioctl_invis,
|
||||||
|
@ -101,7 +101,6 @@
|
|||||||
* Feature macros (disable/enable)
|
* Feature macros (disable/enable)
|
||||||
*/
|
*/
|
||||||
#undef HAVE_REFCACHE /* reference cache not needed for NFS in 2.6 */
|
#undef HAVE_REFCACHE /* reference cache not needed for NFS in 2.6 */
|
||||||
#define HAVE_SENDFILE /* sendfile(2) exists in 2.6, but not in 2.4 */
|
|
||||||
#define HAVE_SPLICE /* a splice(2) exists in 2.6, but not in 2.4 */
|
#define HAVE_SPLICE /* a splice(2) exists in 2.6, but not in 2.4 */
|
||||||
#ifdef CONFIG_SMP
|
#ifdef CONFIG_SMP
|
||||||
#define HAVE_PERCPU_SB /* per cpu superblock counters are a 2.6 feature */
|
#define HAVE_PERCPU_SB /* per cpu superblock counters are a 2.6 feature */
|
||||||
|
@ -286,50 +286,6 @@ xfs_read(
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
ssize_t
|
|
||||||
xfs_sendfile(
|
|
||||||
bhv_desc_t *bdp,
|
|
||||||
struct file *filp,
|
|
||||||
loff_t *offset,
|
|
||||||
int ioflags,
|
|
||||||
size_t count,
|
|
||||||
read_actor_t actor,
|
|
||||||
void *target,
|
|
||||||
cred_t *credp)
|
|
||||||
{
|
|
||||||
xfs_inode_t *ip = XFS_BHVTOI(bdp);
|
|
||||||
xfs_mount_t *mp = ip->i_mount;
|
|
||||||
ssize_t ret;
|
|
||||||
|
|
||||||
XFS_STATS_INC(xs_read_calls);
|
|
||||||
if (XFS_FORCED_SHUTDOWN(mp))
|
|
||||||
return -EIO;
|
|
||||||
|
|
||||||
xfs_ilock(ip, XFS_IOLOCK_SHARED);
|
|
||||||
|
|
||||||
if (DM_EVENT_ENABLED(BHV_TO_VNODE(bdp)->v_vfsp, ip, DM_EVENT_READ) &&
|
|
||||||
(!(ioflags & IO_INVIS))) {
|
|
||||||
bhv_vrwlock_t locktype = VRWLOCK_READ;
|
|
||||||
int error;
|
|
||||||
|
|
||||||
error = XFS_SEND_DATA(mp, DM_EVENT_READ, BHV_TO_VNODE(bdp),
|
|
||||||
*offset, count,
|
|
||||||
FILP_DELAY_FLAG(filp), &locktype);
|
|
||||||
if (error) {
|
|
||||||
xfs_iunlock(ip, XFS_IOLOCK_SHARED);
|
|
||||||
return -error;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
xfs_rw_enter_trace(XFS_SENDFILE_ENTER, &ip->i_iocore,
|
|
||||||
(void *)(unsigned long)target, count, *offset, ioflags);
|
|
||||||
ret = generic_file_sendfile(filp, offset, count, actor, target);
|
|
||||||
if (ret > 0)
|
|
||||||
XFS_STATS_ADD(xs_read_bytes, ret);
|
|
||||||
|
|
||||||
xfs_iunlock(ip, XFS_IOLOCK_SHARED);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
ssize_t
|
ssize_t
|
||||||
xfs_splice_read(
|
xfs_splice_read(
|
||||||
bhv_desc_t *bdp,
|
bhv_desc_t *bdp,
|
||||||
|
@ -90,9 +90,6 @@ extern ssize_t xfs_read(struct bhv_desc *, struct kiocb *,
|
|||||||
extern ssize_t xfs_write(struct bhv_desc *, struct kiocb *,
|
extern ssize_t xfs_write(struct bhv_desc *, struct kiocb *,
|
||||||
const struct iovec *, unsigned int,
|
const struct iovec *, unsigned int,
|
||||||
loff_t *, int, struct cred *);
|
loff_t *, int, struct cred *);
|
||||||
extern ssize_t xfs_sendfile(struct bhv_desc *, struct file *,
|
|
||||||
loff_t *, int, size_t, read_actor_t,
|
|
||||||
void *, struct cred *);
|
|
||||||
extern ssize_t xfs_splice_read(struct bhv_desc *, struct file *, loff_t *,
|
extern ssize_t xfs_splice_read(struct bhv_desc *, struct file *, loff_t *,
|
||||||
struct pipe_inode_info *, size_t, int, int,
|
struct pipe_inode_info *, size_t, int, int,
|
||||||
struct cred *);
|
struct cred *);
|
||||||
|
@ -139,9 +139,6 @@ typedef ssize_t (*vop_read_t)(bhv_desc_t *, struct kiocb *,
|
|||||||
typedef ssize_t (*vop_write_t)(bhv_desc_t *, struct kiocb *,
|
typedef ssize_t (*vop_write_t)(bhv_desc_t *, struct kiocb *,
|
||||||
const struct iovec *, unsigned int,
|
const struct iovec *, unsigned int,
|
||||||
loff_t *, int, struct cred *);
|
loff_t *, int, struct cred *);
|
||||||
typedef ssize_t (*vop_sendfile_t)(bhv_desc_t *, struct file *,
|
|
||||||
loff_t *, int, size_t, read_actor_t,
|
|
||||||
void *, struct cred *);
|
|
||||||
typedef ssize_t (*vop_splice_read_t)(bhv_desc_t *, struct file *, loff_t *,
|
typedef ssize_t (*vop_splice_read_t)(bhv_desc_t *, struct file *, loff_t *,
|
||||||
struct pipe_inode_info *, size_t, int, int,
|
struct pipe_inode_info *, size_t, int, int,
|
||||||
struct cred *);
|
struct cred *);
|
||||||
@ -206,7 +203,6 @@ typedef struct bhv_vnodeops {
|
|||||||
vop_close_t vop_close;
|
vop_close_t vop_close;
|
||||||
vop_read_t vop_read;
|
vop_read_t vop_read;
|
||||||
vop_write_t vop_write;
|
vop_write_t vop_write;
|
||||||
vop_sendfile_t vop_sendfile;
|
|
||||||
vop_splice_read_t vop_splice_read;
|
vop_splice_read_t vop_splice_read;
|
||||||
vop_splice_write_t vop_splice_write;
|
vop_splice_write_t vop_splice_write;
|
||||||
vop_ioctl_t vop_ioctl;
|
vop_ioctl_t vop_ioctl;
|
||||||
@ -254,8 +250,6 @@ typedef struct bhv_vnodeops {
|
|||||||
VOP(vop_read, vp)(VNHEAD(vp),file,iov,segs,offset,ioflags,cr)
|
VOP(vop_read, vp)(VNHEAD(vp),file,iov,segs,offset,ioflags,cr)
|
||||||
#define bhv_vop_write(vp,file,iov,segs,offset,ioflags,cr) \
|
#define bhv_vop_write(vp,file,iov,segs,offset,ioflags,cr) \
|
||||||
VOP(vop_write, vp)(VNHEAD(vp),file,iov,segs,offset,ioflags,cr)
|
VOP(vop_write, vp)(VNHEAD(vp),file,iov,segs,offset,ioflags,cr)
|
||||||
#define bhv_vop_sendfile(vp,f,off,ioflags,cnt,act,targ,cr) \
|
|
||||||
VOP(vop_sendfile, vp)(VNHEAD(vp),f,off,ioflags,cnt,act,targ,cr)
|
|
||||||
#define bhv_vop_splice_read(vp,f,o,pipe,cnt,fl,iofl,cr) \
|
#define bhv_vop_splice_read(vp,f,o,pipe,cnt,fl,iofl,cr) \
|
||||||
VOP(vop_splice_read, vp)(VNHEAD(vp),f,o,pipe,cnt,fl,iofl,cr)
|
VOP(vop_splice_read, vp)(VNHEAD(vp),f,o,pipe,cnt,fl,iofl,cr)
|
||||||
#define bhv_vop_splice_write(vp,f,o,pipe,cnt,fl,iofl,cr) \
|
#define bhv_vop_splice_write(vp,f,o,pipe,cnt,fl,iofl,cr) \
|
||||||
|
@ -4680,9 +4680,6 @@ bhv_vnodeops_t xfs_vnodeops = {
|
|||||||
.vop_open = xfs_open,
|
.vop_open = xfs_open,
|
||||||
.vop_close = xfs_close,
|
.vop_close = xfs_close,
|
||||||
.vop_read = xfs_read,
|
.vop_read = xfs_read,
|
||||||
#ifdef HAVE_SENDFILE
|
|
||||||
.vop_sendfile = xfs_sendfile,
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_SPLICE
|
#ifdef HAVE_SPLICE
|
||||||
.vop_splice_read = xfs_splice_read,
|
.vop_splice_read = xfs_splice_read,
|
||||||
.vop_splice_write = xfs_splice_write,
|
.vop_splice_write = xfs_splice_write,
|
||||||
|
Loading…
Reference in New Issue
Block a user