public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Jens Axboe <axboe@kernel.dk>
To: linux-kernel@vger.kernel.org
Cc: Jens Axboe <axboe@kernel.dk>
Subject: [PATCH 080/437] tracing: convert to read/write iterators
Date: Thu, 11 Apr 2024 09:13:40 -0600	[thread overview]
Message-ID: <20240411153126.16201-81-axboe@kernel.dk> (raw)
In-Reply-To: <20240411153126.16201-1-axboe@kernel.dk>

Signed-off-by: Jens Axboe <axboe@kernel.dk>
---
 include/linux/ftrace.h                |  11 +-
 kernel/trace/blktrace.c               |  19 +-
 kernel/trace/ftrace.c                 |  68 +++--
 kernel/trace/trace.c                  | 386 ++++++++++++--------------
 kernel/trace/trace_dynevent.c         |   5 +-
 kernel/trace/trace_events.c           | 116 ++++----
 kernel/trace/trace_events_hist.c      |   4 +-
 kernel/trace/trace_events_inject.c    |  19 +-
 kernel/trace/trace_events_synth.c     |   5 +-
 kernel/trace/trace_events_trigger.c   |  22 +-
 kernel/trace/trace_events_user.c      |  17 +-
 kernel/trace/trace_functions_graph.c  |  20 +-
 kernel/trace/trace_hwlat.c            |  20 +-
 kernel/trace/trace_kprobe.c           |   7 +-
 kernel/trace/trace_osnoise.c          |  42 ++-
 kernel/trace/trace_printk.c           |   2 +-
 kernel/trace/trace_recursion_record.c |  10 +-
 kernel/trace/trace_sched_switch.c     |  21 +-
 kernel/trace/trace_stack.c            |  27 +-
 kernel/trace/trace_stat.c             |   2 +-
 kernel/trace/trace_uprobe.c           |   7 +-
 21 files changed, 378 insertions(+), 452 deletions(-)

diff --git a/include/linux/ftrace.h b/include/linux/ftrace.h
index 54d53f345d14..468db649094b 100644
--- a/include/linux/ftrace.h
+++ b/include/linux/ftrace.h
@@ -674,10 +674,8 @@ extern ftrace_func_t ftrace_trace_function;
 
 int ftrace_regex_open(struct ftrace_ops *ops, int flag,
 		  struct inode *inode, struct file *file);
-ssize_t ftrace_filter_write(struct file *file, const char __user *ubuf,
-			    size_t cnt, loff_t *ppos);
-ssize_t ftrace_notrace_write(struct file *file, const char __user *ubuf,
-			     size_t cnt, loff_t *ppos);
+ssize_t ftrace_filter_write_iter(struct kiocb *iocb, struct iov_iter *from);
+ssize_t ftrace_notrace_write_iter(struct kiocb *iocb, struct iov_iter *from);
 int ftrace_regex_release(struct inode *inode, struct file *file);
 
 void __init
@@ -890,8 +888,9 @@ static inline unsigned long ftrace_location(unsigned long ip)
 #define ftrace_free_filter(ops) do { } while (0)
 #define ftrace_ops_set_global_filter(ops) do { } while (0)
 
-static inline ssize_t ftrace_filter_write(struct file *file, const char __user *ubuf,
-			    size_t cnt, loff_t *ppos) { return -ENODEV; }
+static inline ssize_t ftrace_filter_write_iter(struct kiocb *iocb,
+					       struct iov_iter *from)
+{ return -ENODEV; }
 static inline ssize_t ftrace_notrace_write(struct file *file, const char __user *ubuf,
 			     size_t cnt, loff_t *ppos) { return -ENODEV; }
 static inline int
diff --git a/kernel/trace/blktrace.c b/kernel/trace/blktrace.c
index d5d94510afd3..737551849daf 100644
--- a/kernel/trace/blktrace.c
+++ b/kernel/trace/blktrace.c
@@ -411,38 +411,37 @@ int blk_trace_remove(struct request_queue *q)
 }
 EXPORT_SYMBOL_GPL(blk_trace_remove);
 
-static ssize_t blk_dropped_read(struct file *filp, char __user *buffer,
-				size_t count, loff_t *ppos)
+static ssize_t blk_dropped_read(struct kiocb *iocb, struct iov_iter *to)
 {
-	struct blk_trace *bt = filp->private_data;
+	struct blk_trace *bt = iocb->ki_filp->private_data;
 	char buf[16];
 
 	snprintf(buf, sizeof(buf), "%u\n", atomic_read(&bt->dropped));
 
-	return simple_read_from_buffer(buffer, count, ppos, buf, strlen(buf));
+	return simple_copy_to_iter(buf, &iocb->ki_pos, strlen(buf), to);
 }
 
 static const struct file_operations blk_dropped_fops = {
 	.owner =	THIS_MODULE,
 	.open =		simple_open,
-	.read =		blk_dropped_read,
+	.read_iter =	blk_dropped_read,
 	.llseek =	default_llseek,
 };
 
