Merge branch 'hch' (patches from Christoph)
Merge procfs splice read fixes from Christoph Hellwig: "Greg reported a problem due to the fact that Android tests use procfs files to test splice, which stopped working with the changes for set_fs() removal. This series adds read_iter support for seq_file, and uses those for various proc files using seq_file to restore splice read support" [ Side note: Christoph initially had a scripted "move everything over" patch, which looks fine, but I personally would prefer us to actively discourage splice() on random files. So this does just the minimal basic core set of proc file op conversions. For completeness, and in case people care, that script was sed -i -e 's/\.proc_read\(\s*=\s*\)seq_read/\.proc_read_iter\1seq_read_iter/g' but I'll wait and see if somebody has a strong argument for using splice on random small /proc files before I'd run it on the whole kernel. - Linus ] * emailed patches from Christoph Hellwig <hch@lst.de>: proc "seq files": switch to ->read_iter proc "single files": switch to ->read_iter proc/stat: switch to ->read_iter proc/cpuinfo: switch to ->read_iter proc: wire up generic_file_splice_read for iter ops seq_file: add seq_read_iter
This commit is contained in:
@@ -19,7 +19,7 @@ static int cpuinfo_open(struct inode *inode, struct file *file)
|
||||
static const struct proc_ops cpuinfo_proc_ops = {
|
||||
.proc_flags = PROC_ENTRY_PERMANENT,
|
||||
.proc_open = cpuinfo_open,
|
||||
.proc_read = seq_read,
|
||||
.proc_read_iter = seq_read_iter,
|
||||
.proc_lseek = seq_lseek,
|
||||
.proc_release = seq_release,
|
||||
};
|
||||
|
@@ -590,7 +590,7 @@ static int proc_seq_release(struct inode *inode, struct file *file)
|
||||
static const struct proc_ops proc_seq_ops = {
|
||||
/* not permanent -- can call into arbitrary seq_operations */
|
||||
.proc_open = proc_seq_open,
|
||||
.proc_read = seq_read,
|
||||
.proc_read_iter = seq_read_iter,
|
||||
.proc_lseek = seq_lseek,
|
||||
.proc_release = proc_seq_release,
|
||||
};
|
||||
@@ -621,7 +621,7 @@ static int proc_single_open(struct inode *inode, struct file *file)
|
||||
static const struct proc_ops proc_single_ops = {
|
||||
/* not permanent -- can call into arbitrary ->single_show */
|
||||
.proc_open = proc_single_open,
|
||||
.proc_read = seq_read,
|
||||
.proc_read_iter = seq_read_iter,
|
||||
.proc_lseek = seq_lseek,
|
||||
.proc_release = single_release,
|
||||
};
|
||||
|
@@ -597,6 +597,7 @@ static const struct file_operations proc_iter_file_ops = {
|
||||
.llseek = proc_reg_llseek,
|
||||
.read_iter = proc_reg_read_iter,
|
||||
.write = proc_reg_write,
|
||||
.splice_read = generic_file_splice_read,
|
||||
.poll = proc_reg_poll,
|
||||
.unlocked_ioctl = proc_reg_unlocked_ioctl,
|
||||
.mmap = proc_reg_mmap,
|
||||
@@ -622,6 +623,7 @@ static const struct file_operations proc_reg_file_ops_compat = {
|
||||
static const struct file_operations proc_iter_file_ops_compat = {
|
||||
.llseek = proc_reg_llseek,
|
||||
.read_iter = proc_reg_read_iter,
|
||||
.splice_read = generic_file_splice_read,
|
||||
.write = proc_reg_write,
|
||||
.poll = proc_reg_poll,
|
||||
.unlocked_ioctl = proc_reg_unlocked_ioctl,
|
||||
|
@@ -226,7 +226,7 @@ static int stat_open(struct inode *inode, struct file *file)
|
||||
static const struct proc_ops stat_proc_ops = {
|
||||
.proc_flags = PROC_ENTRY_PERMANENT,
|
||||
.proc_open = stat_open,
|
||||
.proc_read = seq_read,
|
||||
.proc_read_iter = seq_read_iter,
|
||||
.proc_lseek = seq_lseek,
|
||||
.proc_release = single_release,
|
||||
};
|
||||
|
Reference in New Issue
Block a user