提交 5ffc4ef4 编写于 作者: J Jens Axboe

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: NJens Axboe <jens.axboe@oracle.com>
上级 534f2aaa
...@@ -33,7 +33,7 @@ const struct file_operations adfs_file_operations = { ...@@ -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 = { ...@@ -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 = { ...@@ -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 = { ...@@ -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 = { ...@@ -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 = { ...@@ -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 = { ...@@ -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 = { ...@@ -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 = { ...@@ -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 ...@@ -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, ...@@ -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 = { ...@@ -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) ...@@ -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 = { ...@@ -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 = { ...@@ -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 = { ...@@ -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 = { ...@@ -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 = { ...@@ -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 = { ...@@ -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 = { ...@@ -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 = { ...@@ -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 = { ...@@ -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 = { ...@@ -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 = { ...@@ -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) ...@@ -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 = ...@@ -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 = ...@@ -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 = { ...@@ -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 = { ...@@ -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 = { ...@@ -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 = { ...@@ -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 = ...@@ -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 = { ...@@ -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 = { ...@@ -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 = { ...@@ -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 @@ smb_file_mmap(struct file * file, struct vm_area_struct * vma) ...@@ -262,8 +262,9 @@ smb_file_mmap(struct file * file, struct vm_area_struct * vma)
} }
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, ...@@ -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 = ...@@ -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 = { ...@@ -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 = { ...@@ -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 = { ...@@ -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( ...@@ -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 = { ...@@ -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 = { ...@@ -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 @@ ...@@ -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( ...@@ -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 *, ...@@ -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 *, ...@@ -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 { ...@@ -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 { ...@@ -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 = { ...@@ -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,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册