-static ssize_t blk_msg_write(struct file *filp, const char __user *buffer,
-				size_t count, loff_t *ppos)
+static ssize_t blk_msg_write(struct kiocb *iocb, struct iov_iter *from)
 {
+	size_t count = iov_iter_count(from);
 	char *msg;
 	struct blk_trace *bt;
 
 	if (count >= BLK_TN_MAX_MSG)
 		return -EINVAL;
 
-	msg = memdup_user_nul(buffer, count);
+	msg = iterdup_nul(from, count);
 	if (IS_ERR(msg))
 		return PTR_ERR(msg);
 
-	bt = filp->private_data;
+	bt = iocb->ki_filp->private_data;
 	__blk_trace_note_message(bt, NULL, "%s", msg);
 	kfree(msg);
 
@@ -452,7 +451,7 @@ static ssize_t blk_msg_write(struct file *filp, const char __user *buffer,
 static const struct file_operations blk_msg_fops = {
 	.owner =	THIS_MODULE,
 	.open =		simple_open,
-	.write =	blk_msg_write,
+	.write_iter =	blk_msg_write,
 	.llseek =	noop_llseek,
 };
 
diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
index da1710499698..fa9b0bcc7cb1 100644
--- a/kernel/trace/ftrace.c
+++ b/kernel/trace/ftrace.c
@@ -909,14 +909,13 @@ static void unregister_ftrace_profiler(void)
 }
 #endif /* CONFIG_FUNCTION_GRAPH_TRACER */
 
-static ssize_t
-ftrace_profile_write(struct file *filp, const char __user *ubuf,
-		     size_t cnt, loff_t *ppos)
+static ssize_t ftrace_profile_write(struct kiocb *iocb, struct iov_iter *from)
 {
+	size_t cnt = iov_iter_count(from);
 	unsigned long val;
 	int ret;
 
-	ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
+	ret = kstrtoul_from_iter(from, cnt, 10, &val);
 	if (ret)
 		return ret;
 
@@ -949,26 +948,24 @@ ftrace_profile_write(struct file *filp, const char __user *ubuf,
  out:
 	mutex_unlock(&ftrace_profile_lock);
 
-	*ppos += cnt;
+	iocb->ki_pos += cnt;
 
 	return cnt;
 }
 
-static ssize_t
-ftrace_profile_read(struct file *filp, char __user *ubuf,
-		     size_t cnt, loff_t *ppos)
+static ssize_t ftrace_profile_read(struct kiocb *iocb, struct iov_iter *to)
 {
 	char buf[64];		/* big enough to hold a number */
 	int r;
 
 	r = sprintf(buf, "%u\n", ftrace_profile_enabled);
-	return simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
+	return simple_copy_to_iter(buf, &iocb->ki_pos, r, to);
 }
 
 static const struct file_operations ftrace_profile_fops = {
 	.open		= tracing_open_generic,
-	.read		= ftrace_profile_read,
-	.write		= ftrace_profile_write,
+	.read_iter	= ftrace_profile_read,
+	.write_iter	= ftrace_profile_write,
 	.llseek		= default_llseek,
 };
 
@@ -5204,20 +5201,30 @@ ftrace_regex_write(struct file *file, const char __user *ubuf,
 	return ret;
 }
 
-ssize_t
+static ssize_t
 ftrace_filter_write(struct file *file, const char __user *ubuf,
 		    size_t cnt, loff_t *ppos)
 {
 	return ftrace_regex_write(file, ubuf, cnt, ppos, 1);
 }
 
-ssize_t
+ssize_t ftrace_filter_write_iter(struct kiocb *iocb, struct iov_iter *from)
+{
+	return vfs_write_iter(iocb, from, ftrace_filter_write);
+}
+
+static ssize_t
 ftrace_notrace_write(struct file *file, const char __user *ubuf,
 		     size_t cnt, loff_t *ppos)
 {
 	return ftrace_regex_write(file, ubuf, cnt, ppos, 0);
 }
 
+ssize_t ftrace_notrace_write_iter(struct kiocb *iocb, struct iov_iter *from)
+{
+	return vfs_write_iter(iocb, from, ftrace_notrace_write);
+}
+
 static int
 __ftrace_match_addr(struct ftrace_hash *hash, unsigned long ip, int remove)
 {
@@ -5937,44 +5944,44 @@ int ftrace_regex_release(struct inode *inode, struct file *file)
 
 static const struct file_operations ftrace_avail_fops = {
 	.open = ftrace_avail_open,
-	.read = seq_read,
+	.read_iter = seq_read_iter,
 	.llseek = seq_lseek,
 	.release = seq_release_private,
 };
 
 static const struct file_operations ftrace_enabled_fops = {
 	.open = ftrace_enabled_open,
-	.read = seq_read,
+	.read_iter = seq_read_iter,
 	.llseek = seq_lseek,
 	.release = seq_release_private,
 };
 
 static const struct file_operations ftrace_touched_fops = {
 	.open = ftrace_touched_open,
-	.read = seq_read,
+	.read_iter = seq_read_iter,
 	.llseek = seq_lseek,
 	.release = seq_release_private,
 };
 
 static const struct file_operations ftrace_avail_addrs_fops = {
 	.open = ftrace_avail_addrs_open,
-	.read = seq_read,
+	.read_iter = seq_read_iter,
 	.llseek = seq_lseek,
 	.release = seq_release_private,
 };
 
 static const struct file_operations ftrace_filter_fops = {
 	.open = ftrace_filter_open,
-	.read = seq_read,
-	.write = ftrace_filter_write,
+	.read_iter = seq_read_iter,
+	.write_iter = ftrace_filter_write_iter,
 	.llseek = tracing_lseek,
 	.release = ftrace_regex_release,
 };
 
 static const struct file_operations ftrace_notrace_fops = {
 	.open = ftrace_notrace_open,
-	.read = seq_read,
-	.write = ftrace_notrace_write,
+	.read_iter = seq_read_iter,
+	.write_iter = ftrace_notrace_write_iter,
 	.llseek = tracing_lseek,
 	.release = ftrace_regex_release,
 };
@@ -6369,19 +6376,20 @@ ftrace_graph_write(struct file *file, const char __user *ubuf,
 
 	return ret;
 }
+FOPS_WRITE_ITER_HELPER(ftrace_graph_write);
 
 static const struct file_operations ftrace_graph_fops = {
 	.open		= ftrace_graph_open,
-	.read		= seq_read,
-	.write		= ftrace_graph_write,
+	.read_iter	= seq_read_iter,
+	.write_iter	= ftrace_graph_write_iter,
 	.llseek		= tracing_lseek,
 	.release	= ftrace_graph_release,
 };
 
 static const struct file_operations ftrace_graph_notrace_fops = {
 	.open		= ftrace_graph_notrace_open,
-	.read		= seq_read,
-	.write		= ftrace_graph_write,
+	.read_iter	= seq_read_iter,
+	.write_iter	= ftrace_graph_write_iter,
 	.llseek		= tracing_lseek,
 	.release	= ftrace_graph_release,
 };
@@ -7831,6 +7839,7 @@ ftrace_pid_write(struct file *filp, const char __user *ubuf,
 {
 	return pid_write(filp, ubuf, cnt, ppos, TRACE_PIDS);
 }
+FOPS_WRITE_ITER_HELPER(ftrace_pid_write);
 
 static ssize_t
 ftrace_no_pid_write(struct file *filp, const char __user *ubuf,
@@ -7838,6 +7847,7 @@ ftrace_no_pid_write(struct file *filp, const char __user *ubuf,
 {
 	return pid_write(filp, ubuf, cnt, ppos, TRACE_NO_PIDS);
 }
+FOPS_WRITE_ITER_HELPER(ftrace_no_pid_write);
 
 static int
 ftrace_pid_release(struct inode *inode, struct file *file)
@@ -7851,16 +7861,16 @@ ftrace_pid_release(struct inode *inode, struct file *file)
 
 static const struct file_operations ftrace_pid_fops = {
 	.open		= ftrace_pid_open,
-	.write		= ftrace_pid_write,
-	.read		= seq_read,
+	.write_iter	= ftrace_pid_write_iter,
+	.read_iter	= seq_read_iter,
 	.llseek		= tracing_lseek,
 	.release	= ftrace_pid_release,
 };
 
 static const struct file_operations ftrace_no_pid_fops = {
 	.open		= ftrace_no_pid_open,
-	.write		= ftrace_no_pid_write,
-	.read		= seq_read,
+	.write_iter	= ftrace_no_pid_write_iter,
+	.read_iter	= seq_read_iter,
 	.llseek		= tracing_lseek,
 	.release	= ftrace_pid_release,
 };
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
index 233d1af39fff..317aa6a5944f 100644
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
@@ -5015,11 +5015,9 @@ static int show_traces_release(struct inode *inode, struct file *file)
 	return seq_release(inode, file);
 }
 
-static ssize_t
-tracing_write_stub(struct file *filp, const char __user *ubuf,
-		   size_t count, loff_t *ppos)
+static ssize_t tracing_write_stub(struct kiocb *iocb, struct iov_iter *to)
 {
-	return count;
+	return iov_iter_count(to);
 }
 
 loff_t tracing_lseek(struct file *file, loff_t offset, int whence)
@@ -5036,26 +5034,24 @@ loff_t tracing_lseek(struct file *file, loff_t offset, int whence)
 
 static const struct file_operations tracing_fops = {
 	.open		= tracing_open,
-	.read		= seq_read,
 	.read_iter	= seq_read_iter,
 	.splice_read	= copy_splice_read,
-	.write		= tracing_write_stub,
+	.write_iter	= tracing_write_stub,
 	.llseek		= tracing_lseek,
 	.release	= tracing_release,
 };
 
 static const struct file_operations show_traces_fops = {
 	.open		= show_traces_open,
-	.read		= seq_read,
+	.read_iter	= seq_read_iter,
 	.llseek		= seq_lseek,
 	.release	= show_traces_release,
 };
 
-static ssize_t
-tracing_cpumask_read(struct file *filp, char __user *ubuf,
-		     size_t count, loff_t *ppos)
+static ssize_t tracing_cpumask_read(struct kiocb *iocb, struct iov_iter *to)
 {
-	struct trace_array *tr = file_inode(filp)->i_private;
+	struct trace_array *tr = file_inode(iocb->ki_filp)->i_private;
+	size_t count = iov_iter_count(to);
 	char *mask_str;
 	int len;
 
@@ -5071,7 +5067,7 @@ tracing_cpumask_read(struct file *filp, char __user *ubuf,
 		count = -EINVAL;
 		goto out_err;
 	}
-	count = simple_read_from_buffer(ubuf, count, ppos, mask_str, len);
+	count = simple_copy_to_iter(mask_str, &iocb->ki_pos, len, to);
 
 out_err:
 	kfree(mask_str);
@@ -5147,11 +5143,12 @@ tracing_cpumask_write(struct file *filp, const char __user *ubuf,
 
 	return err;
 }
+FOPS_WRITE_ITER_HELPER(tracing_cpumask_write);
 
 static const struct file_operations tracing_cpumask_fops = {
 	.open		= tracing_open_generic_tr,
-	.read		= tracing_cpumask_read,
-	.write		= tracing_cpumask_write,
+	.read_iter	= tracing_cpumask_read,
+	.write_iter	= tracing_cpumask_write_iter,
 	.release	= tracing_release_generic_tr,
 	.llseek		= generic_file_llseek,
 };
@@ -5343,19 +5340,19 @@ static void __init apply_trace_boot_options(void)
 	}
 }
 
-static ssize_t
-tracing_trace_options_write(struct file *filp, const char __user *ubuf,
-			size_t cnt, loff_t *ppos)
+static ssize_t tracing_trace_options_write(struct kiocb *iocb,
+					   struct iov_iter *from)
 {
-	struct seq_file *m = filp->private_data;
+	struct seq_file *m = iocb->ki_filp->private_data;
 	struct trace_array *tr = m->private;
+	size_t cnt = iov_iter_count(from);
 	char buf[64];
 	int ret;
 
 	if (cnt >= sizeof(buf))
 		return -EINVAL;
 
-	if (copy_from_user(buf, ubuf, cnt))
+	if (!copy_from_iter_full(buf, cnt, from))
 		return -EFAULT;
 
 	buf[cnt] = 0;
@@ -5364,7 +5361,7 @@ tracing_trace_options_write(struct file *filp, const char __user *ubuf,
 	if (ret < 0)
 		return ret;
 
-	*ppos += cnt;
+	iocb->ki_pos += cnt;
 
 	return cnt;
 }
@@ -5387,10 +5384,10 @@ static int tracing_trace_options_open(struct inode *inode, struct file *file)
 
 static const struct file_operations tracing_iter_fops = {
 	.open		= tracing_trace_options_open,
-	.read		= seq_read,
+	.read_iter	= seq_read_iter,
 	.llseek		= seq_lseek,
 	.release	= tracing_single_release_tr,
-	.write		= tracing_trace_options_write,
+	.write_iter	= tracing_trace_options_write,
 };
 
 static const char readme_msg[] =
@@ -5685,17 +5682,15 @@ static const char readme_msg[] =
 #endif
 ;
 
-static ssize_t
-tracing_readme_read(struct file *filp, char __user *ubuf,
-		       size_t cnt, loff_t *ppos)
+static ssize_t tracing_readme_read(struct kiocb *iocb, struct iov_iter *to)
 {
-	return simple_read_from_buffer(ubuf, cnt, ppos,
-					readme_msg, strlen(readme_msg));
+	return simple_copy_to_iter(readme_msg, &iocb->ki_pos,
+				   strlen(readme_msg), to);
 }
 
 static const struct file_operations tracing_readme_fops = {
 	.open		= tracing_open_generic,
-	.read		= tracing_readme_read,
+	.read_iter	= tracing_readme_read,
 	.llseek		= generic_file_llseek,
 };
 
@@ -5787,7 +5782,7 @@ static int tracing_eval_map_open(struct inode *inode, struct file *filp)
 
 static const struct file_operations tracing_eval_map_fops = {
 	.open		= tracing_eval_map_open,
-	.read		= seq_read,
+	.read_iter	= seq_read_iter,
 	.llseek		= seq_lseek,
 	.release	= seq_release,
 };
@@ -5876,11 +5871,9 @@ static void trace_insert_eval_map(struct module *mod,
 	trace_insert_eval_map_file(mod, start, len);
 }
 
-static ssize_t
-tracing_set_trace_read(struct file *filp, char __user *ubuf,
-		       size_t cnt, loff_t *ppos)
+static ssize_t tracing_set_trace_read(struct kiocb *iocb, struct iov_iter *from)
 {
-	struct trace_array *tr = filp->private_data;
+	struct trace_array *tr = iocb->ki_filp->private_data;
 	char buf[MAX_TRACER_SIZE+2];
 	int r;
 
@@ -5888,7 +5881,7 @@ tracing_set_trace_read(struct file *filp, char __user *ubuf,
 	r = sprintf(buf, "%s\n", tr->current_trace->name);
 	mutex_unlock(&trace_types_lock);
 
-	return simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
+	return simple_copy_from_iter(buf, &iocb->ki_pos, r, from);
 }
 
 int tracer_init(struct tracer *t, struct trace_array *tr)
@@ -6207,11 +6200,11 @@ int tracing_set_tracer(struct trace_array *tr, const char *buf)
 	return ret;
 }
 
-static ssize_t
-tracing_set_trace_write(struct file *filp, const char __user *ubuf,
-			size_t cnt, loff_t *ppos)
+static ssize_t tracing_set_trace_write(struct kiocb *iocb,
+				       struct iov_iter *from)
 {
-	struct trace_array *tr = filp->private_data;
+	struct trace_array *tr = iocb->ki_filp->private_data;
+	size_t cnt = iov_iter_count(from);
 	char buf[MAX_TRACER_SIZE+1];
 	char *name;
 	size_t ret;
@@ -6222,7 +6215,7 @@ tracing_set_trace_write(struct file *filp, const char __user *ubuf,
 	if (cnt > MAX_TRACER_SIZE)
 		cnt = MAX_TRACER_SIZE;
 
-	if (copy_from_user(buf, ubuf, cnt))
+	if (!copy_from_iter_full(buf, cnt, from))
 		return -EFAULT;
 
 	buf[cnt] = 0;
@@ -6233,14 +6226,13 @@ tracing_set_trace_write(struct file *filp, const char __user *ubuf,
 	if (err)
 		return err;
 
-	*ppos += ret;
+	iocb->ki_pos += ret;
 
 	return ret;
 }
 
 static ssize_t
-tracing_nsecs_read(unsigned long *ptr, char __user *ubuf,
-		   size_t cnt, loff_t *ppos)
+tracing_nsecs_read(unsigned long *ptr, struct kiocb *iocb, struct iov_iter *to)
 {
 	char buf[64];
 	int r;
@@ -6249,17 +6241,18 @@ tracing_nsecs_read(unsigned long *ptr, char __user *ubuf,
 		     *ptr == (unsigned long)-1 ? -1 : nsecs_to_usecs(*ptr));
 	if (r > sizeof(buf))
 		r = sizeof(buf);
-	return simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
+	return simple_copy_to_iter(buf, &iocb->ki_pos, r, to);
 }
 
 static ssize_t
-tracing_nsecs_write(unsigned long *ptr, const char __user *ubuf,
-		    size_t cnt, loff_t *ppos)
+tracing_nsecs_write(unsigned long *ptr, struct kiocb *iocb,
+		    struct iov_iter *from)
 {
+	size_t cnt = iov_iter_count(from);
 	unsigned long val;
 	int ret;
 
-	ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
+	ret = kstrtoul_from_iter(from, cnt, 10, &val);
 	if (ret)
 		return ret;
 
@@ -6268,22 +6261,19 @@ tracing_nsecs_write(unsigned long *ptr, const char __user *ubuf,
 	return cnt;
 }
 
-static ssize_t
-tracing_thresh_read(struct file *filp, char __user *ubuf,
-		    size_t cnt, loff_t *ppos)
+static ssize_t tracing_thresh_read(struct kiocb *iocb, struct iov_iter *to)
 {
-	return tracing_nsecs_read(&tracing_thresh, ubuf, cnt, ppos);
+	return tracing_nsecs_read(&tracing_thresh, iocb, to);
 }
 
-static ssize_t
-tracing_thresh_write(struct file *filp, const char __user *ubuf,
-		     size_t cnt, loff_t *ppos)
+static ssize_t tracing_thresh_write(struct kiocb *iocb, struct iov_iter *from)
 {
-	struct trace_array *tr = filp->private_data;
+	struct trace_array *tr = iocb->ki_filp->private_data;
+	size_t cnt = iov_iter_count(from);
 	int ret;
 
 	mutex_lock(&trace_types_lock);
-	ret = tracing_nsecs_write(&tracing_thresh, ubuf, cnt, ppos);
+	ret = tracing_nsecs_write(&tracing_thresh, iocb, from);
 	if (ret < 0)
 		goto out;
 
@@ -6302,22 +6292,18 @@ tracing_thresh_write(struct file *filp, const char __user *ubuf,
 
 #ifdef CONFIG_TRACER_MAX_TRACE
 
-static ssize_t
-tracing_max_lat_read(struct file *filp, char __user *ubuf,
-		     size_t cnt, loff_t *ppos)
+static ssize_t tracing_max_lat_read(struct kiocb *iocb, struct iov_iter *to)
 {
-	struct trace_array *tr = filp->private_data;
+	struct trace_array *tr = iocb->ki_filp->private_data;
 
-	return tracing_nsecs_read(&tr->max_latency, ubuf, cnt, ppos);
+	return tracing_nsecs_read(&tr->max_latency, iocb, to);
 }
 
-static ssize_t
-tracing_max_lat_write(struct file *filp, const char __user *ubuf,
-		      size_t cnt, loff_t *ppos)
+static ssize_t tracing_max_lat_write(struct kiocb *iocb, struct iov_iter *from)
 {
-	struct trace_array *tr = filp->private_data;
+	struct trace_array *tr = iocb->ki_filp->private_data;
 
-	return tracing_nsecs_write(&tr->max_latency, ubuf, cnt, ppos);
+	return tracing_nsecs_write(&tr->max_latency, iocb, from);
 }
 
 #endif
@@ -6609,6 +6595,7 @@ tracing_read_pipe(struct file *filp, char __user *ubuf,
 
 	return sret;
 }
+FOPS_READ_ITER_HELPER(tracing_read_pipe);
 
 static void tracing_spd_release_pipe(struct splice_pipe_desc *spd,
 				     unsigned int idx)
@@ -6749,16 +6736,13 @@ static ssize_t tracing_splice_read_pipe(struct file *filp,
 	goto out;
 }
 
-static ssize_t
-tracing_entries_read(struct file *filp, char __user *ubuf,
-		     size_t cnt, loff_t *ppos)
+static ssize_t tracing_entries_read(struct kiocb *iocb, struct iov_iter *to)
 {
-	struct inode *inode = file_inode(filp);
+	struct inode *inode = file_inode(iocb->ki_filp);
 	struct trace_array *tr = inode->i_private;
 	int cpu = tracing_get_cpu(inode);
 	char buf[64];
 	int r = 0;
-	ssize_t ret;
 
 	mutex_lock(&trace_types_lock);
 
@@ -6792,21 +6776,18 @@ tracing_entries_read(struct file *filp, char __user *ubuf,
 		r = sprintf(buf, "%lu\n", per_cpu_ptr(tr->array_buffer.data, cpu)->entries >> 10);
 
 	mutex_unlock(&trace_types_lock);
-
-	ret = simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
-	return ret;
+	return simple_copy_to_iter(buf, &iocb->ki_pos, r, to);
 }
 
-static ssize_t
-tracing_entries_write(struct file *filp, const char __user *ubuf,
-		      size_t cnt, loff_t *ppos)
+static ssize_t tracing_entries_write(struct kiocb *iocb, struct iov_iter *from)
 {
-	struct inode *inode = file_inode(filp);
+	struct inode *inode = file_inode(iocb->ki_filp);
 	struct trace_array *tr = inode->i_private;
+	size_t cnt = iov_iter_count(from);
 	unsigned long val;
 	int ret;
 
-	ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
+	ret = kstrtoul_from_iter(from, cnt, 10, &val);
 	if (ret)
 		return ret;
 
@@ -6820,16 +6801,15 @@ tracing_entries_write(struct file *filp, const char __user *ubuf,
 	if (ret < 0)
 		return ret;
 
-	*ppos += cnt;
+	iocb->ki_pos += cnt;
 
 	return cnt;
 }
 
 static ssize_t
-tracing_total_entries_read(struct file *filp, char __user *ubuf,
-				size_t cnt, loff_t *ppos)
+tracing_total_entries_read(struct kiocb *iocb, struct iov_iter *to)
 {
-	struct trace_array *tr = filp->private_data;
+	struct trace_array *tr = iocb->ki_filp->private_data;
 	char buf[64];
 	int r, cpu;
 	unsigned long size = 0, expanded_size = 0;
@@ -6846,19 +6826,20 @@ tracing_total_entries_read(struct file *filp, char __user *ubuf,
 		r = sprintf(buf, "%lu (expanded: %lu)\n", size, expanded_size);
 	mutex_unlock(&trace_types_lock);
 
-	return simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
+	return simple_copy_to_iter(buf, &iocb->ki_pos, r, to);
 }
 
 static ssize_t
-tracing_free_buffer_write(struct file *filp, const char __user *ubuf,
-			  size_t cnt, loff_t *ppos)
+tracing_free_buffer_write(struct kiocb *iocb, struct iov_iter *from)
 {
+	size_t cnt = iov_iter_count(from);
+
 	/*
 	 * There is no need to read what the user has written, this function
 	 * is just to make sure that there is no error when "echo" is used
 	 */
 
-	*ppos += cnt;
+	iocb->ki_pos += cnt;
 
 	return cnt;
 }
@@ -6974,6 +6955,7 @@ tracing_mark_write(struct file *filp, const char __user *ubuf,
 
 	return written;
 }
+FOPS_WRITE_ITER_HELPER(tracing_mark_write);
 
 static ssize_t
 tracing_mark_raw_write(struct file *filp, const char __user *ubuf,
@@ -7028,6 +7010,7 @@ tracing_mark_raw_write(struct file *filp, const char __user *ubuf,
 
 	return written;
 }
+FOPS_WRITE_ITER_HELPER(tracing_mark_raw_write);
 
 static int tracing_clock_show(struct seq_file *m, void *v)
 {
@@ -7078,11 +7061,11 @@ int tracing_set_clock(struct trace_array *tr, const char *clockstr)
 	return 0;
 }
 
-static ssize_t tracing_clock_write(struct file *filp, const char __user *ubuf,
-				   size_t cnt, loff_t *fpos)
+static ssize_t tracing_clock_write(struct kiocb *iocb, struct iov_iter *from)
 {
-	struct seq_file *m = filp->private_data;
+	struct seq_file *m = iocb->ki_filp->private_data;
 	struct trace_array *tr = m->private;
+	size_t cnt = iov_iter_count(from);
 	char buf[64];
 	const char *clockstr;
 	int ret;
@@ -7090,7 +7073,7 @@ static ssize_t tracing_clock_write(struct file *filp, const char __user *ubuf,
 	if (cnt >= sizeof(buf))
 		return -EINVAL;
 
-	if (copy_from_user(buf, ubuf, cnt))
+	if (!copy_from_iter(buf, cnt, from))
 		return -EFAULT;
 
 	buf[cnt] = 0;
@@ -7101,7 +7084,7 @@ static ssize_t tracing_clock_write(struct file *filp, const char __user *ubuf,
 	if (ret)
 		return ret;
 
-	*fpos += cnt;
+	iocb->ki_pos += cnt;
 
 	return cnt;
 }
@@ -7331,6 +7314,7 @@ tracing_snapshot_write(struct file *filp, const char __user *ubuf, size_t cnt,
 	mutex_unlock(&trace_types_lock);
 	return ret;
 }
+FOPS_WRITE_ITER_HELPER(tracing_snapshot_write);
 
 static int tracing_snapshot_release(struct inode *inode, struct file *file)
 {
@@ -7351,8 +7335,7 @@ static int tracing_snapshot_release(struct inode *inode, struct file *file)
 }
 
 static int tracing_buffers_open(struct inode *inode, struct file *filp);
-static ssize_t tracing_buffers_read(struct file *filp, char __user *ubuf,
-				    size_t count, loff_t *ppos);
+static ssize_t tracing_buffers_read(struct kiocb *iocb, struct iov_iter *to);
 static int tracing_buffers_release(struct inode *inode, struct file *file);
 static ssize_t tracing_buffers_splice_read(struct file *file, loff_t *ppos,
 		   struct pipe_inode_info *pipe, size_t len, unsigned int flags);
@@ -7385,16 +7368,16 @@ static int snapshot_raw_open(struct inode *inode, struct file *filp)
 
 static const struct file_operations tracing_thresh_fops = {
 	.open		= tracing_open_generic,
-	.read		= tracing_thresh_read,
-	.write		= tracing_thresh_write,
+	.read_iter	= tracing_thresh_read,
+	.write_iter	= tracing_thresh_write,
 	.llseek		= generic_file_llseek,
 };
 
 #ifdef CONFIG_TRACER_MAX_TRACE
 static const struct file_operations tracing_max_lat_fops = {
 	.open		= tracing_open_generic_tr,
-	.read		= tracing_max_lat_read,
-	.write		= tracing_max_lat_write,
+	.read_iter	= tracing_max_lat_read,
+	.write_iter	= tracing_max_lat_write,
 	.llseek		= generic_file_llseek,
 	.release	= tracing_release_generic_tr,
 };
@@ -7402,8 +7385,8 @@ static const struct file_operations tracing_max_lat_fops = {
 
 static const struct file_operations set_tracer_fops = {
 	.open		= tracing_open_generic_tr,
-	.read		= tracing_set_trace_read,
-	.write		= tracing_set_trace_write,
+	.read_iter	= tracing_set_trace_read,
+	.write_iter	= tracing_set_trace_write,
 	.llseek		= generic_file_llseek,
 	.release	= tracing_release_generic_tr,
 };
@@ -7411,7 +7394,7 @@ static const struct file_operations set_tracer_fops = {
 static const struct file_operations tracing_pipe_fops = {
 	.open		= tracing_open_pipe,
 	.poll		= tracing_poll_pipe,
-	.read		= tracing_read_pipe,
+	.read_iter	= tracing_read_pipe_iter,
 	.splice_read	= tracing_splice_read_pipe,
 	.release	= tracing_release_pipe,
 	.llseek		= no_llseek,
@@ -7419,48 +7402,48 @@ static const struct file_operations tracing_pipe_fops = {
 
 static const struct file_operations tracing_entries_fops = {
 	.open		= tracing_open_generic_tr,
-	.read		= tracing_entries_read,
-	.write		= tracing_entries_write,
+	.read_iter	= tracing_entries_read,
+	.write_iter	= tracing_entries_write,
 	.llseek		= generic_file_llseek,
 	.release	= tracing_release_generic_tr,
 };
 
 static const struct file_operations tracing_total_entries_fops = {
 	.open		= tracing_open_generic_tr,
-	.read		= tracing_total_entries_read,
+	.read_iter	= tracing_total_entries_read,
 	.llseek		= generic_file_llseek,
 	.release	= tracing_release_generic_tr,
 };
 
 static const struct file_operations tracing_free_buffer_fops = {
 	.open		= tracing_open_generic_tr,
-	.write		= tracing_free_buffer_write,
+	.write_iter	= tracing_free_buffer_write,
 	.release	= tracing_free_buffer_release,
 };
 
 static const struct file_operations tracing_mark_fops = {
 	.open		= tracing_mark_open,
-	.write		= tracing_mark_write,
+	.write_iter	= tracing_mark_write_iter,
 	.release	= tracing_release_generic_tr,
 };
 
 static const struct file_operations tracing_mark_raw_fops = {
 	.open		= tracing_mark_open,
-	.write		= tracing_mark_raw_write,
+	.write_iter	= tracing_mark_raw_write_iter,
 	.release	= tracing_release_generic_tr,
 };
 
 static const struct file_operations trace_clock_fops = {
 	.open		= tracing_clock_open,
-	.read		= seq_read,
+	.read_iter	= seq_read_iter,
 	.llseek		= seq_lseek,
 	.release	= tracing_single_release_tr,
-	.write		= tracing_clock_write,
+	.write_iter	= tracing_clock_write,
 };
 
 static const struct file_operations trace_time_stamp_mode_fops = {
 	.open		= tracing_time_stamp_mode_open,
-	.read		= seq_read,
+	.read_iter	= seq_read_iter,
 	.llseek		= seq_lseek,
 	.release	= tracing_single_release_tr,
 };
@@ -7468,15 +7451,15 @@ static const struct file_operations trace_time_stamp_mode_fops = {
 #ifdef CONFIG_TRACER_SNAPSHOT
 static const struct file_operations snapshot_fops = {
 	.open		= tracing_snapshot_open,
-	.read		= seq_read,
-	.write		= tracing_snapshot_write,
+	.read_iter	= seq_read_iter,
+	.write_iter	= tracing_snapshot_write_iter,
 	.llseek		= tracing_lseek,
 	.release	= tracing_snapshot_release,
 };
 
 static const struct file_operations snapshot_raw_fops = {
 	.open		= snapshot_raw_open,
-	.read		= tracing_buffers_read,
+	.read_iter	= tracing_buffers_read,
 	.release	= tracing_buffers_release,
 	.splice_read	= tracing_buffers_splice_read,
 	.llseek		= no_llseek,
@@ -7496,17 +7479,17 @@ static const struct file_operations snapshot_raw_fops = {
  * defines where to write the value, the min and the max acceptable values,
  * and a lock to protect the write.
  */
-static ssize_t
-trace_min_max_write(struct file *filp, const char __user *ubuf, size_t cnt, loff_t *ppos)
+static ssize_t trace_min_max_write(struct kiocb *iocb, struct iov_iter *from)
 {
-	struct trace_min_max_param *param = filp->private_data;
+	struct trace_min_max_param *param = iocb->ki_filp->private_data;
+	size_t cnt = iov_iter_count(from);
 	u64 val;
 	int err;
 
 	if (!param)
 		return -EFAULT;
 
-	err = kstrtoull_from_user(ubuf, cnt, 10, &val);
+	err = kstrtoull_from_iter(from, cnt, 10, &val);
 	if (err)
 		return err;
 
@@ -7542,10 +7525,10 @@ trace_min_max_write(struct file *filp, const char __user *ubuf, size_t cnt, loff
  * The filp->private_data must point to a trace_min_max_param struct with valid
  * data.
  */
-static ssize_t
-trace_min_max_read(struct file *filp, char __user *ubuf, size_t cnt, loff_t *ppos)
+static ssize_t trace_min_max_read(struct kiocb *iocb, struct iov_iter *to)
 {
-	struct trace_min_max_param *param = filp->private_data;
+	struct trace_min_max_param *param = iocb->ki_filp->private_data;
+	size_t cnt = iov_iter_count(to);
 	char buf[U64_STR_SIZE];
 	int len;
 	u64 val;
@@ -7560,13 +7543,13 @@ trace_min_max_read(struct file *filp, char __user *ubuf, size_t cnt, loff_t *ppo
 
 	len = snprintf(buf, sizeof(buf), "%llu\n", val);
 
-	return simple_read_from_buffer(ubuf, cnt, ppos, buf, len);
+	return simple_copy_to_iter(buf, &iocb->ki_pos, len, to);
 }
 
 const struct file_operations trace_min_max_fops = {
 	.open		= tracing_open_generic,
-	.read		= trace_min_max_read,
-	.write		= trace_min_max_write,
+	.read_iter	= trace_min_max_read,
+	.write_iter	= trace_min_max_write,
 };
 
 #define TRACING_LOG_ERRS_MAX	8
@@ -7818,11 +7801,9 @@ static int tracing_err_log_open(struct inode *inode, struct file *file)
 	return ret;
 }
 
-static ssize_t tracing_err_log_write(struct file *file,
-				     const char __user *buffer,
-				     size_t count, loff_t *ppos)
+static ssize_t tracing_err_log_write(struct kiocb *iocb, struct iov_iter *from)
 {
-	return count;
+	return iov_iter_count(from);
 }
 
 static int tracing_err_log_release(struct inode *inode, struct file *file)
@@ -7839,8 +7820,8 @@ static int tracing_err_log_release(struct inode *inode, struct file *file)
 
 static const struct file_operations tracing_err_log_fops = {
 	.open           = tracing_err_log_open,
-	.write		= tracing_err_log_write,
-	.read           = seq_read,
+	.write_iter	= tracing_err_log_write,
+	.read_iter      = seq_read_iter,
 	.llseek         = tracing_lseek,
 	.release        = tracing_err_log_release,
 };
@@ -7893,12 +7874,11 @@ tracing_buffers_poll(struct file *filp, poll_table *poll_table)
 	return trace_poll(iter, filp, poll_table);
 }
 
-static ssize_t
-tracing_buffers_read(struct file *filp, char __user *ubuf,
-		     size_t count, loff_t *ppos)
+static ssize_t tracing_buffers_read(struct kiocb *iocb, struct iov_iter *to)
 {
-	struct ftrace_buffer_info *info = filp->private_data;
+	struct ftrace_buffer_info *info = iocb->ki_filp->private_data;
 	struct trace_iterator *iter = &info->iter;
+	size_t count = iov_iter_count(to);
 	void *trace_data;
 	int page_size;
 	ssize_t ret = 0;
@@ -7951,7 +7931,7 @@ tracing_buffers_read(struct file *filp, char __user *ubuf,
 
 	if (ret < 0) {
 		if (trace_empty(iter)) {
-			if ((filp->f_flags & O_NONBLOCK))
+			if (iocb->ki_filp->f_flags & O_NONBLOCK)
 				return -EAGAIN;
 
 			ret = wait_on_pipe(iter, 0);
@@ -7969,13 +7949,13 @@ tracing_buffers_read(struct file *filp, char __user *ubuf,
 	if (size > count)
 		size = count;
 	trace_data = ring_buffer_read_page_data(info->spare);
-	ret = copy_to_user(ubuf, trace_data + info->read, size);
+	ret = copy_to_iter(trace_data + info->read, size, to);
 	if (ret == size)
 		return -EFAULT;
 
 	size -= ret;
 
-	*ppos += size;
+	iocb->ki_pos += size;
 	info->read += size;
 
 	return size;
@@ -8216,7 +8196,7 @@ static long tracing_buffers_ioctl(struct file *file, unsigned int cmd, unsigned
 
 static const struct file_operations tracing_buffers_fops = {
 	.open		= tracing_buffers_open,
-	.read		= tracing_buffers_read,
+	.read_iter	= tracing_buffers_read,
 	.poll		= tracing_buffers_poll,
 	.release	= tracing_buffers_release,
 	.flush		= tracing_buffers_flush,
@@ -8225,11 +8205,9 @@ static const struct file_operations tracing_buffers_fops = {
 	.llseek		= no_llseek,
 };
 
-static ssize_t
-tracing_stats_read(struct file *filp, char __user *ubuf,
-		   size_t count, loff_t *ppos)
+static ssize_t tracing_stats_read(struct kiocb *iocb, struct iov_iter *to)
 {
-	struct inode *inode = file_inode(filp);
+	struct inode *inode = file_inode(iocb->ki_filp);
 	struct trace_array *tr = inode->i_private;
 	struct array_buffer *trace_buf = &tr->array_buffer;
 	int cpu = tracing_get_cpu(inode);
@@ -8237,6 +8215,7 @@ tracing_stats_read(struct file *filp, char __user *ubuf,
 	unsigned long cnt;
 	unsigned long long t;
 	unsigned long usec_rem;
+	ssize_t count;
 
 	s = kmalloc(sizeof(*s), GFP_KERNEL);
 	if (!s)
@@ -8281,17 +8260,15 @@ tracing_stats_read(struct file *filp, char __user *ubuf,
 	cnt = ring_buffer_read_events_cpu(trace_buf->buffer, cpu);
 	trace_seq_printf(s, "read events: %ld\n", cnt);
 
-	count = simple_read_from_buffer(ubuf, count, ppos,
-					s->buffer, trace_seq_used(s));
-
+	count = simple_copy_to_iter(s->buffer, &iocb->ki_pos, trace_seq_used(s),
+					to);
 	kfree(s);
-
 	return count;
 }
 
 static const struct file_operations tracing_stats_fops = {
 	.open		= tracing_open_generic_tr,
-	.read		= tracing_stats_read,
+	.read_iter	= tracing_stats_read,
 	.llseek		= generic_file_llseek,
 	.release	= tracing_release_generic_tr,
 };
@@ -8299,8 +8276,7 @@ static const struct file_operations tracing_stats_fops = {
 #ifdef CONFIG_DYNAMIC_FTRACE
 
 static ssize_t
-tracing_read_dyn_info(struct file *filp, char __user *ubuf,
-		  size_t cnt, loff_t *ppos)
+tracing_read_dyn_info(struct kiocb *iocb, struct iov_iter *to)
 {
 	ssize_t ret;
 	char *buf;
@@ -8316,14 +8292,14 @@ tracing_read_dyn_info(struct file *filp, char __user *ubuf,
 		      ftrace_number_of_pages,
 		      ftrace_number_of_groups);
 
-	ret = simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
+	ret = simple_copy_to_iter(buf, &iocb->ki_pos, r, to);
 	kfree(buf);
 	return ret;
 }
 
 static const struct file_operations tracing_dyn_info_fops = {
 	.open		= tracing_open_generic,
-	.read		= tracing_read_dyn_info,
+	.read_iter	= tracing_read_dyn_info,
 	.llseek		= generic_file_llseek,
 };
 #endif /* CONFIG_DYNAMIC_FTRACE */
@@ -8583,11 +8559,9 @@ tracing_init_tracefs_percpu(struct trace_array *tr, long cpu)
 #include "trace_selftest.c"
 #endif
 
-static ssize_t
-trace_options_read(struct file *filp, char __user *ubuf, size_t cnt,
-			loff_t *ppos)
+static ssize_t trace_options_read(struct kiocb *iocb, struct iov_iter *to)
 {
-	struct trace_option_dentry *topt = filp->private_data;
+	struct trace_option_dentry *topt = iocb->ki_filp->private_data;
 	char *buf;
 
 	if (topt->flags->val & topt->opt->bit)
@@ -8595,18 +8569,17 @@ trace_options_read(struct file *filp, char __user *ubuf, size_t cnt,
 	else
 		buf = "0\n";
 
-	return simple_read_from_buffer(ubuf, cnt, ppos, buf, 2);
+	return simple_copy_to_iter(buf, &iocb->ki_pos, 2, to);
 }
 
-static ssize_t
-trace_options_write(struct file *filp, const char __user *ubuf, size_t cnt,
-			 loff_t *ppos)
+static ssize_t trace_options_write(struct kiocb *iocb, struct iov_iter *from)
 {
-	struct trace_option_dentry *topt = filp->private_data;
+	struct trace_option_dentry *topt = iocb->ki_filp->private_data;
+	size_t cnt = iov_iter_count(from);
 	unsigned long val;
 	int ret;
 
-	ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
+	ret = kstrtoul_from_iter(from, cnt, 10, &val);
 	if (ret)
 		return ret;
 
@@ -8622,7 +8595,7 @@ trace_options_write(struct file *filp, const char __user *ubuf, size_t cnt,
 			return ret;
 	}
 
-	*ppos += cnt;
+	iocb->ki_pos += cnt;
 
 	return cnt;
 }
@@ -8650,8 +8623,8 @@ static int tracing_release_options(struct inode *inode, struct file *file)
 
 static const struct file_operations trace_options_fops = {
 	.open = tracing_open_options,
-	.read = trace_options_read,
-	.write = trace_options_write,
+	.read_iter = trace_options_read,
+	.write_iter = trace_options_write,
 	.llseek	= generic_file_llseek,
 	.release = tracing_release_options,
 };
@@ -8689,11 +8662,9 @@ static void get_tr_index(void *data, struct trace_array **ptr,
 			    trace_flags_index);
 }
 
-static ssize_t
-trace_options_core_read(struct file *filp, char __user *ubuf, size_t cnt,
-			loff_t *ppos)
+static ssize_t trace_options_core_read(struct kiocb *iocb, struct iov_iter *to)
 {
-	void *tr_index = filp->private_data;
+	void *tr_index = iocb->ki_filp->private_data;
 	struct trace_array *tr;
 	unsigned int index;
 	char *buf;
@@ -8705,14 +8676,14 @@ trace_options_core_read(struct file *filp, char __user *ubuf, size_t cnt,
 	else
 		buf = "0\n";
 
-	return simple_read_from_buffer(ubuf, cnt, ppos, buf, 2);
+	return simple_copy_to_iter(buf, &iocb->ki_pos, 2, to);
 }
 
 static ssize_t
-trace_options_core_write(struct file *filp, const char __user *ubuf, size_t cnt,
-			 loff_t *ppos)
+trace_options_core_write(struct kiocb *iocb, struct iov_iter *from)
 {
-	void *tr_index = filp->private_data;
+	void *tr_index = iocb->ki_filp->private_data;
+	size_t cnt = iov_iter_count(from);
 	struct trace_array *tr;
 	unsigned int index;
 	unsigned long val;
@@ -8720,7 +8691,7 @@ trace_options_core_write(struct file *filp, const char __user *ubuf, size_t cnt,
 
 	get_tr_index(tr_index, &tr, &index);
 
-	ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
+	ret = kstrtoul_from_iter(from, cnt, 10, &val);
 	if (ret)
 		return ret;
 
@@ -8736,15 +8707,15 @@ trace_options_core_write(struct file *filp, const char __user *ubuf, size_t cnt,
 	if (ret < 0)
 		return ret;
 
-	*ppos += cnt;
+	iocb->ki_pos += cnt;
 
 	return cnt;
 }
 
 static const struct file_operations trace_options_core_fops = {
 	.open = tracing_open_generic,
-	.read = trace_options_core_read,
-	.write = trace_options_core_write,
+	.read_iter = trace_options_core_read,
+	.write_iter = trace_options_core_write,
 	.llseek = generic_file_llseek,
 };
 
@@ -8898,30 +8869,27 @@ static void create_trace_options_dir(struct trace_array *tr)
 	}
 }
 
-static ssize_t
-rb_simple_read(struct file *filp, char __user *ubuf,
-	       size_t cnt, loff_t *ppos)
+static ssize_t rb_simple_read(struct kiocb *iocb, struct iov_iter *to)
 {
-	struct trace_array *tr = filp->private_data;
+	struct trace_array *tr = iocb->ki_filp->private_data;
 	char buf[64];
 	int r;
 
 	r = tracer_tracing_is_on(tr);
 	r = sprintf(buf, "%d\n", r);
 
-	return simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
+	return simple_copy_to_iter(buf, &iocb->ki_pos, r, to);
 }
 
-static ssize_t
-rb_simple_write(struct file *filp, const char __user *ubuf,
-		size_t cnt, loff_t *ppos)
+static ssize_t rb_simple_write(struct kiocb *iocb, struct iov_iter *from)
 {
-	struct trace_array *tr = filp->private_data;
+	struct trace_array *tr = iocb->ki_filp->private_data;
 	struct trace_buffer *buffer = tr->array_buffer.buffer;
+	size_t cnt = iov_iter_count(from);
 	unsigned long val;
 	int ret;
 
-	ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
+	ret = kstrtoul_from_iter(from, cnt, 10, &val);
 	if (ret)
 		return ret;
 
@@ -8943,42 +8911,39 @@ rb_simple_write(struct file *filp, const char __user *ubuf,
 		mutex_unlock(&trace_types_lock);
 	}
 
-	(*ppos)++;
+	iocb->ki_pos++;
 
 	return cnt;
 }
 
 static const struct file_operations rb_simple_fops = {
 	.open		= tracing_open_generic_tr,
-	.read		= rb_simple_read,
-	.write		= rb_simple_write,
+	.read_iter	= rb_simple_read,
+	.write_iter	= rb_simple_write,
 	.release	= tracing_release_generic_tr,
 	.llseek		= default_llseek,
 };
 
-static ssize_t
-buffer_percent_read(struct file *filp, char __user *ubuf,
-		    size_t cnt, loff_t *ppos)
+static ssize_t buffer_percent_read(struct kiocb *iocb, struct iov_iter *to)
 {
-	struct trace_array *tr = filp->private_data;
+	struct trace_array *tr = iocb->ki_filp->private_data;
 	char buf[64];
 	int r;
 
 	r = tr->buffer_percent;
 	r = sprintf(buf, "%d\n", r);
 
-	return simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
+	return simple_copy_to_iter(buf, &iocb->ki_pos, r, to);
 }
 
-static ssize_t
-buffer_percent_write(struct file *filp, const char __user *ubuf,
-		     size_t cnt, loff_t *ppos)
+static ssize_t buffer_percent_write(struct kiocb *iocb, struct iov_iter *from)
 {
-	struct trace_array *tr = filp->private_data;
+	struct trace_array *tr = iocb->ki_filp->private_data;
+	size_t cnt = iov_iter_count(from);
 	unsigned long val;
 	int ret;
 
-	ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
+	ret = kstrtoul_from_iter(from, cnt, 10, &val);
 	if (ret)
 		return ret;
 
@@ -8987,23 +8952,22 @@ buffer_percent_write(struct file *filp, const char __user *ubuf,
 
 	tr->buffer_percent = val;
 
-	(*ppos)++;
+	iocb->ki_pos++;
 
 	return cnt;
 }
 
 static const struct file_operations buffer_percent_fops = {
 	.open		= tracing_open_generic_tr,
-	.read		= buffer_percent_read,
-	.write		= buffer_percent_write,
+	.read_iter	= buffer_percent_read,
+	.write_iter	= buffer_percent_write,
 	.release	= tracing_release_generic_tr,
 	.llseek		= default_llseek,
 };
 
-static ssize_t
-buffer_subbuf_size_read(struct file *filp, char __user *ubuf, size_t cnt, loff_t *ppos)
+static ssize_t buffer_subbuf_size_read(struct kiocb *iocb, struct iov_iter *to)
 {
-	struct trace_array *tr = filp->private_data;
+	struct trace_array *tr = iocb->ki_filp->private_data;
 	size_t size;
 	char buf[64];
 	int order;
@@ -9014,21 +8978,21 @@ buffer_subbuf_size_read(struct file *filp, char __user *ubuf, size_t cnt, loff_t
 
 	r = sprintf(buf, "%zd\n", size);
 
-	return simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
+	return simple_copy_to_iter(buf, &iocb->ki_pos, r, to);
 }
 
 static ssize_t
-buffer_subbuf_size_write(struct file *filp, const char __user *ubuf,
-			 size_t cnt, loff_t *ppos)
+buffer_subbuf_size_write(struct kiocb *iocb, struct iov_iter *from)
 {
-	struct trace_array *tr = filp->private_data;
+	struct trace_array *tr = iocb->ki_filp->private_data;
+	size_t cnt = iov_iter_count(from);
 	unsigned long val;
 	int old_order;
 	int order;
 	int pages;
 	int ret;
 
-	ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
+	ret = kstrtoul_from_iter(from, cnt, 10, &val);
 	if (ret)
 		return ret;
 
@@ -9081,7 +9045,7 @@ buffer_subbuf_size_write(struct file *filp, const char __user *ubuf,
 	}
  out_max:
 #endif
-	(*ppos)++;
+	iocb->ki_pos++;
  out:
 	if (ret)
 		cnt = ret;
@@ -9091,8 +9055,8 @@ buffer_subbuf_size_write(struct file *filp, const char __user *ubuf,
 
 static const struct file_operations buffer_subbuf_size_fops = {
 	.open		= tracing_open_generic_tr,
-	.read		= buffer_subbuf_size_read,
-	.write		= buffer_subbuf_size_write,
+	.read_iter	= buffer_subbuf_size_read,
+	.write_iter	= buffer_subbuf_size_write,
 	.release	= tracing_release_generic_tr,
 	.llseek		= default_llseek,
 };
diff --git a/kernel/trace/trace_dynevent.c b/kernel/trace/trace_dynevent.c
index 4376887e0d8a..cea3f5947025 100644
--- a/kernel/trace/trace_dynevent.c
+++ b/kernel/trace/trace_dynevent.c
@@ -244,14 +244,15 @@ static ssize_t dyn_event_write(struct file *file, const char __user *buffer,
 	return trace_parse_run_command(file, buffer, count, ppos,
 				       create_dyn_event);
 }
+FOPS_WRITE_ITER_HELPER(dyn_event_write);
 
 static const struct file_operations dynamic_events_ops = {
 	.owner          = THIS_MODULE,
 	.open           = dyn_event_open,
-	.read           = seq_read,
+	.read_iter      = seq_read_iter,
 	.llseek         = seq_lseek,
 	.release        = seq_release,
-	.write		= dyn_event_write,
+	.write_iter	= dyn_event_write_iter,
 };
 
 /* Make a tracefs interface for controlling dynamic events */
diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c
index 7c364b87352e..bc1bfc3f387c 100644
--- a/kernel/trace/trace_events.c
+++ b/kernel/trace/trace_events.c
@@ -1215,6 +1215,7 @@ ftrace_event_write(struct file *file, const char __user *ubuf,
 
 	return ret;
 }
+FOPS_WRITE_ITER_HELPER(ftrace_event_write);
 
 static void *
 t_next(struct seq_file *m, void *v, loff_t *pos)
@@ -1377,16 +1378,14 @@ static void p_stop(struct seq_file *m, void *p)
 	mutex_unlock(&event_mutex);
 }
 
-static ssize_t
-event_enable_read(struct file *filp, char __user *ubuf, size_t cnt,
-		  loff_t *ppos)
+static ssize_t event_enable_read(struct kiocb *iocb, struct iov_iter *to)
 {
 	struct trace_event_file *file;
 	unsigned long flags;
 	char buf[4] = "0";
 
 	mutex_lock(&event_mutex);
-	file = event_file_data(filp);
+	file = event_file_data(iocb->ki_filp);
 	if (likely(file))
 		flags = file->flags;
 	mutex_unlock(&event_mutex);
@@ -1404,7 +1403,7 @@ event_enable_read(struct file *filp, char __user *ubuf, size_t cnt,
 
 	strcat(buf, "\n");
 
-	return simple_read_from_buffer(ubuf, cnt, ppos, buf, strlen(buf));
+	return simple_copy_to_iter(buf, &iocb->ki_pos, strlen(buf), to);
 }
 
 static ssize_t
@@ -1444,20 +1443,18 @@ event_enable_write(struct file *filp, const char __user *ubuf, size_t cnt,
 
 	return ret ? ret : cnt;
 }
+FOPS_WRITE_ITER_HELPER(event_enable_write);
 
-static ssize_t
-system_enable_read(struct file *filp, char __user *ubuf, size_t cnt,
-		   loff_t *ppos)
+static ssize_t system_enable_read(struct kiocb *iocb, struct iov_iter *to)
 {
 	const char set_to_char[4] = { '?', '0', '1', 'X' };
-	struct trace_subsystem_dir *dir = filp->private_data;
+	struct trace_subsystem_dir *dir = iocb->ki_filp->private_data;
 	struct event_subsystem *system = dir->subsystem;
 	struct trace_event_call *call;
 	struct trace_event_file *file;
 	struct trace_array *tr = dir->tr;
 	char buf[2];
 	int set = 0;
-	int ret;
 
 	mutex_lock(&event_mutex);
 	list_for_each_entry(file, &tr->events, list) {
@@ -1487,9 +1484,7 @@ system_enable_read(struct file *filp, char __user *ubuf, size_t cnt,
 	buf[0] = set_to_char[set];
 	buf[1] = '\n';
 
-	ret = simple_read_from_buffer(ubuf, cnt, ppos, buf, 2);
-
-	return ret;
+	return simple_copy_to_iter(buf, &iocb->ki_pos, 2, to);
 }
 
 static ssize_t
@@ -1531,6 +1526,7 @@ system_enable_write(struct file *filp, const char __user *ubuf, size_t cnt,
 
 	return ret;
 }
+FOPS_WRITE_ITER_HELPER(system_enable_write);
 
 enum {
 	FORMAT_HEADER		= 1,
@@ -1670,10 +1666,9 @@ static int trace_format_open(struct inode *inode, struct file *file)
 	return 0;
 }
 
-static ssize_t
-event_id_read(struct file *filp, char __user *ubuf, size_t cnt, loff_t *ppos)
+static ssize_t event_id_read(struct kiocb *iocb, struct iov_iter *to)
 {
-	int id = (long)event_file_data(filp);
+	int id = (long)event_file_data(iocb->ki_filp);
 	char buf[32];
 	int len;
 
@@ -1682,18 +1677,16 @@ event_id_read(struct file *filp, char __user *ubuf, size_t cnt, loff_t *ppos)
 
 	len = sprintf(buf, "%d\n", id);
 
-	return simple_read_from_buffer(ubuf, cnt, ppos, buf, len);
+	return simple_copy_to_iter(buf, &iocb->ki_pos, len, to);
 }
 
-static ssize_t
-event_filter_read(struct file *filp, char __user *ubuf, size_t cnt,
-		  loff_t *ppos)
+static ssize_t event_filter_read(struct kiocb *iocb, struct iov_iter *to)
 {
 	struct trace_event_file *file;
 	struct trace_seq *s;
 	int r = -ENODEV;
 
-	if (*ppos)
+	if (iocb->ki_pos)
 		return 0;
 
 	s = kmalloc(sizeof(*s), GFP_KERNEL);
@@ -1704,14 +1697,14 @@ event_filter_read(struct file *filp, char __user *ubuf, size_t cnt,
 	trace_seq_init(s);
 
 	mutex_lock(&event_mutex);
-	file = event_file_data(filp);
+	file = event_file_data(iocb->ki_filp);
 	if (file && !(file->flags & EVENT_FILE_FL_FREED))
 		print_event_filter(file, s);
 	mutex_unlock(&event_mutex);
 
 	if (file)
-		r = simple_read_from_buffer(ubuf, cnt, ppos,
-					    s->buffer, trace_seq_used(s));
+		r = simple_copy_to_iter(s->buffer, &iocb->ki_pos,
+					trace_seq_used(s), to);
 
 	kfree(s);
 
@@ -1747,6 +1740,7 @@ event_filter_write(struct file *filp, const char __user *ubuf, size_t cnt,
 
 	return cnt;
 }
+FOPS_WRITE_ITER_HELPER(event_filter_write);
 
 static LIST_HEAD(event_subsystems);
 
@@ -1840,16 +1834,14 @@ static int subsystem_release(struct inode *inode, struct file *file)
 	return 0;
 }
 
-static ssize_t
-subsystem_filter_read(struct file *filp, char __user *ubuf, size_t cnt,
-		      loff_t *ppos)
+static ssize_t subsystem_filter_read(struct kiocb *iocb, struct iov_iter *to)
 {
-	struct trace_subsystem_dir *dir = filp->private_data;
+	struct trace_subsystem_dir *dir = iocb->ki_filp->private_data;
 	struct event_subsystem *system = dir->subsystem;
 	struct trace_seq *s;
 	int r;
 
-	if (*ppos)
+	if (iocb->ki_pos)
 		return 0;
 
 	s = kmalloc(sizeof(*s), GFP_KERNEL);
@@ -1859,8 +1851,7 @@ subsystem_filter_read(struct file *filp, char __user *ubuf, size_t cnt,
 	trace_seq_init(s);
 
 	print_subsystem_event_filter(system, s);
-	r = simple_read_from_buffer(ubuf, cnt, ppos,
-				    s->buffer, trace_seq_used(s));
+	r = simple_copy_to_iter(s->buffer, &iocb->ki_pos, trace_seq_used(s), to);
 
 	kfree(s);
 
@@ -1891,15 +1882,15 @@ subsystem_filter_write(struct file *filp, const char __user *ubuf, size_t cnt,
 
 	return cnt;
 }
+FOPS_WRITE_ITER_HELPER(subsystem_filter_write);
 
-static ssize_t
-show_header_page_file(struct file *filp, char __user *ubuf, size_t cnt, loff_t *ppos)
+static ssize_t show_header_page_file(struct kiocb *iocb, struct iov_iter *to)
 {
-	struct trace_array *tr = filp->private_data;
+	struct trace_array *tr = iocb->ki_filp->private_data;
 	struct trace_seq *s;
 	int r;
 
-	if (*ppos)
+	if (iocb->ki_pos)
 		return 0;
 
 	s = kmalloc(sizeof(*s), GFP_KERNEL);
@@ -1909,21 +1900,19 @@ show_header_page_file(struct file *filp, char __user *ubuf, size_t cnt, loff_t *
 	trace_seq_init(s);
 
 	ring_buffer_print_page_header(tr->array_buffer.buffer, s);
-	r = simple_read_from_buffer(ubuf, cnt, ppos,
-				    s->buffer, trace_seq_used(s));
+	r = simple_copy_to_iter(s->buffer, &iocb->ki_pos, trace_seq_used(s), to);
 
 	kfree(s);
 
 	return r;
 }
 
-static ssize_t
-show_header_event_file(struct file *filp, char __user *ubuf, size_t cnt, loff_t *ppos)
+static ssize_t show_header_event_file(struct kiocb *iocb, struct iov_iter *to)
 {
 	struct trace_seq *s;
 	int r;
 
-	if (*ppos)
+	if (iocb->ki_pos)
 		return 0;
 
 	s = kmalloc(sizeof(*s), GFP_KERNEL);
@@ -1933,8 +1922,7 @@ show_header_event_file(struct file *filp, char __user *ubuf, size_t cnt, loff_t
 	trace_seq_init(s);
 
 	ring_buffer_print_entry_header(s);
-	r = simple_read_from_buffer(ubuf, cnt, ppos,
-				    s->buffer, trace_seq_used(s));
+	r = simple_copy_to_iter(s->buffer, &iocb->ki_pos, trace_seq_used(s), to);
 
 	kfree(s);
 
@@ -2064,6 +2052,7 @@ ftrace_event_pid_write(struct file *filp, const char __user *ubuf,
 {
 	return event_pid_write(filp, ubuf, cnt, ppos, TRACE_PIDS);
 }
+FOPS_WRITE_ITER_HELPER(ftrace_event_pid_write);
 
 static ssize_t
 ftrace_event_npid_write(struct file *filp, const char __user *ubuf,
@@ -2071,6 +2060,7 @@ ftrace_event_npid_write(struct file *filp, const char __user *ubuf,
 {
 	return event_pid_write(filp, ubuf, cnt, ppos, TRACE_NO_PIDS);
 }
+FOPS_WRITE_ITER_HELPER(ftrace_event_npid_write);
 
 static int ftrace_event_avail_open(struct inode *inode, struct file *file);
 static int ftrace_event_set_open(struct inode *inode, struct file *file);
@@ -2108,97 +2098,97 @@ static const struct seq_operations show_set_no_pid_seq_ops = {
 
 static const struct file_operations ftrace_avail_fops = {
 	.open = ftrace_event_avail_open,
-	.read = seq_read,
+	.read_iter = seq_read_iter,
 	.llseek = seq_lseek,
 	.release = seq_release,
 };
 
 static const struct file_operations ftrace_set_event_fops = {
 	.open = ftrace_event_set_open,
-	.read = seq_read,
-	.write = ftrace_event_write,
+	.read_iter = seq_read_iter,
+	.write_iter = ftrace_event_write_iter,
 	.llseek = seq_lseek,
 	.release = ftrace_event_release,
 };
 
 static const struct file_operations ftrace_set_event_pid_fops = {
 	.open = ftrace_event_set_pid_open,
-	.read = seq_read,
-	.write = ftrace_event_pid_write,
+	.read_iter = seq_read_iter,
+	.write_iter = ftrace_event_pid_write_iter,
 	.llseek = seq_lseek,
 	.release = ftrace_event_release,
 };
 
 static const struct file_operations ftrace_set_event_notrace_pid_fops = {
 	.open = ftrace_event_set_npid_open,
-	.read = seq_read,
-	.write = ftrace_event_npid_write,
+	.read_iter = seq_read_iter,
+	.write_iter = ftrace_event_npid_write_iter,
 	.llseek = seq_lseek,
 	.release = ftrace_event_release,
 };
 
 static const struct file_operations ftrace_enable_fops = {
 	.open = tracing_open_file_tr,
-	.read = event_enable_read,
-	.write = event_enable_write,
+	.read_iter = event_enable_read,
+	.write_iter = event_enable_write_iter,
 	.release = tracing_release_file_tr,
 	.llseek = default_llseek,
 };
 
 static const struct file_operations ftrace_event_format_fops = {
 	.open = trace_format_open,
-	.read = seq_read,
+	.read_iter = seq_read_iter,
 	.llseek = seq_lseek,
 	.release = seq_release,
 };
 
 static const struct file_operations ftrace_event_id_fops = {
-	.read = event_id_read,
+	.read_iter = event_id_read,
 	.llseek = default_llseek,
 };
 
 static const struct file_operations ftrace_event_filter_fops = {
 	.open = tracing_open_file_tr,
-	.read = event_filter_read,
-	.write = event_filter_write,
+	.read_iter = event_filter_read,
+	.write_iter = event_filter_write_iter,
 	.release = tracing_release_file_tr,
 	.llseek = default_llseek,
 };
 
 static const struct file_operations ftrace_subsystem_filter_fops = {
 	.open = subsystem_open,
-	.read = subsystem_filter_read,
-	.write = subsystem_filter_write,
+	.read_iter = subsystem_filter_read,
+	.write_iter = subsystem_filter_write_iter,
 	.llseek = default_llseek,
 	.release = subsystem_release,
 };
 
 static const struct file_operations ftrace_system_enable_fops = {
 	.open = subsystem_open,
-	.read = system_enable_read,
-	.write = system_enable_write,
+	.read_iter = system_enable_read,
+	.write_iter = system_enable_write_iter,
 	.llseek = default_llseek,
 	.release = subsystem_release,
 };
 
 static const struct file_operations ftrace_tr_enable_fops = {
 	.open = system_tr_open,
-	.read = system_enable_read,
-	.write = system_enable_write,
+	.read_iter = system_enable_read,
+	.write_iter = system_enable_write_iter,
 	.llseek = default_llseek,
 	.release = subsystem_release,
 };
 
 static const struct file_operations ftrace_show_header_page_fops = {
 	.open = tracing_open_generic_tr,
-	.read = show_header_page_file,
+	.read_iter = show_header_page_file,
 	.llseek = default_llseek,
 	.release = tracing_release_generic_tr,
 };
 
 static const struct file_operations ftrace_show_header_event_fops = {
 	.open = tracing_open_generic_tr,
-	.read = show_header_event_file,
+	.read_iter = show_header_event_file,
 	.llseek = default_llseek,
 	.release = tracing_release_generic_tr,
 };
diff --git a/kernel/trace/trace_events_hist.c b/kernel/trace/trace_events_hist.c
index 6ece1308d36a..18e8914ffa67 100644
--- a/kernel/trace/trace_events_hist.c
+++ b/kernel/trace/trace_events_hist.c
@@ -5633,7 +5633,7 @@ static int event_hist_open(struct inode *inode, struct file *file)
 
 const struct file_operations event_hist_fops = {
 	.open = event_hist_open,
-	.read = seq_read,
+	.read_iter = seq_read_iter,
 	.llseek = seq_lseek,
 	.release = tracing_single_release_file_tr,
 };
@@ -5912,7 +5912,7 @@ static int event_hist_debug_open(struct inode *inode, struct file *file)
 
 const struct file_operations event_hist_debug_fops = {
 	.open = event_hist_debug_open,
-	.read = seq_read,
+	.read_iter = seq_read_iter,
 	.llseek = seq_lseek,
 	.release = tracing_single_release_file_tr,
 };
diff --git a/kernel/trace/trace_events_inject.c b/kernel/trace/trace_events_inject.c
index 8650562bdaa9..840c3e786968 100644
--- a/kernel/trace/trace_events_inject.c
+++ b/kernel/trace/trace_events_inject.c
@@ -280,10 +280,9 @@ static int parse_entry(char *str, struct trace_event_call *call, void **pentry)
 	return entry_size;
 }
 
-static ssize_t
-event_inject_write(struct file *filp, const char __user *ubuf, size_t cnt,
-		   loff_t *ppos)
+static ssize_t event_inject_write(struct kiocb *iocb, struct iov_iter *from)
 {
+	size_t cnt = iov_iter_count(from);
 	struct trace_event_call *call;
 	struct trace_event_file *file;
 	int err = -ENODEV, size;
@@ -293,13 +292,13 @@ event_inject_write(struct file *filp, const char __user *ubuf, size_t cnt,
 	if (cnt >= PAGE_SIZE)
 		return -EINVAL;
 
-	buf = memdup_user_nul(ubuf, cnt);
+	buf = iterdup_nul(from, cnt);
 	if (IS_ERR(buf))
 		return PTR_ERR(buf);
 	strim(buf);
 
 	mutex_lock(&event_mutex);
-	file = event_file_data(filp);
+	file = event_file_data(iocb->ki_filp);
 	if (file) {
 		call = file->event_call;
 		size = parse_entry(buf, call, &entry);
@@ -316,20 +315,18 @@ event_inject_write(struct file *filp, const char __user *ubuf, size_t cnt,
 	if (err < 0)
 		return err;
 
-	*ppos += err;
+	iocb->ki_pos += err;
 	return cnt;
 }
 
-static ssize_t
-event_inject_read(struct file *file, char __user *buf, size_t size,
-		  loff_t *ppos)
+static ssize_t event_inject_read(struct kiocb *iocb, struct iov_iter *to)
 {
 	return -EPERM;
 }
 
 const struct file_operations event_inject_fops = {
 	.open = tracing_open_file_tr,
-	.read = event_inject_read,
-	.write = event_inject_write,
+	.read_iter = event_inject_read,
+	.write_iter = event_inject_write,
 	.release = tracing_release_file_tr,
 };
diff --git a/kernel/trace/trace_events_synth.c b/kernel/trace/trace_events_synth.c
index c82b401a294d..5ff782e5870e 100644
--- a/kernel/trace/trace_events_synth.c
+++ b/kernel/trace/trace_events_synth.c
@@ -2286,11 +2286,12 @@ static ssize_t synth_events_write(struct file *file,
 	return trace_parse_run_command(file, buffer, count, ppos,
 				       create_or_delete_synth_event);
 }
+FOPS_WRITE_ITER_HELPER(synth_events_write);
 
 static const struct file_operations synth_events_fops = {
 	.open           = synth_events_open,
-	.write		= synth_events_write,
-	.read           = seq_read,
+	.write_iter	= synth_events_write_iter,
+	.read_iter      = seq_read_iter,
 	.llseek         = seq_lseek,
 	.release        = seq_release,
 };
diff --git a/kernel/trace/trace_events_trigger.c b/kernel/trace/trace_events_trigger.c
index 4bec043c8690..9f838fa4691e 100644
--- a/kernel/trace/trace_events_trigger.c
+++ b/kernel/trace/trace_events_trigger.c
@@ -272,11 +272,11 @@ int trigger_process_regex(struct trace_event_file *file, char *buff)
 	return ret;
 }
 
-static ssize_t event_trigger_regex_write(struct file *file,
-					 const char __user *ubuf,
-					 size_t cnt, loff_t *ppos)
+static ssize_t event_trigger_regex_write(struct kiocb *iocb,
+					 struct iov_iter *from)
 {
 	struct trace_event_file *event_file;
+	size_t cnt = iov_iter_count(from);
 	ssize_t ret;
 	char *buf;
 
@@ -286,14 +286,14 @@ static ssize_t event_trigger_regex_write(struct file *file,
 	if (cnt >= PAGE_SIZE)
 		return -EINVAL;
 
-	buf = memdup_user_nul(ubuf, cnt);
+	buf = iterdup_nul(from, cnt);
 	if (IS_ERR(buf))
 		return PTR_ERR(buf);
 
 	strim(buf);
 
 	mutex_lock(&event_mutex);
-	event_file = event_file_data(file);
+	event_file = event_file_data(iocb->ki_filp);
 	if (unlikely(!event_file)) {
 		mutex_unlock(&event_mutex);
 		kfree(buf);
@@ -306,7 +306,7 @@ static ssize_t event_trigger_regex_write(struct file *file,
 	if (ret < 0)
 		goto out;
 
-	*ppos += cnt;
+	iocb->ki_pos += cnt;
 	ret = cnt;
  out:
 	return ret;
@@ -324,11 +324,9 @@ static int event_trigger_regex_release(struct inode *inode, struct file *file)
 	return 0;
 }
 
-static ssize_t
-event_trigger_write(struct file *filp, const char __user *ubuf,
-		    size_t cnt, loff_t *ppos)
+static ssize_t event_trigger_write(struct kiocb *iocb, struct iov_iter *from)
 {
-	return event_trigger_regex_write(filp, ubuf, cnt, ppos);
+	return event_trigger_regex_write(iocb, from);
 }
 
 static int
@@ -346,8 +344,8 @@ event_trigger_release(struct inode *inode, struct file *file)
 
 const struct file_operations event_trigger_fops = {
 	.open = event_trigger_open,
-	.read = seq_read,
-	.write = event_trigger_write,
+	.read_iter = seq_read_iter,
+	.write_iter = event_trigger_write,
 	.llseek = tracing_lseek,
 	.release = event_trigger_release,
 };
diff --git a/kernel/trace/trace_events_user.c b/kernel/trace/trace_events_user.c
index 70d428c394b6..780329517bd5 100644
--- a/kernel/trace/trace_events_user.c
+++ b/kernel/trace/trace_events_user.c
@@ -2263,20 +2263,6 @@ static int user_events_open(struct inode *node, struct file *file)
 	return 0;
 }
 
-static ssize_t user_events_write(struct file *file, const char __user *ubuf,
-				 size_t count, loff_t *ppos)
-{
-	struct iov_iter i;
-
-	if (unlikely(*ppos != 0))
-		return -EFAULT;
-
-	if (unlikely(import_ubuf(ITER_SOURCE, (char __user *)ubuf, count, &i)))
-		return -EFAULT;
-
-	return user_events_write_core(file, &i);
-}
-
 static ssize_t user_events_write_iter(struct kiocb *kp, struct iov_iter *i)
 {
 	return user_events_write_core(kp->ki_filp, i);
@@ -2678,7 +2664,6 @@ static int user_events_release(struct inode *node, struct file *file)
 
 static const struct file_operations user_data_fops = {
 	.open		= user_events_open,
-	.write		= user_events_write,
 	.write_iter	= user_events_write_iter,
 	.unlocked_ioctl	= user_events_ioctl,
 	.release	= user_events_release,
@@ -2777,7 +2762,7 @@ static int user_status_open(struct inode *node, struct file *file)
 
 static const struct file_operations user_status_fops = {
 	.open		= user_status_open,
-	.read		= seq_read,
+	.read_iter	= seq_read_iter,
 	.llseek		= seq_lseek,
 	.release	= seq_release,
 };
diff --git a/kernel/trace/trace_functions_graph.c b/kernel/trace/trace_functions_graph.c
index c35fbaab2a47..1d761e2de910 100644
--- a/kernel/trace/trace_functions_graph.c
+++ b/kernel/trace/trace_functions_graph.c
@@ -1368,40 +1368,36 @@ static struct tracer graph_trace __tracer_data = {
 };
 
 
-static ssize_t
-graph_depth_write(struct file *filp, const char __user *ubuf, size_t cnt,
-		  loff_t *ppos)
+static ssize_t graph_depth_write(struct kiocb *iocb, struct iov_iter *from)
 {
+	size_t cnt = iov_iter_count(from);
 	unsigned long val;
 	int ret;
 
-	ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
+	ret = kstrtoul_from_iter(from, cnt, 10, &val);
 	if (ret)
 		return ret;
 
 	fgraph_max_depth = val;
 
-	*ppos += cnt;
+	iocb->ki_pos += cnt;
 
 	return cnt;
 }
 
-static ssize_t
-graph_depth_read(struct file *filp, char __user *ubuf, size_t cnt,
-		 loff_t *ppos)
+static ssize_t graph_depth_read(struct kiocb *iocb, struct iov_iter *to)
 {
 	char buf[15]; /* More than enough to hold UINT_MAX + "\n"*/
 	int n;
 
 	n = sprintf(buf, "%d\n", fgraph_max_depth);
-
-	return simple_read_from_buffer(ubuf, cnt, ppos, buf, n);
+	return simple_copy_to_iter(buf, &iocb->ki_pos, n, to);
 }
 
 static const struct file_operations graph_depth_fops = {
 	.open		= tracing_open_generic,
-	.write		= graph_depth_write,
-	.read		= graph_depth_read,
+	.write_iter	= graph_depth_write,
+	.read_iter	= graph_depth_read,
 	.llseek		= generic_file_llseek,
 };
 
diff --git a/kernel/trace/trace_hwlat.c b/kernel/trace/trace_hwlat.c
index b791524a6536..eea28d7205ed 100644
--- a/kernel/trace/trace_hwlat.c
+++ b/kernel/trace/trace_hwlat.c
@@ -664,10 +664,8 @@ static void hwlat_tracer_stop(struct trace_array *tr);
 
 /**
  * hwlat_mode_write - Write function for "mode" entry
- * @filp: The active open file structure
- * @ubuf: The user buffer that contains the value to write
- * @cnt: The maximum number of bytes to write to "file"
- * @ppos: The current position in @file
+ * @iocb: Metadata for IO
+ * @from: The user buffer that contains the value to write
  *
  * This function provides a write implementation for the "mode" interface
  * to the hardware latency detector. hwlatd has different operation modes.
@@ -677,10 +675,10 @@ static void hwlat_tracer_stop(struct trace_array *tr);
  * among the allowed CPUs in a round-robin fashion. The "per-cpu" mode
  * creates one hwlatd thread per allowed CPU.
  */
-static ssize_t hwlat_mode_write(struct file *filp, const char __user *ubuf,
-				 size_t cnt, loff_t *ppos)
+static ssize_t hwlat_mode_write(struct kiocb *iocb, struct iov_iter *from)
 {
 	struct trace_array *tr = hwlat_trace;
+	size_t cnt = iov_iter_count(from);
 	const char *mode;
 	char buf[64];
 	int ret, i;
@@ -688,7 +686,7 @@ static ssize_t hwlat_mode_write(struct file *filp, const char __user *ubuf,
 	if (cnt >= sizeof(buf))
 		return -EINVAL;
 
-	if (copy_from_user(buf, ubuf, cnt))
+	if (!copy_from_iter_full(buf, cnt, from))
 		return -EFAULT;
 
 	buf[cnt] = 0;
@@ -720,9 +718,7 @@ static ssize_t hwlat_mode_write(struct file *filp, const char __user *ubuf,
 		hwlat_tracer_start(tr);
 	mutex_unlock(&trace_types_lock);
 
-	*ppos += cnt;
-
-
+	iocb->ki_pos += cnt;
 
 	return ret;
 }
@@ -753,10 +749,10 @@ static struct trace_min_max_param hwlat_window = {
 
 static const struct file_operations thread_mode_fops = {
 	.open		= hwlat_mode_open,
-	.read		= seq_read,
+	.read_iter	= seq_read_iter,
 	.llseek		= seq_lseek,
 	.release	= seq_release,
-	.write		= hwlat_mode_write
+	.write_iter	= hwlat_mode_write
 };
 /**
  * init_tracefs - A function to initialize the tracefs interface files
diff --git a/kernel/trace/trace_kprobe.c b/kernel/trace/trace_kprobe.c
index 14099cc17fc9..65006adc0854 100644
--- a/kernel/trace/trace_kprobe.c
+++ b/kernel/trace/trace_kprobe.c
@@ -1247,14 +1247,15 @@ static ssize_t probes_write(struct file *file, const char __user *buffer,
 	return trace_parse_run_command(file, buffer, count, ppos,
 				       create_or_delete_trace_kprobe);
 }
+FOPS_WRITE_ITER_HELPER(probes_write);
 
 static const struct file_operations kprobe_events_ops = {
 	.owner          = THIS_MODULE,
 	.open           = probes_open,
-	.read           = seq_read,
+	.read_iter      = seq_read_iter,
 	.llseek         = seq_lseek,
 	.release        = seq_release,
-	.write		= probes_write,
+	.write_iter	= probes_write_iter,
 };
 
 static unsigned long trace_kprobe_missed(struct trace_kprobe *tk)
@@ -1304,7 +1305,7 @@ static int profile_open(struct inode *inode, struct file *file)
 static const struct file_operations kprobe_profile_ops = {
 	.owner          = THIS_MODULE,
 	.open           = profile_open,
-	.read           = seq_read,
+	.read_iter      = seq_read_iter,
 	.llseek         = seq_lseek,
 	.release        = seq_release,
 };
diff --git a/kernel/trace/trace_osnoise.c b/kernel/trace/trace_osnoise.c
index a8e28f9b9271..ac11c293656e 100644
--- a/kernel/trace/trace_osnoise.c
+++ b/kernel/trace/trace_osnoise.c
@@ -2198,26 +2198,24 @@ static int osnoise_options_open(struct inode *inode, struct file *file)
 
 /**
  * osnoise_options_write - Write function for "options" entry
- * @filp: The active open file structure
- * @ubuf: The user buffer that contains the value to write
- * @cnt: The maximum number of bytes to write to "file"
- * @ppos: The current position in @file
+ * @iocb: Metadata for IO
+ * @from: The user buffer that contains the value to write
  *
  * Writing the option name sets the option, writing the "NO_"
  * prefix in front of the option name disables it.
  *
  * Writing "DEFAULTS" resets the option values to the default ones.
  */
-static ssize_t osnoise_options_write(struct file *filp, const char __user *ubuf,
-				     size_t cnt, loff_t *ppos)
+static ssize_t osnoise_options_write(struct kiocb *iocb, struct iov_iter *from)
 {
 	int running, option, enable, retval;
+	size_t cnt = iov_iter_count(from);
 	char buf[256], *option_str;
 
 	if (cnt >= 256)
 		return -EINVAL;
 
-	if (copy_from_user(buf, ubuf, cnt))
+	if (!copy_from_iter_full(buf, cnt, from))
 		return -EFAULT;
 
 	buf[cnt] = 0;
@@ -2281,10 +2279,9 @@ static ssize_t osnoise_options_write(struct file *filp, const char __user *ubuf,
  *
  * Prints the "cpus" output into the user-provided buffer.
  */
-static ssize_t
-osnoise_cpus_read(struct file *filp, char __user *ubuf, size_t count,
-		  loff_t *ppos)
+static ssize_t osnoise_cpus_read(struct kiocb *iocb, struct iov_iter *to)
 {
+	ssize_t count = iov_iter_count(to);
 	char *mask_str;
 	int len;
 
@@ -2303,7 +2300,7 @@ osnoise_cpus_read(struct file *filp, char __user *ubuf, size_t count,
 		goto out_free;
 	}
 
-	count = simple_read_from_buffer(ubuf, count, ppos, mask_str, len);
+	count = simple_copy_to_iter(mask_str, &iocb->ki_pos, len, to);
 
 out_free:
 	kfree(mask_str);
@@ -2329,18 +2326,17 @@ osnoise_cpus_read(struct file *filp, char __user *ubuf, size_t count,
  * other CPUs. For instance, one might run osnoise in one HT CPU
  * while observing what is running on the sibling HT CPU.
  */
-static ssize_t
-osnoise_cpus_write(struct file *filp, const char __user *ubuf, size_t count,
-		   loff_t *ppos)
+static ssize_t osnoise_cpus_write(struct kiocb *iocb, struct iov_iter *from)
 {
 	cpumask_var_t osnoise_cpumask_new;
+	size_t count = iov_iter_count(from);
 	int running, err;
 	char buf[256];
 
 	if (count >= 256)
 		return -EINVAL;
 
-	if (copy_from_user(buf, ubuf, count))
+	if (!copy_from_iter_full(buf, count, from))
 		return -EFAULT;
 
 	if (!zalloc_cpumask_var(&osnoise_cpumask_new, GFP_KERNEL))
@@ -2460,11 +2456,9 @@ static int timerlat_fd_open(struct inode *inode, struct file *file)
  *
  * Prints 1 on timerlat, the number of interferences on osnoise, -1 on error.
  */
-static ssize_t
-timerlat_fd_read(struct file *file, char __user *ubuf, size_t count,
-		  loff_t *ppos)
+static ssize_t timerlat_fd_read(struct kiocb *iocb, struct iov_iter *to)
 {
-	long cpu = (long) file->private_data;
+	long cpu = (long) iocb->ki_filp->private_data;
 	struct osnoise_variables *osn_var;
 	struct timerlat_variables *tlat;
 	struct timerlat_sample s;
@@ -2665,7 +2659,7 @@ static struct trace_min_max_param timerlat_period = {
 
 static const struct file_operations timerlat_fd_fops = {
 	.open		= timerlat_fd_open,
-	.read		= timerlat_fd_read,
+	.read_iter	= timerlat_fd_read,
 	.release	= timerlat_fd_release,
 	.llseek		= generic_file_llseek,
 };
@@ -2673,17 +2667,17 @@ static const struct file_operations timerlat_fd_fops = {
 
 static const struct file_operations cpus_fops = {
 	.open		= tracing_open_generic,
-	.read		= osnoise_cpus_read,
-	.write		= osnoise_cpus_write,
+	.read_iter	= osnoise_cpus_read,
+	.write_iter	= osnoise_cpus_write,
 	.llseek		= generic_file_llseek,
 };
 
 static const struct file_operations osnoise_options_fops = {
 	.open		= osnoise_options_open,
-	.read		= seq_read,
+	.read_iter	= seq_read_iter,
 	.llseek		= seq_lseek,
 	.release	= seq_release,
-	.write		= osnoise_options_write
+	.write_iter	= osnoise_options_write
 };
 
 #ifdef CONFIG_TIMERLAT_TRACER
diff --git a/kernel/trace/trace_printk.c b/kernel/trace/trace_printk.c
index 29f6e95439b6..c98e09959e3c 100644
--- a/kernel/trace/trace_printk.c
+++ b/kernel/trace/trace_printk.c
@@ -371,7 +371,7 @@ ftrace_formats_open(struct inode *inode, struct file *file)
 
 static const struct file_operations ftrace_formats_fops = {
 	.open = ftrace_formats_open,
-	.read = seq_read,
+	.read_iter = seq_read_iter,
 	.llseek = seq_lseek,
 	.release = seq_release,
 };
diff --git a/kernel/trace/trace_recursion_record.c b/kernel/trace/trace_recursion_record.c
index a520b11afb0d..d3b91a732d25 100644
--- a/kernel/trace/trace_recursion_record.c
+++ b/kernel/trace/trace_recursion_record.c
@@ -200,11 +200,9 @@ static int recursed_function_open(struct inode *inode, struct file *file)
 	return ret;
 }
 
-static ssize_t recursed_function_write(struct file *file,
-				       const char __user *buffer,
-				       size_t count, loff_t *ppos)
+static ssize_t recursed_function_write(struct kiocb *iocb, struct iov_iter *from)
 {
-	return count;
+	return iov_iter_count(from);
 }
 
 static int recursed_function_release(struct inode *inode, struct file *file)
@@ -216,8 +214,8 @@ static int recursed_function_release(struct inode *inode, struct file *file)
 
 static const struct file_operations recursed_functions_fops = {
 	.open           = recursed_function_open,
-	.write		= recursed_function_write,
-	.read           = seq_read,
+	.write_iter	= recursed_function_write,
+	.read_iter      = seq_read_iter,
 	.llseek         = seq_lseek,
 	.release        = recursed_function_release,
 };
diff --git a/kernel/trace/trace_sched_switch.c b/kernel/trace/trace_sched_switch.c
index 8a407adb0e1c..510c6320f7c7 100644
--- a/kernel/trace/trace_sched_switch.c
+++ b/kernel/trace/trace_sched_switch.c
@@ -510,7 +510,7 @@ static int tracing_saved_tgids_open(struct inode *inode, struct file *filp)
 
 const struct file_operations tracing_saved_tgids_fops = {
 	.open		= tracing_saved_tgids_open,
-	.read		= seq_read,
+	.read_iter	= seq_read_iter,
 	.llseek		= seq_lseek,
 	.release	= seq_release,
 };
@@ -589,14 +589,13 @@ static int tracing_saved_cmdlines_open(struct inode *inode, struct file *filp)
 
 const struct file_operations tracing_saved_cmdlines_fops = {
 	.open		= tracing_saved_cmdlines_open,
-	.read		= seq_read,
+	.read_iter	= seq_read_iter,
 	.llseek		= seq_lseek,
 	.release	= seq_release,
 };
 
 static ssize_t
-tracing_saved_cmdlines_size_read(struct file *filp, char __user *ubuf,
-				 size_t cnt, loff_t *ppos)
+tracing_saved_cmdlines_size_read(struct kiocb *iocb, struct iov_iter *to)
 {
 	char buf[64];
 	int r;
@@ -607,7 +606,7 @@ tracing_saved_cmdlines_size_read(struct file *filp, char __user *ubuf,
 	arch_spin_unlock(&trace_cmdline_lock);
 	preempt_enable();
 
-	return simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
+	return simple_copy_to_iter(buf, &iocb->ki_pos, r, to);
 }
 
 void trace_free_saved_cmdlines_buffer(void)
@@ -635,13 +634,13 @@ static int tracing_resize_saved_cmdlines(unsigned int val)
 }
 
 static ssize_t
-tracing_saved_cmdlines_size_write(struct file *filp, const char __user *ubuf,
-				  size_t cnt, loff_t *ppos)
+tracing_saved_cmdlines_size_write(struct kiocb *iocb, struct iov_iter *from)
 {
+	size_t cnt = iov_iter_count(from);
 	unsigned long val;
 	int ret;
 
-	ret = kstrtoul_from_user(ubuf, cnt, 10, &val);
+	ret = kstrtoul_from_iter(from, cnt, 10, &val);
 	if (ret)
 		return ret;
 
@@ -653,13 +652,13 @@ tracing_saved_cmdlines_size_write(struct file *filp, const char __user *ubuf,
 	if (ret < 0)
 		return ret;
 
-	*ppos += cnt;
+	iocb->ki_pos += cnt;
 
 	return cnt;
 }
 
 const struct file_operations tracing_saved_cmdlines_size_fops = {
 	.open		= tracing_open_generic,
-	.read		= tracing_saved_cmdlines_size_read,
-	.write		= tracing_saved_cmdlines_size_write,
+	.read_iter	= tracing_saved_cmdlines_size_read,
+	.write_iter	= tracing_saved_cmdlines_size_write,
 };
diff --git a/kernel/trace/trace_stack.c b/kernel/trace/trace_stack.c
index 5a48dba912ea..fb657b1203de 100644
--- a/kernel/trace/trace_stack.c
+++ b/kernel/trace/trace_stack.c
@@ -320,29 +320,26 @@ static struct ftrace_ops trace_ops __read_mostly =
 	.func = stack_trace_call,
 };
 
-static ssize_t
-stack_max_size_read(struct file *filp, char __user *ubuf,
-		    size_t count, loff_t *ppos)
+static ssize_t stack_max_size_read(struct kiocb *iocb, struct iov_iter *to)
 {
-	unsigned long *ptr = filp->private_data;
+	unsigned long *ptr = iocb->ki_filp->private_data;
 	char buf[64];
 	int r;
 
 	r = snprintf(buf, sizeof(buf), "%ld\n", *ptr);
 	if (r > sizeof(buf))
 		r = sizeof(buf);
-	return simple_read_from_buffer(ubuf, count, ppos, buf, r);
+	return simple_copy_to_iter(buf, &iocb->ki_pos, r, to);
 }
 
-static ssize_t
-stack_max_size_write(struct file *filp, const char __user *ubuf,
-		     size_t count, loff_t *ppos)
+static ssize_t stack_max_size_write(struct kiocb *iocb, struct iov_iter *from)
 {
-	long *ptr = filp->private_data;
+	long *ptr = iocb->ki_filp->private_data;
+	size_t count = iov_iter_count(from);
 	unsigned long val, flags;
 	int ret;
 
-	ret = kstrtoul_from_user(ubuf, count, 10, &val);
+	ret = kstrtoul_from_iter(from, count, 10, &val);
 	if (ret)
 		return ret;
 
@@ -367,8 +364,8 @@ stack_max_size_write(struct file *filp, const char __user *ubuf,
 
 static const struct file_operations stack_max_size_fops = {
 	.open		= tracing_open_generic,
-	.read		= stack_max_size_read,
-	.write		= stack_max_size_write,
+	.read_iter	= stack_max_size_read,
+	.write_iter	= stack_max_size_write,
 	.llseek		= default_llseek,
 };
 
@@ -486,7 +483,7 @@ static int stack_trace_open(struct inode *inode, struct file *file)
 
 static const struct file_operations stack_trace_fops = {
 	.open		= stack_trace_open,
-	.read		= seq_read,
+	.read_iter	= seq_read_iter,
 	.llseek		= seq_lseek,
 	.release	= seq_release,
 };
@@ -505,8 +502,8 @@ stack_trace_filter_open(struct inode *inode, struct file *file)
 
 static const struct file_operations stack_trace_filter_fops = {
 	.open = stack_trace_filter_open,
-	.read = seq_read,
-	.write = ftrace_filter_write,
+	.read_iter = seq_read_iter,
+	.write_iter = ftrace_filter_write_iter,
 	.llseek = tracing_lseek,
 	.release = ftrace_regex_release,
 };
diff --git a/kernel/trace/trace_stat.c b/kernel/trace/trace_stat.c
index bb247beec447..d6cf9e0ecf81 100644
--- a/kernel/trace/trace_stat.c
+++ b/kernel/trace/trace_stat.c
@@ -269,7 +269,7 @@ static int tracing_stat_release(struct inode *i, struct file *f)
 
 static const struct file_operations tracing_stat_fops = {
 	.open		= tracing_stat_open,
-	.read		= seq_read,
+	.read_iter	= seq_read_iter,
 	.llseek		= seq_lseek,
 	.release	= tracing_stat_release
 };
diff --git a/kernel/trace/trace_uprobe.c b/kernel/trace/trace_uprobe.c
index 9e461362450a..04a06f938969 100644
--- a/kernel/trace/trace_uprobe.c
+++ b/kernel/trace/trace_uprobe.c
@@ -800,14 +800,15 @@ static ssize_t probes_write(struct file *file, const char __user *buffer,
 	return trace_parse_run_command(file, buffer, count, ppos,
 					create_or_delete_trace_uprobe);
 }
+FOPS_WRITE_ITER_HELPER(probes_write);
 
 static const struct file_operations uprobe_events_ops = {
 	.owner		= THIS_MODULE,
 	.open		= probes_open,
-	.read		= seq_read,
+	.read_iter	= seq_read_iter,
 	.llseek		= seq_lseek,
 	.release	= seq_release,
-	.write		= probes_write,
+	.write_iter	= probes_write_iter,
 };
 
 /* Probes profiling interfaces */
@@ -846,7 +847,7 @@ static int profile_open(struct inode *inode, struct file *file)
 static const struct file_operations uprobe_profile_ops = {
 	.owner		= THIS_MODULE,
 	.open		= profile_open,
-	.read		= seq_read,
+	.read_iter	= seq_read_iter,
 	.llseek		= seq_lseek,
 	.release	= seq_release,
 };
-- 
2.43.0


  parent reply	other threads:[~2024-04-11 15:34 UTC|newest]

Thread overview: 451+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-04-11 15:12 [PATCHSET RFC 0/437] Kill off old fops ->read() and ->write() Jens Axboe
2024-04-11 15:12 ` [PATCH 001/437] fs: split do_loop_readv_writev() into separate read/write side helpers Jens Axboe
2024-04-11 15:12 ` [PATCH 002/437] fs: add generic read/write iterator helpers Jens Axboe
2024-04-15 19:55   ` Al Viro
2024-04-15 20:11     ` Jens Axboe
2024-04-15 21:08       ` Al Viro
2024-04-15 21:16         ` Jens Axboe
2024-04-15 23:42           ` Al Viro
2024-04-16 20:14     ` David Laight
2024-04-11 15:12 ` [PATCH 003/437] fs: add helpers for defining " Jens Axboe
2024-04-11 15:12 ` [PATCH 004/437] fs: add simple_copy_{to,from}_iter() helpers Jens Axboe
2024-04-11 15:12 ` [PATCH 005/437] uio: add get/put_iter helpers Jens Axboe
2024-04-11 15:12 ` [PATCH 006/437] fs: add uio.h to fs.h Jens Axboe
2024-04-11 15:12 ` [PATCH 007/437] mm/util: add iterdup_nul() and iterdup() helpers Jens Axboe
2024-04-11 15:12 ` [PATCH 008/437] kstrtox: add iov_iter versions of the string conversion helpers Jens Axboe
2024-04-11 15:12 ` [PATCH 009/437] lib/string_helpers: split __parse_int_array() into a helper Jens Axboe
2024-04-11 15:12 ` [PATCH 010/437] lib/string_helpers: add parse_int_array_iter() Jens Axboe
2024-04-11 15:12 ` [PATCH 011/437] virtio_console: convert to read/write iterator helpers Jens Axboe
2024-04-11 15:12 ` [PATCH 012/437] char/adi: convert to read/write iterators Jens Axboe
2024-04-11 15:12 ` [PATCH 013/437] char/apm-emulation: " Jens Axboe
2024-04-11 15:12 ` [PATCH 014/437] char/applicom: " Jens Axboe
2024-04-11 15:12 ` [PATCH 015/437] char/nsc_gpio: " Jens Axboe
2024-04-11 15:12 ` [PATCH 016/437] char/dsp1620: " Jens Axboe
2024-04-11 15:12 ` [PATCH 017/437] char/dsp56k: " Jens Axboe
2024-04-11 15:12 ` [PATCH 018/437] char/dtlk: " Jens Axboe
2024-04-11 15:12 ` [PATCH 019/437] char/hpet: " Jens Axboe
2024-04-11 15:12 ` [PATCH 020/437] char/hw_random: " Jens Axboe
2024-04-11 15:12 ` [PATCH 021/437] char/ipmi: " Jens Axboe
2024-04-11 15:12 ` [PATCH 022/437] char/tpm: " Jens Axboe
2024-04-11 15:12 ` [PATCH 023/437] char/lp: " Jens Axboe
2024-04-11 15:12 ` [PATCH 024/437] char/mem: " Jens Axboe
2024-04-11 15:12 ` [PATCH 025/437] char/mwave: " Jens Axboe
2024-04-11 15:12 ` [PATCH 026/437] char/nvram: " Jens Axboe
2024-04-11 15:12 ` [PATCH 027/437] char/nwbutton: " Jens Axboe
2024-04-11 15:12 ` [PATCH 028/437] char/nwflash: " Jens Axboe
2024-04-11 15:12 ` [PATCH 029/437] char/pc8736x_gpio: " Jens Axboe
2024-04-11 15:12 ` [PATCH 030/437] char/powernv-op-panel: " Jens Axboe
2024-04-11 15:12 ` [PATCH 031/437] char/ppdev: " Jens Axboe
2024-04-11 15:12 ` [PATCH 032/437] char/ps3flash: " Jens Axboe
2024-04-11 15:12 ` [PATCH 033/437] char/scx200_gpio: " Jens Axboe
2024-04-11 15:12 ` [PATCH 034/437] char/sonypi: " Jens Axboe
2024-04-11 15:12 ` [PATCH 035/437] char/tlclk: " Jens Axboe
2024-04-11 15:12 ` [PATCH 036/437] char/xilinx_hwicap: " Jens Axboe
2024-04-11 15:12 ` [PATCH 037/437] char/xillybus: " Jens Axboe
2024-04-11 15:12 ` [PATCH 038/437] debugfs: convert to ->read_iter() Jens Axboe
2024-04-11 15:12 ` [PATCH 039/437] libfs: switch to read iter and add copy helpers Jens Axboe
2024-04-11 15:13 ` [PATCH 040/437] fs: convert generic_read_dir() to ->read_iter() Jens Axboe
2024-04-11 15:13 ` [PATCH 041/437] fs: convert any user of fops->read() for seq_read to read_iter Jens Axboe
2024-04-11 15:13 ` [PATCH 042/437] ceph: convert read_dir handler to read_iter() Jens Axboe
2024-04-11 15:13 ` [PATCH 043/437] ecryptfs: miscdev: convert to read/write iterators Jens Axboe
2024-04-11 15:13 ` [PATCH 044/437] ocfs2: " Jens Axboe
2024-04-11 15:13 ` [PATCH 045/437] orangefs: " Jens Axboe
2024-04-11 15:13 ` [PATCH 046/437] dlm: " Jens Axboe
2024-04-11 15:13 ` [PATCH 047/437] tracefs: " Jens Axboe
2024-04-11 15:13 ` [PATCH 048/437] ubifs: " Jens Axboe
2024-04-11 15:13 ` [PATCH 049/437] fuse: " Jens Axboe
2024-04-11 15:13 ` [PATCH 050/437] staging: convert drivers " Jens Axboe
2024-04-11 15:13 ` [PATCH 051/437] Bluetooth: convert " Jens Axboe
2024-04-11 15:13 ` [PATCH 052/437] net: mac80211: " Jens Axboe
2024-04-11 15:13 ` [PATCH 053/437] net: 6lowpan: convert debugfs " Jens Axboe
2024-04-11 15:13 ` [PATCH 054/437] net: sunrpc: convert " Jens Axboe
2024-04-11 15:13 ` [PATCH 055/437] net: wireless: " Jens Axboe
2024-04-11 15:13 ` [PATCH 056/437] net: rfkill: " Jens Axboe
2024-04-11 15:13 ` [PATCH 057/437] net: l2tp: " Jens Axboe
2024-04-11 15:13 ` [PATCH 058/437] fs: add IOCB_VECTORED flags Jens Axboe
2024-04-11 15:13 ` [PATCH 059/437] ALSA: core: convert to read/write iterators Jens Axboe
2024-04-11 15:13 ` [PATCH 060/437] ASoC: Intel: " Jens Axboe
2024-04-11 15:13 ` [PATCH 061/437] ASoC: fsl: " Jens Axboe
2024-04-11 15:13 ` [PATCH 062/437] ALSA: pcmtest: " Jens Axboe
2024-04-11 15:13 ` [PATCH 063/437] sound/oss/dmasound: " Jens Axboe
2024-04-11 15:13 ` [PATCH 064/437] ASoC: SOF: icp3-dtrace: " Jens Axboe
2024-04-11 15:13 ` [PATCH 065/437] SoC: SOF: icp4: " Jens Axboe
2024-04-11 15:13 ` [PATCH 066/437] ASoC: SOF: Core: " Jens Axboe
2024-04-11 15:13 ` [PATCH 067/437] ASoC: SOF: " Jens Axboe
2024-04-11 15:13 ` [PATCH 068/437] block: " Jens Axboe
2024-04-11 15:13 ` [PATCH 069/437] bpf: " Jens Axboe
2024-04-11 15:13 ` [PATCH 070/437] perf: convert events " Jens Axboe
2024-04-11 15:13 ` [PATCH 071/437] dma-debug: convert " Jens Axboe
2024-04-11 15:13 ` [PATCH 072/437] kernel/fail_function: " Jens Axboe
2024-04-11 15:13 ` [PATCH 073/437] kcsan: " Jens Axboe
2024-04-11 15:13 ` [PATCH 074/437] module: " Jens Axboe
2024-04-11 15:13 ` [PATCH 075/437] kernel/power: " Jens Axboe
2024-04-11 15:13 ` [PATCH 076/437] printk: " Jens Axboe
2024-04-11 15:13 ` [PATCH 077/437] relay: " Jens Axboe
2024-04-11 15:13 ` [PATCH 078/437] kernel/time: " Jens Axboe
2024-04-11 15:13 ` [PATCH 079/437] rv: " Jens Axboe
2024-04-11 15:13 ` Jens Axboe [this message]
2024-04-11 15:13 ` [PATCH 081/437] gcov: " Jens Axboe
2024-04-11 15:13 ` [PATCH 082/437] sched/debug: " Jens Axboe
2024-04-11 15:13 ` [PATCH 083/437] kernel/irq: convert debugfs helpers " Jens Axboe
2024-04-11 15:13 ` [PATCH 084/437] locking/lock_events: convert " Jens Axboe
2024-04-11 15:13 ` [PATCH 085/437] kprobes: " Jens Axboe
2024-04-11 15:13 ` [PATCH 086/437] fs: add iterator based version of simple_transaction_read() Jens Axboe
2024-04-11 15:13 ` [PATCH 087/437] tomoyo: convert to read/write iterators Jens Axboe
2024-04-11 15:13 ` [PATCH 088/437] smack: " Jens Axboe
2024-04-11 15:13 ` [PATCH 089/437] apparmor: " Jens Axboe
2024-04-11 15:13 ` [PATCH 090/437] landlock: " Jens Axboe
2024-04-11 15:13 ` [PATCH 091/437] lsm: " Jens Axboe
2024-04-11 15:13 ` [PATCH 092/437] selinux: " Jens Axboe
2024-04-11 15:13 ` [PATCH 093/437] integrity: " Jens Axboe
2024-04-11 15:13 ` [PATCH 094/437] lockdown: " Jens Axboe
2024-04-11 15:13 ` [PATCH 095/437] security: " Jens Axboe
2024-04-11 15:13 ` [PATCH 096/437] mm: " Jens Axboe
2024-04-11 15:13 ` [PATCH 097/437] aoe: " Jens Axboe
2024-04-11 15:13 ` [PATCH 098/437] drbd: " Jens Axboe
2024-04-11 15:13 ` [PATCH 099/437] mtip32xx: " Jens Axboe
2024-04-11 15:14 ` [PATCH 100/437] zram: " Jens Axboe
2024-04-11 15:14 ` [PATCH 101/437] s390/dasd: " Jens Axboe
2024-04-11 15:14 ` [PATCH 102/437] lib: " Jens Axboe
2024-04-11 15:14 ` [PATCH 103/437] ipc: " Jens Axboe
2024-04-11 15:14 ` [PATCH 104/437] drivers/accel: " Jens Axboe
2024-04-11 15:14 ` [PATCH 105/437] drivers/acpi: " Jens Axboe
2024-04-11 15:14 ` [PATCH 106/437] crypto: hisilicon: " Jens Axboe
2024-04-11 15:14 ` [PATCH 107/437] crypto: iaa: " Jens Axboe
2024-04-11 15:14 ` [PATCH 108/437] crypto: qat: " Jens Axboe
2024-04-11 15:14 ` [PATCH 109/437] crypto: cpp: " Jens Axboe
2024-04-11 15:14 ` [PATCH 110/437] fs/pstore: " Jens Axboe
2024-04-11 15:14 ` [PATCH 111/437] drivers/gpio: convert to ->read_iter and ->write_iter Jens Axboe
2024-04-11 15:14 ` [PATCH 112/437] drivers/bluetooth: convert to read/write iterators Jens Axboe
2024-04-11 15:14 ` [PATCH 113/437] drivers/ras: " Jens Axboe
2024-04-11 15:14 ` [PATCH 114/437] fs/efivars: " Jens Axboe
2024-04-11 15:14 ` [PATCH 115/437] drivers/comedi: " Jens Axboe
2024-04-11 15:14 ` [PATCH 116/437] drivers/counter: " Jens Axboe
2024-04-11 15:14 ` [PATCH 117/437] drivers/hid: " Jens Axboe
2024-04-11 15:14 ` [PATCH 118/437] drivers/tty: convert to ->read_iter and ->write_iter Jens Axboe
2024-04-11 15:14 ` [PATCH 119/437] drivers/auxdisplay: convert to read/write iterators Jens Axboe
2024-04-11 15:14 ` [PATCH 120/437] fs/eventfd: " Jens Axboe
2024-04-11 15:14 ` [PATCH 121/437] drivers/input: " Jens Axboe
2024-04-11 15:14 ` [PATCH 122/437] drivers/pci: " Jens Axboe
2024-04-11 15:14 ` [PATCH 123/437] fs/fuse: " Jens Axboe
2024-04-11 15:14 ` [PATCH 124/437] firmware: arm_scmi: " Jens Axboe
2024-04-11 15:14 ` [PATCH 125/437] firmware: cirrus: " Jens Axboe
2024-04-11 15:14 ` [PATCH 126/437] firmware: efi: " Jens Axboe
2024-04-11 15:14 ` [PATCH 127/437] firmware: psci: " Jens Axboe
2024-04-11 15:14 ` [PATCH 128/437] firmware: turris-mox-rwtm: " Jens Axboe
2024-04-11 15:14 ` [PATCH 129/437] firmware: tegra: " Jens Axboe
2024-04-11 15:14 ` [PATCH 130/437] drivers/i2c: " Jens Axboe
2024-04-11 15:14 ` [PATCH 131/437] drivers/opp: " Jens Axboe
2024-04-11 15:14 ` [PATCH 132/437] drivers/base: " Jens Axboe
2024-04-11 15:14 ` [PATCH 133/437] drivers/bus: " Jens Axboe
2024-04-11 15:14 ` [PATCH 134/437] drivers/regulator: " Jens Axboe
2024-04-11 15:14 ` [PATCH 135/437] fs/notify: " Jens Axboe
2024-04-11 15:14 ` [PATCH 136/437] drm: switch drm_read() to be iterator based Jens Axboe
2024-04-11 15:14 ` [PATCH 137/437] drm: convert debugfs helpers to be read/write " Jens Axboe
2024-04-11 15:14 ` [PATCH 138/437] drm/i915: convert to read/write iterators Jens Axboe
2024-04-11 15:14 ` [PATCH 139/437] drm: amd: " Jens Axboe
2024-04-11 15:14 ` [PATCH 140/437] drm: msm: " Jens Axboe
2024-04-11 15:14 ` [PATCH 141/437] drm: nouveau: " Jens Axboe
2024-04-11 15:14 ` [PATCH 142/437] drm: mipi: " Jens Axboe
2024-04-11 15:14 ` [PATCH 143/437] drm: mali: " Jens Axboe
2024-04-11 15:14 ` [PATCH 144/437] drm/bridge: it6505: " Jens Axboe
2024-04-11 15:14 ` [PATCH 145/437] drm/imagination: " Jens Axboe
2024-04-11 15:14 ` [PATCH 146/437] drm/loongson: " Jens Axboe
2024-04-11 15:14 ` [PATCH 147/437] drm/radeon/radeon_ttm: " Jens Axboe
2024-04-11 15:14 ` [PATCH 148/437] drm: armada: " Jens Axboe
2024-04-11 15:14 ` [PATCH 149/437] drm: omap: " Jens Axboe
2024-04-11 15:14 ` [PATCH 150/437] vga_switcheroo: " Jens Axboe
2024-04-11 15:14 ` [PATCH 151/437] drivers/clk: " Jens Axboe
2024-04-11 15:14 ` [PATCH 152/437] drivers/rtc: " Jens Axboe
2024-04-11 15:14 ` [PATCH 153/437] drivers/dma: " Jens Axboe
2024-04-11 15:14 ` [PATCH 154/437] fs/debugfs: " Jens Axboe
2024-04-11 15:14 ` [PATCH 155/437] HID: usbhid: " Jens Axboe
2024-04-11 15:14 ` [PATCH 156/437] usb: chipidea: " Jens Axboe
2024-04-11 15:14 ` [PATCH 157/437] usb: class: " Jens Axboe
2024-04-11 15:14 ` [PATCH 158/437] usb: core: " Jens Axboe
2024-04-11 15:14 ` [PATCH 159/437] usb: dwc2: " Jens Axboe
2024-04-11 15:15 ` [PATCH 160/437] usb: dwc3: " Jens Axboe
2024-04-11 15:15 ` [PATCH 161/437] usb: fotg210-hcd: " Jens Axboe
2024-04-11 15:15 ` [PATCH 162/437] usb: gadget: " Jens Axboe
2024-04-11 15:15 ` [PATCH 163/437] usb: host: ehci: " Jens Axboe
2024-04-11 15:15 ` [PATCH 164/437] usb: host: ohci: " Jens Axboe
2024-04-11 15:15 ` [PATCH 165/437] usb: host: uhci: " Jens Axboe
2024-04-11 15:15 ` [PATCH 166/437] usb: host: xhci: " Jens Axboe
2024-04-11 15:15 ` [PATCH 167/437] usb: image: mdc800: " Jens Axboe
2024-04-11 15:15 ` [PATCH 168/437] usb: misc: " Jens Axboe
2024-04-11 15:15 ` [PATCH 169/437] usb: mon: " Jens Axboe
2024-04-11 15:15 ` [PATCH 170/437] usb: mtu3: " Jens Axboe
2024-04-11 15:15 ` [PATCH 171/437] usb: musb: " Jens Axboe
2024-04-11 15:15 ` [PATCH 172/437] usb: skeleton: " Jens Axboe
2024-04-11 15:15 ` [PATCH 173/437] usb: gadget: atmel_usba_udc: " Jens Axboe
2024-04-11 15:15 ` [PATCH 174/437] soc: qcom: " Jens Axboe
2024-04-11 15:15 ` [PATCH 175/437] soc: aspeed: " Jens Axboe
2024-04-11 15:15 ` [PATCH 176/437] soc: fsl: " Jens Axboe
2024-04-11 15:15 ` [PATCH 177/437] soc: mediatek: " Jens Axboe
2024-04-11 15:15 ` [PATCH 178/437] soc: sifive: ccache: " Jens Axboe
2024-04-11 15:15 ` [PATCH 179/437] drivers/pinctrl: convert to ->read_iter and ->write_iter Jens Axboe
2024-04-11 15:15 ` [PATCH 180/437] drivers/phy: " Jens Axboe
2024-04-11 15:15 ` [PATCH 181/437] drivers/ufs: " Jens Axboe
2024-04-11 15:15 ` [PATCH 182/437] drivers/uio: " Jens Axboe
2024-04-11 15:15 ` [PATCH 183/437] drivers/platform: " Jens Axboe
2024-04-11 15:15 ` [PATCH 184/437] drivers/mtd: " Jens Axboe
2024-04-11 15:15 ` [PATCH 185/437] scsi: bfa: convert to read/write iterators Jens Axboe
2024-04-11 15:15 ` [PATCH 186/437] scsi: csiostor: " Jens Axboe
2024-04-11 15:15 ` [PATCH 187/437] scsi: fnic: " Jens Axboe
2024-04-11 15:15 ` [PATCH 188/437] scsi: hisi_sas: " Jens Axboe
2024-04-11 15:15 ` [PATCH 189/437] scsi: lpfc: " Jens Axboe
2024-04-11 15:15 ` [PATCH 190/437] scsi: megaraid: " Jens Axboe
2024-04-11 15:15 ` [PATCH 191/437] scsi: mpt3sas: " Jens Axboe
2024-04-11 15:15 ` [PATCH 192/437] scsi: qedf: " Jens Axboe
2024-04-11 15:15 ` [PATCH 193/437] scsi: qedi: " Jens Axboe
2024-04-11 15:15 ` [PATCH 194/437] scsi: qla2xxx: " Jens Axboe
2024-04-11 15:15 ` [PATCH 195/437] scsi: snic: " Jens Axboe
2024-04-11 15:15 ` [PATCH 196/437] scsi: cxlflash: " Jens Axboe
2024-04-11 15:15 ` [PATCH 197/437] scsi: scsi_debug: " Jens Axboe
2024-04-11 15:15 ` [PATCH 198/437] scsi: sg: " Jens Axboe
2024-04-11 15:15 ` [PATCH 199/437] scsi: st: " Jens Axboe
2024-04-11 15:15 ` [PATCH 200/437] staging: axis: " Jens Axboe
2024-04-11 15:15 ` [PATCH 201/437] staging: fieldbus: " Jens Axboe
2024-04-11 15:15 ` [PATCH 202/437] staging: greybus: " Jens Axboe
2024-04-11 15:15 ` [PATCH 203/437] staging: av7110: " Jens Axboe
2024-04-11 15:15 ` [PATCH 204/437] staging: vc04_services: " Jens Axboe
2024-04-11 15:15 ` [PATCH 205/437] drivers/xen: convert to ->read_iter and ->write_iter Jens Axboe
2024-04-11 15:15 ` [PATCH 206/437] virt: " Jens Axboe
2024-04-11 15:15 ` [PATCH 207/437] virt: fsl_hypervisor: convert to read/write iterators Jens Axboe
2024-04-11 15:15 ` [PATCH 208/437] drivers/video: convert to ->read_iter and ->write_iter Jens Axboe
2024-04-11 15:15 ` [PATCH 209/437] video: fbdev: pxa3xx-gcu: convert to read/write iterators Jens Axboe
2024-04-11 15:15 ` [PATCH 210/437] drivers/iommu: convert intel iommu " Jens Axboe
2024-04-11 15:15 ` [PATCH 211/437] drivers/iommu: convert omap " Jens Axboe
2024-04-11 15:15 ` [PATCH 212/437] misc: bcm_vk: convert to iterators Jens Axboe
2024-04-11 15:15 ` [PATCH 213/437] misc: lis3lv02d: " Jens Axboe
2024-04-11 15:15 ` [PATCH 214/437] misc: eeprom/idt_89hpesx: convert to read/write iterators Jens Axboe
2024-04-11 15:15 ` [PATCH 215/437] misc: hpilo: " Jens Axboe
2024-04-11 15:15 ` [PATCH 216/437] misc: lkdtm: " Jens Axboe
2024-04-11 15:15 ` [PATCH 217/437] misc: open-dice: " Jens Axboe
2024-04-11 15:15 ` [PATCH 218/437] misc: tps6594-pfsm: " Jens Axboe
2024-04-11 15:15 ` [PATCH 219/437] misc: ibmvmc: " Jens Axboe
2024-04-11 15:16 ` [PATCH 220/437] misc: cxl: " Jens Axboe
2024-04-11 15:16 ` [PATCH 221/437] misc: ocxl: " Jens Axboe
2024-04-11 15:16 ` [PATCH 222/437] drivers/isdn: " Jens Axboe
2024-04-11 15:16 ` [PATCH 223/437] drivers/leds: " Jens Axboe
2024-04-11 15:16 ` [PATCH 224/437] drivers/mailbox: " Jens Axboe
2024-04-11 15:16 ` [PATCH 225/437] drivers/mfd: " Jens Axboe
2024-04-11 15:16 ` [PATCH 226/437] drivers/misc/mei: " Jens Axboe
2024-04-11 15:16 ` [PATCH 227/437] misc: ibmasm: " Jens Axboe
2024-04-11 15:16 ` [PATCH 228/437] drivers/spi: " Jens Axboe
2024-04-11 15:16 ` [PATCH 229/437] drivers/nfc: " Jens Axboe
2024-04-11 15:16 ` [PATCH 230/437] drivers/nvme: " Jens Axboe
2024-04-11 15:16 ` [PATCH 231/437] drivers/firewire: " Jens Axboe
2024-04-11 15:16 ` [PATCH 232/437] drivers/mfd: " Jens Axboe
2024-04-11 15:16 ` [PATCH 233/437] watchdog: acquirewdt: " Jens Axboe
2024-04-11 15:16 ` [PATCH 234/437] watchdog: advantechwdt: " Jens Axboe
2024-04-11 15:16 ` [PATCH 235/437] watchdog: alim1535_wdt: " Jens Axboe
2024-04-11 15:16 ` [PATCH 236/437] watchdog: alim7101_wdt: " Jens Axboe
2024-04-11 15:16 ` [PATCH 237/437] watchdog: at91rm9200_wdt: " Jens Axboe
2024-04-11 15:16 ` [PATCH 238/437] watchdog: cpu5wdt: " Jens Axboe
2024-04-11 15:16 ` [PATCH 239/437] watchdog: eurotechwdt: " Jens Axboe
2024-04-11 15:16 ` [PATCH 240/437] watchdog: geodewdt: " Jens Axboe
2024-04-11 15:16 ` [PATCH 241/437] watchdog: ib700wdt: " Jens Axboe
2024-04-11 15:16 ` [PATCH 242/437] watchdog: ibmasr: " Jens Axboe
2024-04-11 15:16 ` [PATCH 243/437] watchdog: it8712f_wdt: " Jens Axboe
2024-04-11 15:16 ` [PATCH 244/437] watchdog: machzwd: " Jens Axboe
2024-04-11 15:16 ` [PATCH 245/437] watchdog: mei_wdt: " Jens Axboe
2024-04-11 15:16 ` [PATCH 246/437] watchdog: nv_tco: " Jens Axboe
2024-04-11 15:16 ` [PATCH 247/437] watchdog: pc87413_wdt: " Jens Axboe
2024-04-11 15:16 ` [PATCH 248/437] watchdog: pcwd_pci: " Jens Axboe
2024-04-11 15:16 ` [PATCH 249/437] watchdog: pcwd_usb: " Jens Axboe
2024-04-11 15:16 ` [PATCH 250/437] watchdog: rdc321x_wdt: " Jens Axboe
2024-04-11 15:16 ` [PATCH 251/437] watchdog: sa1100_wdt: " Jens Axboe
2024-04-11 15:16 ` [PATCH 252/437] watchdog: sbc60xxwdt: " Jens Axboe
2024-04-11 15:16 ` [PATCH 253/437] watchdog: sbc_epx_c3: " Jens Axboe
2024-04-11 15:16 ` [PATCH 254/437] watchdog: sbc_fitpc2_wdt: " Jens Axboe
2024-04-11 15:16 ` [PATCH 255/437] watchdog: sc1200wdt: " Jens Axboe
2024-04-11 15:16 ` [PATCH 256/437] watchdog: sc520_wdt: " Jens Axboe
2024-04-11 15:16 ` [PATCH 257/437] watchdog: sch311x_wdt: " Jens Axboe
2024-04-11 15:16 ` [PATCH 258/437] watchdog: smsc37b787_wdt: " Jens Axboe
2024-04-11 15:16 ` [PATCH 259/437] watchdog: w83877f_wdt: " Jens Axboe
2024-04-11 15:16 ` [PATCH 260/437] watchdog: w83977f_wdt: " Jens Axboe
2024-04-11 15:16 ` [PATCH 261/437] watchdog: wafer5823wdt: " Jens Axboe
2024-04-11 15:16 ` [PATCH 262/437] watchdog: watchdog_dev: " Jens Axboe
2024-04-11 15:16 ` [PATCH 263/437] watchdog: wdt_pci: " Jens Axboe
2024-04-11 15:16 ` [PATCH 264/437] watchdog: ath79_wdt: " Jens Axboe
2024-04-11 15:16 ` [PATCH 265/437] watchdog: cpwd: " Jens Axboe
2024-04-11 15:16 ` [PATCH 266/437] watchdog: gef_wdt: " Jens Axboe
2024-04-11 15:16 ` [PATCH 267/437] watchdog: indydog: " Jens Axboe
2024-04-11 15:16 ` [PATCH 268/437] watchdog: m54xx_wdt: " Jens Axboe
2024-04-11 15:16 ` [PATCH 269/437] watchdog: mixcomwd: " Jens Axboe
2024-04-11 15:16 ` [PATCH 270/437] watchdog: mtx-1_wdt: " Jens Axboe
2024-04-11 15:16 ` [PATCH 271/437] watchdog: pcwd: " Jens Axboe
2024-04-11 15:16 ` [PATCH 272/437] watchdog: pika_wdt: " Jens Axboe
2024-04-11 15:16 ` [PATCH 273/437] watchdog: rc32434_wdt: " Jens Axboe
2024-04-11 15:16 ` [PATCH 274/437] watchdog: riowd: " Jens Axboe
2024-04-11 15:16 ` [PATCH 275/437] watchdog: sb_wdog: " Jens Axboe
2024-04-11 15:16 ` [PATCH 276/437] watchdog: sbc7240_wdt: " Jens Axboe
2024-04-11 15:16 ` [PATCH 277/437] watchdog: sbc8360: " Jens Axboe
2024-04-11 15:16 ` [PATCH 278/437] watchdog: scx200_wdt: " Jens Axboe
2024-04-11 15:16 ` [PATCH 279/437] watchdog: wdrtas: " Jens Axboe
2024-04-11 15:17 ` [PATCH 280/437] watchdog: wdt: " Jens Axboe
2024-04-11 15:17 ` [PATCH 281/437] watchdog: wdt285: " Jens Axboe
2024-04-11 15:17 ` [PATCH 282/437] watchdog: wdt977: " Jens Axboe
2024-04-11 15:17 ` [PATCH 283/437] fs/binfmt_misc: " Jens Axboe
2024-04-11 15:17 ` [PATCH 284/437] fs/coda: " Jens Axboe
2024-04-11 15:17 ` [PATCH 285/437] fs/nfsd: " Jens Axboe
2024-04-11 15:17 ` [PATCH 286/437] ubifs: " Jens Axboe
2024-04-11 15:17 ` [PATCH 287/437] cachefiles: " Jens Axboe
2024-04-11 15:17 ` [PATCH 288/437] fs/xfs: " Jens Axboe
2024-04-11 15:17 ` [PATCH 289/437] fs/bcachefs: " Jens Axboe
2024-04-11 15:17 ` [PATCH 290/437] fs/ocfs2: " Jens Axboe
2024-04-11 15:17 ` [PATCH 291/437] drivers/net/wireless/marvell: " Jens Axboe
2024-04-11 15:17 ` [PATCH 292/437] fs/proc: " Jens Axboe
2024-04-11 15:17 ` [PATCH 293/437] fs: convert fs_open " Jens Axboe
2024-04-11 15:17 ` [PATCH 294/437] openpromfs: convert " Jens Axboe
2024-04-11 15:17 ` [PATCH 295/437] drivers/net/wireless/ti: " Jens Axboe
2024-04-11 15:17 ` [PATCH 296/437] drivers/net/wireless/intel: " Jens Axboe
2024-04-11 15:17 ` [PATCH 297/437] drivers/net/wireless/mediatek: " Jens Axboe
2024-04-11 15:17 ` [PATCH 298/437] drivers/net/wireless/ath/ath5k: " Jens Axboe
2024-04-11 15:17 ` [PATCH 299/437] drivers/net/wireless/ath/ath6kl: " Jens Axboe
2024-04-11 15:17 ` [PATCH 300/437] drivers/net/wireless/ath/carl9170: " Jens Axboe
2024-04-11 15:17 ` [PATCH 301/437] drivers/net/wireless/ath/wcn36xx: " Jens Axboe
2024-04-11 15:17 ` [PATCH 302/437] drivers/net/wireless/ath/wil6210: " Jens Axboe
2024-04-11 15:17 ` [PATCH 303/437] drivers/net/wireless/ath/ath9k: " Jens Axboe
2024-04-11 15:17 ` [PATCH 304/437] drivers/net/wireless/ath/ath10k: " Jens Axboe
2024-04-11 15:17 ` [PATCH 305/437] drivers/net/wireless/ath/ath11k: " Jens Axboe
2024-04-11 15:17 ` [PATCH 306/437] drivers/net/wireless/broadcom: " Jens Axboe
2024-04-11 15:17 ` [PATCH 307/437] drivers/net/wireless/ralink: " Jens Axboe
2024-04-11 15:17 ` [PATCH 308/437] wifi: rtlwifi: convert debugfs helpers " Jens Axboe
2024-04-11 15:17 ` [PATCH 309/437] wifi: rtw88: " Jens Axboe
2024-04-11 15:17 ` [PATCH 310/437] wifi: rtw89: " Jens Axboe
2024-04-11 15:17 ` [PATCH 311/437] wifi: rsi: rsi_91x_debugfs: convert " Jens Axboe
2024-04-11 15:17 ` [PATCH 312/437] drivers/net/wireless/silabs: " Jens Axboe
2024-04-11 15:17 ` [PATCH 313/437] drivers/net/wireless/st: " Jens Axboe
2024-04-11 15:17 ` [PATCH 314/437] drivers/net/ieee802154: " Jens Axboe
2024-04-11 15:17 ` [PATCH 315/437] drivers/net/netdevsim: " Jens Axboe
2024-04-11 15:17 ` [PATCH 316/437] drivers/net/ppp: " Jens Axboe
2024-04-11 15:17 ` [PATCH 317/437] drivers/net/wwan: " Jens Axboe
2024-04-11 15:17 ` [PATCH 318/437] drivers/net/xen-netback: " Jens Axboe
2024-04-11 15:17 ` [PATCH 319/437] drivers/net/ethernet/broadcom-bnxt: " Jens Axboe
2024-04-11 15:17 ` [PATCH 320/437] drivers/net/brocade-bnad: ensure the copied buf is NULL terminated Jens Axboe
2024-04-11 15:17 ` [PATCH 321/437] drivers/net/brocade-bnad: convert to read/write iterators Jens Axboe
2024-04-11 15:17 ` [PATCH 322/437] drivers/net/ethernet/intel-ice: ensure the copied buf is NULL terminated Jens Axboe
2024-04-11 15:17 ` [PATCH 323/437] drivers/net/ethernet/intel: convert to read/write iterators Jens Axboe
2024-04-11 15:17 ` [PATCH 324/437] drivers/net/ethernet/chelsio: " Jens Axboe
2024-04-11 15:17 ` [PATCH 325/437] drivers/net/ethernet/hisilicon: " Jens Axboe
2024-04-11 15:17 ` [PATCH 326/437] drivers/net/ethernet/huawei: " Jens Axboe
2024-04-11 15:17 ` [PATCH 327/437] drivers/net/ethernet/amd-xgbe: " Jens Axboe
2024-04-11 15:17 ` [PATCH 328/437] drivers/net/ethernet/marvell/octeontx2: " Jens Axboe
2024-04-11 15:17 ` [PATCH 329/437] drivers/net/ethernet/mellanox/mlx5/core: " Jens Axboe
2024-04-11 15:17 ` [PATCH 330/437] x86/kernel: " Jens Axboe
2024-04-11 15:17 ` [PATCH 331/437] x86/kvm: " Jens Axboe
2024-04-11 15:17 ` [PATCH 332/437] x86/mm: " Jens Axboe
2024-04-11 15:17 ` [PATCH 333/437] arch/arm: " Jens Axboe
2024-04-11 15:17 ` [PATCH 334/437] arch/mips: " Jens Axboe
2024-04-11 15:17 ` [PATCH 335/437] parisc: eisa_eeprom: " Jens Axboe
2024-04-11 15:17 ` [PATCH 336/437] arch/parisc: " Jens Axboe
2024-04-11 15:17 ` [PATCH 337/437] powerpc/kernel: " Jens Axboe
2024-04-11 15:17 ` [PATCH 338/437] powerpc/kvm: " Jens Axboe
2024-04-11 15:17 ` [PATCH 339/437] powerpc/spufs: " Jens Axboe
2024-04-11 15:18 ` [PATCH 340/437] powerpc/platforms: " Jens Axboe
2024-04-11 15:18 ` [PATCH 341/437] s390: cio: " Jens Axboe
2024-04-11 15:18 ` [PATCH 342/437] s390: fs3270: " Jens Axboe
2024-04-11 15:18 ` [PATCH 343/437] s390: hmcdrv: " Jens Axboe
2024-04-11 15:18 ` [PATCH 344/437] s390: tape_char: " Jens Axboe
2024-04-11 15:18 ` [PATCH 345/437] s390: vmcp: " Jens Axboe
2024-04-11 15:18 ` [PATCH 346/437] s390: vmur: " Jens Axboe
2024-04-11 15:18 ` [PATCH 347/437] s390: zcore: " Jens Axboe
2024-04-11 15:18 ` [PATCH 348/437] s390: crypto: " Jens Axboe
2024-04-11 15:18 ` [PATCH 349/437] s390: monreader: " Jens Axboe
2024-04-11 15:18 ` [PATCH 350/437] s390: monwriter: " Jens Axboe
2024-04-11 15:18 ` [PATCH 351/437] s390: hw_random: " Jens Axboe
2024-04-11 15:18 ` [PATCH 352/437] s390: vmlogrdr: " Jens Axboe
2024-04-11 15:18 ` [PATCH 353/437] arch/s390: " Jens Axboe
2024-04-11 15:18 ` [PATCH 354/437] arch/sh: " Jens Axboe
2024-04-11 15:18 ` [PATCH 355/437] arch/um: " Jens Axboe
2024-04-11 15:18 ` [PATCH 356/437] arch/sparc: " Jens Axboe
2024-04-11 15:18 ` [PATCH 357/437] samples/vfio-mdev: " Jens Axboe
2024-04-11 15:18 ` [PATCH 358/437] hwmon: fschmd: " Jens Axboe
2024-04-11 15:18 ` [PATCH 359/437] hwmon: w83793: " Jens Axboe
2024-04-11 15:18 ` [PATCH 360/437] hwmon: asus_atk0110: " Jens Axboe
2024-04-11 15:18 ` [PATCH 361/437] hwmon: mr75203: " Jens Axboe
2024-04-11 15:18 ` [PATCH 362/437] hwmon: acbel-fsg032: " Jens Axboe
2024-04-11 15:18 ` [PATCH 363/437] hwmon: ibm-cffps: " Jens Axboe
2024-04-11 15:18 ` [PATCH 364/437] hwmon: max20730: " Jens Axboe
2024-04-11 15:18 ` [PATCH 365/437] hwmon: pmbus: core: " Jens Axboe
2024-04-11 15:18 ` [PATCH 366/437] hwmon: q54sj108a2: " Jens Axboe
2024-04-11 15:18 ` [PATCH 367/437] hwmon: ucd9000: " Jens Axboe
2024-04-11 15:18 ` [PATCH 368/437] hwmon: pt5161l: " Jens Axboe
2024-04-11 15:18 ` [PATCH 369/437] drivers/mmc: " Jens Axboe
2024-04-11 15:18 ` [PATCH 370/437] drivers/most: " Jens Axboe
2024-04-11 15:18 ` [PATCH 371/437] drivers/ntb: " Jens Axboe
2024-04-11 15:18 ` [PATCH 372/437] drivers/md: convert bcache " Jens Axboe
2024-04-11 15:18 ` [PATCH 373/437] drivers/remoteproc: convert " Jens Axboe
2024-04-11 15:18 ` [PATCH 374/437] drivers/thunderbolt: " Jens Axboe
2024-04-11 15:18 ` [PATCH 375/437] drivers/vfio: " Jens Axboe
2024-04-11 15:18 ` [PATCH 376/437] drivers/fsi: " Jens Axboe
2024-04-11 15:18 ` [PATCH 377/437] iio: " Jens Axboe
2024-04-11 15:18 ` [PATCH 378/437] iio: adis16400: " Jens Axboe
2024-04-11 15:18 ` [PATCH 379/437] iio: adis16475: " Jens Axboe
2024-04-11 15:18 ` [PATCH 380/437] iio: adis16480: " Jens Axboe
2024-04-11 15:18 ` [PATCH 381/437] iio: bno055: " Jens Axboe
2024-04-11 15:18 ` [PATCH 382/437] iio: gyro/adis16136: " Jens Axboe
2024-04-11 15:18 ` [PATCH 383/437] intel_th: " Jens Axboe
2024-04-11 15:18 ` [PATCH 384/437] stm class: " Jens Axboe
2024-04-11 15:18 ` [PATCH 385/437] speakup: " Jens Axboe
2024-04-11 15:18 ` [PATCH 386/437] EDAC/versal: " Jens Axboe
2024-04-11 15:18 ` [PATCH 387/437] EDAC/xgene: " Jens Axboe
2024-04-11 15:18 ` [PATCH 388/437] EDAC/zynqmp: " Jens Axboe
2024-04-11 15:18 ` [PATCH 389/437] EDAC/thunderx: " Jens Axboe
2024-04-11 15:18 ` [PATCH 390/437] EDAC/npcm: " Jens Axboe
2024-04-11 15:18 ` [PATCH 391/437] EDAC/i5100: " Jens Axboe
2024-04-11 15:18 ` [PATCH 392/437] EDAC/altera: " Jens Axboe
2024-04-11 15:18 ` [PATCH 393/437] EDAC/debugfs: " Jens Axboe
2024-04-11 15:18 ` [PATCH 394/437] drivers/hsi: " Jens Axboe
2024-04-11 15:18 ` [PATCH 395/437] hsi: clients: cmt_speech: " Jens Axboe
2024-04-11 15:18 ` [PATCH 396/437] macintosh: adb: " Jens Axboe
2024-04-11 15:18 ` [PATCH 397/437] macintosh: ans-lcd: " Jens Axboe
2024-04-11 15:18 ` [PATCH 398/437] macintosh: smu: " Jens Axboe
2024-04-11 15:18 ` [PATCH 399/437] macintosh: via-pmu: " Jens Axboe
2024-04-11 15:19 ` [PATCH 400/437] drivers/extcon: " Jens Axboe
2024-04-11 15:19 ` [PATCH 401/437] drivers/gnss: " Jens Axboe
2024-04-11 15:19 ` [PATCH 402/437] drivers/rapidio: " Jens Axboe
2024-04-11 15:19 ` [PATCH 403/437] drivers/media/platform/mediatek/vcodec: " Jens Axboe
2024-04-11 15:19 ` [PATCH 404/437] infiniband/core: " Jens Axboe
2024-04-11 15:19 ` [PATCH 405/437] infiniband/cxgb4: " Jens Axboe
2024-04-11 15:19 ` [PATCH 406/437] infiniband/hfi1: " Jens Axboe
2024-04-11 15:19 ` [PATCH 407/437] infiniband/mlx5: " Jens Axboe
2024-04-11 15:19 ` [PATCH 408/437] infiniband/ocrdma: " Jens Axboe
2024-04-11 15:19 ` [PATCH 409/437] infiniband/qib: " Jens Axboe
2024-04-11 15:19 ` [PATCH 410/437] infiniband/hns: " Jens Axboe
2024-04-11 15:19 ` [PATCH 411/437] infiniband/usnic: " Jens Axboe
2024-04-11 15:19 ` [PATCH 412/437] hv: " Jens Axboe
2024-04-11 15:19 ` [PATCH 413/437] media/rc: " Jens Axboe
2024-05-04 12:31   ` Mauro Carvalho Chehab
2024-05-05 13:16     ` Jens Axboe
2024-04-11 15:19 ` [PATCH 414/437] media/dvb-core: " Jens Axboe
2024-04-11 15:19 ` [PATCH 415/437] media/common: " Jens Axboe
2024-04-11 15:19 ` [PATCH 416/437] media/platform: amphion: " Jens Axboe
2024-04-11 15:19 ` [PATCH 417/437] media/platform: mediatek: " Jens Axboe
2024-04-11 15:19 ` [PATCH 418/437] media: cec: " Jens Axboe
2024-04-11 15:19 ` [PATCH 419/437] media: media-devnode: " Jens Axboe
2024-04-11 15:19 ` [PATCH 420/437] media: bt8xx: " Jens Axboe
2024-04-11 15:19 ` [PATCH 421/437] media: dbbridge: " Jens Axboe
2024-04-11 15:19 ` [PATCH 422/437] media: ngene: " Jens Axboe
2024-04-11 15:19 ` [PATCH 423/437] media: radio-si476x: " Jens Axboe
2024-04-11 15:19 ` [PATCH 424/437] media: usb: uvc: " Jens Axboe
2024-04-11 15:19 ` [PATCH 425/437] media: v4l2-dev: " Jens Axboe
2024-04-11 15:19 ` [PATCH 426/437] firmware: xilinx: " Jens Axboe
2024-04-11 15:19 ` [PATCH 427/437] hwtracing: coresight: " Jens Axboe
2024-04-11 15:19 ` [PATCH 428/437] sbus: oradax: " Jens Axboe
2024-04-11 15:19 ` [PATCH 429/437] sbus: envctrl: " Jens Axboe
2024-04-11 15:19 ` [PATCH 430/437] sbus: flash: " Jens Axboe
2024-04-11 15:19 ` [PATCH 431/437] pci: hotplug: cpqphp: " Jens Axboe
2024-04-11 15:19 ` [PATCH 432/437] seq_file: switch to using ->read_iter() Jens Axboe
2024-04-11 15:19 ` [PATCH 433/437] fs/debugfs: remove (now) dead non-iterator debugfs_attr functions Jens Axboe
2024-04-11 15:19 ` [PATCH 434/437] lib/string_helpers: kill parse_int_array_user() Jens Axboe
2024-04-11 15:19 ` [PATCH 435/437] fs: kill off non-iter variants of simple_attr_{read,write}* Jens Axboe
2024-04-11 15:19 ` [PATCH 436/437] kstrtox: remove (now) dead helpers Jens Axboe
2024-04-11 15:19 ` [PATCH 437/437] REMOVE ->read() and ->write() Jens Axboe
2024-04-12  4:29 ` [PATCHSET RFC 0/437] Kill off old fops " Al Viro
2024-04-12  4:37   ` Al Viro
2024-04-12 13:58   ` Jens Axboe
2024-04-13  4:15     ` Al Viro
2024-04-13 15:37       ` Jens Axboe

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240411153126.16201-81-axboe@kernel.dk \
    --to=axboe@kernel.dk \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox