All of lore.kernel.org
 help / color / mirror / Atom feed
From: Christian Brauner <brauner@kernel.org>
To: linux-fsdevel@vger.kernel.org
Cc: Linus Torvalds <torvalds@linux-foundation.org>,
	Jann Horn <jannh@google.com>, Josef Bacik <josef@toxicpanda.com>,
	Chris Mason <mason@kernel.org>, Jeff Layton <jlayton@kernel.org>,
	NeilBrown <neil@brown.name>, Eric Dumazet <edumazet@kernel.org>,
	Thomas Gleixner <tglx@kernel.org>,
	Al Viro <viro@zeniv.linux.org.uk>,
	Jonathan Corbet <corbet@lwn.net>, Christoph Hellwig <hch@lst.de>,
	Greg Kroah-Hartman <gregkh@suse.de>,
	Joel Granados <joel.granados@kernel.org>,
	Kees Cook <kees@kernel.org>, Jan Kara <jack@suse.cz>,
	Jan Kara <jack@suse.com>,
	linux-kernel@vger.kernel.org, linux-nfs@vger.kernel.org,
	linux-acpi@vger.kernel.org, linux-kselftest@vger.kernel.org,
	linux-s390@vger.kernel.org, linux-scsi@vger.kernel.org,
	linux-um@lists.infradead.org, linux-wireless@vger.kernel.org,
	linuxppc-dev@lists.ozlabs.org, netdev@vger.kernel.org,
	ntfs3@lists.linux.dev, platform-driver-x86@vger.kernel.org,
	coreteam@netfilter.org, kexec@lists.infradead.org,
	linux-pci@vger.kernel.org, linux-sound@vger.kernel.org,
	netfilter-devel@vger.kernel.org, dri-devel@lists.freedesktop.org,
	ibm-acpi-devel@lists.sourceforge.net,
	jfs-discussion@lists.sourceforge.net,
	linux-alpha@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org, linux-cifs@vger.kernel.org,
	linux-fbdev@vger.kernel.org, linux-hwmon@vger.kernel.org,
	linux-mm@kvack.org, linux-sh@vger.kernel.org,
	linux-usb@vger.kernel.org, samba-technical@lists.samba.org,
	sparclinux@vger.kernel.org, linux-m68k@lists.linux-m68k.org,
	linux-doc@vger.kernel.org, linux-serial@vger.kernel.org,
	linux-atm-general@lists.sourceforge.net,
	Takashi Iwai <tiwai@suse.de>,
	linux-input@vger.kernel.org, linux-raid@vger.kernel.org,
	linux-ext4@vger.kernel.org, linux-modules@vger.kernel.org,
	linux-debuggers@vger.kernel.org,
	"Christian Brauner (Amutable)" <brauner@kernel.org>,
	Chuck Lever <cel@kernel.org>
Subject: [PATCH RESEND v2 07/23] proc: let procfs own the seq_file of seq_file entries
Date: Wed,  4 Nov 2026 20:30:58 +0100	[thread overview]
Message-ID: <20261104-work-procfs-core-v2-7-76ace653a773@kernel.org> (raw)
In-Reply-To: <20261104-work-procfs-core-v2-0-76ace653a773@kernel.org>

remove_proc_entry() waits until every call into the entry has returned.
For a seq_file entry that's all of seq_read_iter(), including the copy
to userspace. A page fault in that copy can be made to take as long as
the reader wants, e.g. with userfaultfd or by punching holes into a
memfd over and over. And callers of remove_proc_entry() like to hold
locks while they wait. xt_hashlimit holds hashlimit_mutex, which all
network namespaces share, and addrconf holds RTNL.

But the entry's code only runs between ->start() and ->stop() and the
copies to userspace happen outside of that. So let procfs own the
seq_file the way kernfs does. An entry declares its seq_operations, or
just a show function, and the size of its private state in struct
proc_ops. procfs then opens the seq_file with seq_operations it builds
for the entry when it is registered: the entry's own ->next() and
->show() with a ->start() and ->stop() of procfs around them that pin
the entry and unpin it again. Nothing of procfs runs between the
records that way. procfs reads and seeks through seq_file directly. The
copies to userspace happen with the entry unpinned.

That changes who owns the seq_file. remove_proc_entry() can now finish
while a reader is still copying out of the buffer, so the seq_file
can't go away with the entry. procfs frees it once the file is
released. ->proc_open() finds the seq_file in ->private_data and sets
up whatever the entry needs and ->proc_release() releases just that. It
still runs when the entry is removed, or when the file is closed before
that.

Since procfs reads these entries through seq_read_iter() itself they
all have ->splice_read() now, so sendfile(), splice(), aio, the RWF
flags and kernel_read() work on them, and readv() is one read instead
of one per segment. Note that a removed entry still hands out what it
had already formatted and then answers -EIO to reads, and to seeks that
have to walk the records. Seeking it failed with -EINVAL right away
before.

For an entry that only has a show function the seq_operations do what
single_open() does, like kernfs_seq_start(). If the entry can't be
pinned ->start() fails with -EIO and switches the seq_file to
seq_operations whose ->stop() doesn't unpin, so the entry's own
->start() and ->next() can return any error they like. An entry that
declares a seq_file and also a read or seek method of its own, or one
that releases the seq_file with seq_release() itself, doesn't make
sense, procfs reads, seeks and releases the seq_file itself, so
registering it fails.

No users yet.

Suggested-by: Jann Horn <jannh@google.com>
Signed-off-by: Christian Brauner (Amutable) <brauner@kernel.org>
---
 fs/proc/generic.c       |  65 ++++++++++++++++++---
 fs/proc/inode.c         | 146 +++++++++++++++++++++++++++++++++++++++++++-----
 fs/proc/internal.h      |  21 +++++++
 include/linux/proc_fs.h |  22 +++++++-
 4 files changed, 231 insertions(+), 23 deletions(-)

diff --git a/fs/proc/generic.c b/fs/proc/generic.c
index 84f064a651e4..59b89e251ba3 100644
--- a/fs/proc/generic.c
+++ b/fs/proc/generic.c
@@ -41,6 +41,7 @@ void pde_free(struct proc_dir_entry *pde)
 	if (pde->name != pde->inline_name)
 		kfree(pde->name);
 	kfree(pde->open);
+	kfree(pde->seq_direct);
 	kmem_cache_free(proc_dir_entry_cache, pde);
 }
 
@@ -431,19 +432,41 @@ static const struct inode_operations proc_dir_inode_operations = {
 	.setattr	= proc_setattr,
 };
 
-static void pde_set_flags(struct proc_dir_entry *pde)
+static int pde_set_flags(struct proc_dir_entry *pde)
 {
 	const struct proc_ops *proc_ops = pde->proc_ops;
 
 	if (!proc_ops)
-		return;
+		return 0;
 
 	if (proc_ops->proc_flags & PROC_ENTRY_PERMANENT)
 		pde->flags |= PROC_ENTRY_PERMANENT;
-	if (proc_ops->proc_read_iter)
-		pde->flags |= PROC_ENTRY_proc_read_iter;
-	if (proc_ops->proc_lseek)
+	if (proc_ops->proc_seq_ops) {
+		pde->seq_ops = proc_ops->proc_seq_ops;
+		pde->state_size = proc_ops->proc_state_size;
+		pde->flags |= PROC_ENTRY_proc_seq_ops;
+	} else if (proc_ops->proc_show) {
+		pde->single_show = proc_ops->proc_show;
+		pde->flags |= PROC_ENTRY_proc_show;
+	}
+	if (pde_is_seq_file(pde)) {
+		/* procfs reads and seeks through the seq_file itself */
+		if (WARN_ON_ONCE(proc_ops->proc_read || proc_ops->proc_read_iter ||
+				 proc_ops->proc_lseek))
+			return -EINVAL;
+		/* and frees it, see pde_seq_release() */
+		if (WARN_ON_ONCE(proc_ops->proc_release == seq_release ||
+				 proc_ops->proc_release == seq_release_private ||
+				 proc_ops->proc_release == single_release))
+			return -EINVAL;
 		pde->flags |= PROC_ENTRY_proc_lseek;
+	} else {
+		if (proc_ops->proc_read_iter)
+			pde->flags |= PROC_ENTRY_proc_read_iter;
+		if (proc_ops->proc_lseek)
+			pde->flags |= PROC_ENTRY_proc_lseek;
+	}
+	return 0;
 }
 
 /*
@@ -458,6 +481,32 @@ static bool pde_needs_open_node(const struct proc_dir_entry *pde)
 	return pde->proc_ops->proc_release;
 }
 
+/*
+ * The seq_operations of a seq_file entry: procfs's start and stop around the
+ * entry's own next and show, see pde_seq_start().
+ */
+static int pde_init_seq_direct(struct proc_dir_entry *pde)
+{
+	struct seq_operations *ops;
+
+	if (!pde_is_seq_file(pde))
+		return 0;
+	ops = kmalloc(sizeof(*ops), GFP_KERNEL);
+	if (!ops)
+		return -ENOMEM;
+	ops->start = pde_seq_start;
+	ops->stop = pde_seq_stop;
+	if (pde_has_proc_seq_ops(pde)) {
+		ops->next = pde->seq_ops->next;
+		ops->show = pde->seq_ops->show;
+	} else {
+		ops->next = pde_single_next;
+		ops->show = pde->single_show;
+	}
+	pde->seq_direct = ops;
+	return 0;
+}
+
 /* returns the registered entry, or frees dp and returns NULL on failure */
 struct proc_dir_entry *proc_register(struct proc_dir_entry *dir,
 		struct proc_dir_entry *dp)
@@ -465,14 +514,16 @@ struct proc_dir_entry *proc_register(struct proc_dir_entry *dir,
 	if (proc_alloc_inum(&dp->low_ino))
 		goto out_free_entry;
 
-	if (!S_ISDIR(dp->mode))
-		pde_set_flags(dp);
+	if (!S_ISDIR(dp->mode) && pde_set_flags(dp))
+		goto out_free_inum;
 	if (pde_needs_open_node(dp)) {
 		dp->open = kzalloc(sizeof(*dp->open), GFP_KERNEL);
 		if (!dp->open)
 			goto out_free_inum;
 		INIT_LIST_HEAD(&dp->open->files);
 	}
+	if (pde_init_seq_direct(dp))
+		goto out_free_inum;
 
 	write_lock(&proc_subdir_lock);
 	dp->parent = dir;
diff --git a/fs/proc/inode.c b/fs/proc/inode.c
index 56eab69e1dcc..d51ab7548b11 100644
--- a/fs/proc/inode.c
+++ b/fs/proc/inode.c
@@ -219,6 +219,87 @@ static void pde_unpin(struct proc_dir_entry *pde)
 		unuse_pde(pde);
 }
 
+/*
+ * procfs owns the seq_file of a seq_file entry and only calls into the entry
+ * with it pinned. A read copies to userspace without the pin, so a reader
+ * that faults on its buffer doesn't hold up remove_proc_entry().
+ *
+ * The seq_operations the seq_file runs are the entry's own next and show
+ * with procfs's start and stop around them, see pde_init_seq_direct(): the
+ * pin is taken in start and dropped in stop, and nothing sits between the
+ * seq_file and the entry's per record code. An entry that only has a show
+ * function is iterated like single_open() does it.
+ *
+ * If the pin fails start switches the seq_file to seq_operations whose stop
+ * doesn't unpin, so that the entry's own start or next can return any error
+ * they like, ERR_PTR(-EIO) included.
+ */
+static struct proc_dir_entry *seq_pde(struct seq_file *m)
+{
+	return PDE(file_inode(m->file));
+}
+
+static void pde_seq_stop_unpinned(struct seq_file *m, void *v)
+{
+	m->op = seq_pde(m)->seq_direct;
+}
+
+static const struct seq_operations pde_seq_ops_unpinned = {
+	.start	= pde_seq_start,
+	.stop	= pde_seq_stop_unpinned,
+};
+
+void *pde_seq_start(struct seq_file *m, loff_t *pos)
+{
+	struct proc_dir_entry *pde = seq_pde(m);
+
+	if (!pde_pin(pde)) {
+		m->op = &pde_seq_ops_unpinned;
+		return ERR_PTR(-EIO);
+	}
+	m->op = pde->seq_direct;
+	if (!pde_has_proc_seq_ops(pde))
+		return single_start(m, pos);
+	return pde->seq_ops->start(m, pos);
+}
+
+void pde_seq_stop(struct seq_file *m, void *v)
+{
+	struct proc_dir_entry *pde = seq_pde(m);
+
+	if (pde_has_proc_seq_ops(pde))
+		pde->seq_ops->stop(m, v);
+	pde_unpin(pde);
+}
+
+/* what single_open() iterates with, seq_file keeps its own private */
+void *pde_single_next(struct seq_file *m, void *v, loff_t *pos)
+{
+	++*pos;
+	return NULL;
+}
+
+static int pde_seq_open(struct proc_dir_entry *pde, struct file *file)
+{
+	int err;
+
+	if (pde->state_size)
+		return seq_open_private(file, pde->seq_direct, pde->state_size);
+	err = seq_open(file, pde->seq_direct);
+	if (!err && pde_has_proc_show(pde))
+		((struct seq_file *)file->private_data)->private = pde->data;
+	return err;
+}
+
+static void pde_seq_release(struct proc_dir_entry *pde, struct inode *inode,
+			    struct file *file)
+{
+	if (pde->state_size)
+		seq_release_private(inode, file);
+	else
+		seq_release(inode, file);
+}
+
 /*
  * At most 2 contexts can enter this function: the one doing the last
  * close on the descriptor and whoever is deleting PDE itself.
@@ -474,22 +555,35 @@ static unsigned int proc_reg_mmap_capabilities(struct file *file)
 }
 #endif
 
+static int pde_open(struct proc_dir_entry *pde, struct inode *inode,
+		    struct file *file)
+{
+	const auto open = pde->proc_ops->proc_open;
+	int rv;
+
+	if (!pde_is_seq_file(pde))
+		return open ? open(inode, file) : 0;
+
+	rv = pde_seq_open(pde, file);
+	if (rv || !open)
+		return rv;
+	rv = open(inode, file);
+	if (rv)
+		pde_seq_release(pde, inode, file);
+	return rv;
+}
+
 static int proc_reg_open(struct inode *inode, struct file *file)
 {
 	struct proc_dir_entry *pde = PDE(inode);
 	int rv = 0;
-	typeof_member(struct proc_ops, proc_open) open;
 	struct pde_opener *pdeo;
 
 	if (!pde_has_proc_lseek(pde))
 		file->f_mode &= ~FMODE_LSEEK;
 
-	if (pde_is_permanent(pde)) {
-		open = pde->proc_ops->proc_open;
-		if (open)
-			rv = open(inode, file);
-		return rv;
-	}
+	if (pde_is_permanent(pde))
+		return pde_open(pde, inode, file);
 
 	/*
 	 * Ensure that
@@ -514,9 +608,7 @@ static int proc_reg_open(struct inode *inode, struct file *file)
 		}
 	}
 
-	open = pde->proc_ops->proc_open;
-	if (open)
-		rv = open(inode, file);
+	rv = pde_open(pde, inode, file);
 
 	if (pde->open) {
 		if (rv == 0) {
@@ -544,23 +636,45 @@ static int proc_reg_release(struct inode *inode, struct file *file)
 	if (pde_is_permanent(pde)) {
 		const auto release = pde->proc_ops->proc_release;
 		if (release)
-			return release(inode, file);
-		return 0;
+			release(inode, file);
+		goto out;
 	}
 
 	if (!pde->open)
-		return 0;
+		goto out;
 	spin_lock(&pde->pde_unload_lock);
 	list_for_each_entry(pdeo, &pde->open->files, lh) {
 		if (pdeo->file == file) {
 			close_pdeo(pde, pdeo);
-			return 0;
+			goto out;
 		}
 	}
 	spin_unlock(&pde->pde_unload_lock);
+out:
+	/* ->proc_release() has run, here or in remove_proc_entry() */
+	if (pde_is_seq_file(pde))
+		pde_seq_release(pde, inode, file);
 	return 0;
 }
 
+/* For seq_file entries, see pde_seq_ops. */
+static const struct file_operations proc_seq_file_ops = {
+	.llseek		= seq_lseek,
+	.read_iter	= seq_read_iter,
+	.splice_read	= copy_splice_read,
+	.write		= proc_reg_write,
+	.poll		= proc_reg_poll,
+	.unlocked_ioctl	= proc_reg_unlocked_ioctl,
+	.compat_ioctl	= proc_reg_compat_ioctl,
+	.mmap		= proc_reg_mmap,
+	.get_unmapped_area = proc_reg_get_unmapped_area,
+#ifndef CONFIG_MMU
+	.mmap_capabilities = proc_reg_mmap_capabilities,
+#endif
+	.open		= proc_reg_open,
+	.release	= proc_reg_release,
+};
+
 static const struct file_operations proc_reg_file_ops = {
 	.llseek		= proc_reg_llseek,
 	.read		= proc_reg_read,
@@ -644,7 +758,9 @@ struct inode *proc_get_inode(struct super_block *sb, struct proc_dir_entry *de)
 
 	if (S_ISREG(inode->i_mode)) {
 		inode->i_op = de->proc_iops;
-		if (pde_has_proc_read_iter(de))
+		if (pde_is_seq_file(de))
+			inode->i_fop = &proc_seq_file_ops;
+		else if (pde_has_proc_read_iter(de))
 			inode->i_fop = &proc_iter_file_ops;
 		else
 			inode->i_fop = &proc_reg_file_ops;
diff --git a/fs/proc/internal.h b/fs/proc/internal.h
index 7dea0237f08b..674e6b4ed21e 100644
--- a/fs/proc/internal.h
+++ b/fs/proc/internal.h
@@ -46,6 +46,8 @@ struct proc_dir_entry {
 	};
 	/* the open files procfs has to know, see struct pde_open_node */
 	struct pde_open_node *open;
+	/* the seq_operations of the seq_file, see pde_init_seq_direct() */
+	struct seq_operations *seq_direct;
 	proc_write_t write;
 	void *data;
 	unsigned int state_size;
@@ -97,6 +99,22 @@ static inline bool pde_has_proc_lseek(const struct proc_dir_entry *pde)
 	return pde->flags & PROC_ENTRY_proc_lseek;
 }
 
+static inline bool pde_has_proc_seq_ops(const struct proc_dir_entry *pde)
+{
+	return pde->flags & PROC_ENTRY_proc_seq_ops;
+}
+
+static inline bool pde_has_proc_show(const struct proc_dir_entry *pde)
+{
+	return pde->flags & PROC_ENTRY_proc_show;
+}
+
+/* procfs owns the seq_file, see pde_seq_start() */
+static inline bool pde_is_seq_file(const struct proc_dir_entry *pde)
+{
+	return pde_has_proc_seq_ops(pde) || pde_has_proc_show(pde);
+}
+
 extern struct kmem_cache *proc_dir_entry_cache;
 void pde_free(struct proc_dir_entry *pde);
 
@@ -343,6 +361,9 @@ void proc_init_kmemcache(void);
 void proc_invalidate_siblings_dcache(struct hlist_head *inodes, spinlock_t *lock);
 void set_proc_pid_nlink(void);
 extern struct inode *proc_get_inode(struct super_block *, struct proc_dir_entry *);
+void *pde_seq_start(struct seq_file *m, loff_t *pos);
+void pde_seq_stop(struct seq_file *m, void *v);
+void *pde_single_next(struct seq_file *m, void *v, loff_t *pos);
 extern void proc_entry_rundown(struct proc_dir_entry *);
 
 /*
diff --git a/include/linux/proc_fs.h b/include/linux/proc_fs.h
index 6ad5150020bf..ea55ed85a2d6 100644
--- a/include/linux/proc_fs.h
+++ b/include/linux/proc_fs.h
@@ -27,6 +27,8 @@ enum {
 
 	PROC_ENTRY_proc_read_iter	= 1U << 1,
 	PROC_ENTRY_proc_lseek		= 1U << 3,
+	PROC_ENTRY_proc_seq_ops		= 1U << 4,
+	PROC_ENTRY_proc_show		= 1U << 5,
 
 	PROC_ENTRY_FORCE_LOOKUP		= 1U << 7,
 };
@@ -37,7 +39,10 @@ struct proc_ops {
 	ssize_t	(*proc_read)(struct file *, char __user *, size_t, loff_t *);
 	ssize_t (*proc_read_iter)(struct kiocb *, struct iov_iter *);
 	ssize_t	(*proc_write)(struct file *, const char __user *, size_t, loff_t *);
-	/* mandatory unless nonseekable_open() or equivalent is used */
+	/*
+	 * mandatory unless nonseekable_open() or equivalent is used, procfs
+	 * seeks seq_file entries itself
+	 */
 	loff_t	(*proc_lseek)(struct file *, loff_t, int);
 	int	(*proc_release)(struct inode *, struct file *);
 	__poll_t (*proc_poll)(struct file *, struct poll_table_struct *);
@@ -47,6 +52,21 @@ struct proc_ops {
 #endif
 	int	(*proc_mmap)(struct file *, struct vm_area_struct *);
 	unsigned long (*proc_get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long);
+	/*
+	 * For seq_file entries procfs opens the seq_file, reads and seeks
+	 * through it and frees it once the file is released. ->proc_open()
+	 * finds the seq_file in ->private_data and ->proc_release() only
+	 * releases what ->proc_open() set up. It can run while a reader still
+	 * copies out of the seq_file, so it must leave that alone. procfs
+	 * allocates ->proc_state_size bytes of ->private state for
+	 * ->proc_seq_ops and points ->private at the entry's data for
+	 * ->proc_show(). Nothing that runs with the entry pinned may wait for
+	 * something a copy to or from userspace can hold, like the seq_file's
+	 * lock.
+	 */
+	const struct seq_operations *proc_seq_ops;
+	int	(*proc_show)(struct seq_file *, void *);
+	unsigned int proc_state_size;
 } __randomize_layout;
 
 /* definitions for hide_pid field */

-- 
2.53.0


  parent reply	other threads:[~2026-11-04 19:31 UTC|newest]

Thread overview: 329+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-11-04 19:04 [PATCH RESEND v2 0/7] proc: move procfs to what kernfs does Christian Brauner
2026-11-04 19:05 ` [PATCH RESEND v2 00/51] proc: fix a few old bugs in /proc handlers (Part 1/7) Christian Brauner
2026-11-04 19:06   ` [PATCH RESEND v2 01/51] alloc_tag: don't remove /proc/allocinfo under the codetag module lock Christian Brauner
2026-11-05  2:15     ` Hao Ge
2026-11-05  8:46       ` Christian Brauner
2026-11-05 11:35     ` kernel test robot
2026-11-05 19:28     ` sashiko-bot
2026-11-04 19:16   ` [PATCH RESEND v2 02/51] scsi: esas2r: don't copy kernel pointers out in EXPRESS_IOCTL_GET_MOD_INFO Christian Brauner
2026-11-05 19:28     ` sashiko-bot
2026-11-04 19:16   ` [PATCH RESEND v2 03/51] ALSA: cs46xx: hand the region to the region proc files Christian Brauner
2026-11-05 19:28     ` sashiko-bot
2026-11-04 19:16   ` [PATCH RESEND v2 04/51] PNP: isapnp: don't go on when isapnp_cfg_begin() fails Christian Brauner
2026-11-05 19:28     ` sashiko-bot
2026-11-04 19:17   ` [PATCH RESEND v2 05/51] xtensa: simdisk: remove the proc entry before the disk Christian Brauner
2026-11-05 19:28     ` sashiko-bot
2026-11-04 19:17   ` [PATCH RESEND v2 06/51] powerpc/pseries: put the node that the ofdt property commands look up Christian Brauner
2026-11-05 19:28     ` sashiko-bot
2026-11-04 19:17   ` [PATCH RESEND v2 07/51] lockd: don't hand out the terminator of nlm_end_grace Christian Brauner
2026-11-05 19:29     ` sashiko-bot
2026-11-04 19:17   ` [PATCH RESEND v2 08/51] powerpc/pseries/lparcfg: don't drop the last byte of a write Christian Brauner
2026-11-05 19:29     ` sashiko-bot
2026-11-04 19:18   ` [PATCH RESEND v2 09/51] profiling: report it when /proc/profile can't be created Christian Brauner
2026-11-05 19:29     ` sashiko-bot
2026-11-04 19:18   ` [PATCH RESEND v2 10/51] zorro: size the proc files like what they serve Christian Brauner
2026-11-05  9:44     ` Geert Uytterhoeven
2026-11-05 19:29     ` sashiko-bot
2026-11-04 19:18   ` [PATCH RESEND v2 11/51] sparc: led: consume the whole write Christian Brauner
2026-11-05 19:29     ` sashiko-bot
2026-11-04 19:18   ` [PATCH RESEND v2 12/51] powerpc/rtas: consume the whole write to /proc/powerpc/rtas/progress Christian Brauner
2026-11-05 19:29     ` sashiko-bot
2026-11-04 19:19   ` [PATCH RESEND v2 13/51] sched/psi: don't drop the last byte of a trigger write Christian Brauner
2026-11-05 19:29     ` sashiko-bot
2026-11-04 19:19   ` [PATCH RESEND v2 14/51] proc: sysctl: don't stop readdir at an entry that is being unregistered Christian Brauner
2026-11-05 19:29     ` sashiko-bot
2026-11-04 19:19   ` [PATCH RESEND v2 15/51] PCI/proc: don't truncate the position of config space accesses Christian Brauner
2026-11-05 19:29     ` sashiko-bot
2026-11-04 19:19   ` [PATCH RESEND v2 16/51] PNP: isapnp: don't read past the end of the buffer on a large pread() Christian Brauner
2026-11-05 19:29     ` sashiko-bot
2026-11-04 19:20   ` [PATCH RESEND v2 17/51] s390/dasd: don't look in front of the buffer on an empty write Christian Brauner
2026-11-05 19:29     ` sashiko-bot
2026-11-04 19:20   ` [PATCH RESEND v2 18/51] platform/x86: toshiba_acpi: reject malformed brightness and fan writes Christian Brauner
2026-11-05 19:29     ` sashiko-bot
2026-11-04 19:20   ` [PATCH RESEND v2 19/51] xtensa: simdisk: don't read the file name without the lock Christian Brauner
2026-11-05 19:29     ` sashiko-bot
2026-11-04 19:20   ` [PATCH RESEND v2 20/51] powerpc/rtas_flash: don't read past the validate message Christian Brauner
2026-11-05 19:29     ` sashiko-bot
2026-11-04 19:21   ` [PATCH RESEND v2 21/51] powerpc/rtasd: zero the error log buffer Christian Brauner
2026-11-05 19:29     ` sashiko-bot
2026-11-04 19:21   ` [PATCH RESEND v2 22/51] ALSA: info: don't write past the end of a data entry Christian Brauner
2026-11-05 19:29     ` sashiko-bot
2026-11-04 19:21   ` [PATCH RESEND v2 23/51] scsi: BusLogic: don't return 0 from writes to the proc file Christian Brauner
2026-11-05 19:29     ` sashiko-bot
2026-11-04 19:21   ` [PATCH RESEND v2 24/51] scsi: ips: " Christian Brauner
2026-11-05 19:29     ` sashiko-bot
2026-11-04 19:22   ` [PATCH RESEND v2 25/51] wifi: libipw: don't return 0 from writes to debug_level Christian Brauner
2026-11-05 19:29     ` sashiko-bot
2026-11-04 19:22   ` [PATCH RESEND v2 26/51] scsi: core: NUL-terminate what is written to the host proc files Christian Brauner
2026-11-05 19:29     ` sashiko-bot
2026-11-04 19:22   ` [PATCH RESEND v2 27/51] um: NUL-terminate what is written to /proc/exitcode Christian Brauner
2026-11-05 19:29     ` sashiko-bot
2026-11-04 19:22   ` [PATCH RESEND v2 28/51] ntfs3: don't warn when a huge label is written Christian Brauner
2026-11-05 19:29     ` sashiko-bot
2026-11-04 19:23   ` [PATCH RESEND v2 29/51] proc: don't walk through a non-directory when resolving a name Christian Brauner
2026-11-05 19:29     ` sashiko-bot
2026-11-04 19:23   ` [PATCH RESEND v2 30/51] net: pktgen: reject device names with a '/' Christian Brauner
2026-11-05 19:29     ` sashiko-bot
2026-11-04 19:23   ` [PATCH RESEND v2 31/51] proc: don't WARN about a name that is already registered Christian Brauner
2026-11-05 19:29     ` sashiko-bot
2026-11-04 19:23   ` [PATCH RESEND v2 32/51] proc: resume readdir after the last name it returned Christian Brauner
2026-11-05 19:29     ` sashiko-bot
2026-11-04 19:24   ` [PATCH RESEND v2 33/51] selftests/proc: check a /proc listing while entries come and go Christian Brauner
2026-11-05 19:29     ` sashiko-bot
2026-11-04 19:24   ` [PATCH RESEND v2 34/51] proc: let proc_remove() remove the entry it was given Christian Brauner
2026-11-05 19:29     ` sashiko-bot
2026-11-04 19:24   ` [PATCH RESEND v2 35/51] proc: warn about entries left in /proc/net of a dying namespace Christian Brauner
2026-11-05 19:29     ` sashiko-bot
2026-11-04 19:24   ` [PATCH RESEND v2 36/51] proc: don't let NOMMU map procfs files Christian Brauner
2026-11-05 19:30     ` sashiko-bot
2026-11-04 19:25   ` [PATCH RESEND v2 37/51] proc/vmcore: don't let vmcore_cleanup() run twice at once Christian Brauner
2026-11-05 19:30     ` sashiko-bot
2026-11-04 19:25   ` [PATCH RESEND v2 38/51] powerpc/crash_dump: check ioremap_cache() in copy_oldmem_page() Christian Brauner
2026-11-05 19:30     ` sashiko-bot
2026-11-04 19:25   ` [PATCH RESEND v2 39/51] powerpc/crash_dump: recover from a machine check " Christian Brauner
2026-11-05 19:30     ` sashiko-bot
2026-11-04 19:25   ` [PATCH RESEND v2 40/51] sunrpc: make queue_wait a global wait queue again Christian Brauner
2026-11-05 19:30     ` sashiko-bot
2026-11-04 19:26   ` [PATCH RESEND v2 41/51] scsi: esas2r: bound the lengths of the HBA, SMP and firmware ioctls Christian Brauner
2026-11-05 19:30     ` sashiko-bot
2026-11-04 19:26   ` [PATCH RESEND v2 42/51] powerpc/pseries: bound the lengths in the ofdt property parser Christian Brauner
2026-11-05 19:30     ` sashiko-bot
2026-11-04 19:26   ` [PATCH RESEND v2 43/51] powerpc/pseries/lparcfg: return h_get_ppp()'s status as a long Christian Brauner
2026-11-05 19:30     ` sashiko-bot
2026-11-04 19:26   ` [PATCH RESEND v2 44/51] proc: sysctl: resume readdir after the last name it returned Christian Brauner
2026-11-05  0:08     ` Jann Horn
2026-11-05  8:43       ` Christian Brauner
2026-11-05 16:26     ` Jann Horn
2026-11-05 19:30     ` sashiko-bot
2026-11-04 19:27   ` [PATCH RESEND v2 45/51] selftests/proc: check a sysctl listing while entries come and go Christian Brauner
2026-11-05 19:30     ` sashiko-bot
2026-11-04 19:27   ` [PATCH RESEND v2 46/51] proc: sysctl: copy to and from userspace without holding the table Christian Brauner
2026-11-05 19:30     ` sashiko-bot
2026-11-04 19:27   ` [PATCH RESEND v2 47/51] proc: sysctl: look at the table under sysctl_lock when creating an inode Christian Brauner
2026-11-05 19:30     ` sashiko-bot
2026-11-04 19:27   ` [PATCH RESEND v2 48/51] proc: sysctl: don't hold the tables while readdir copies to userspace Christian Brauner
2026-11-05 19:30     ` sashiko-bot
2026-11-04 19:27   ` [PATCH RESEND v2 49/51] selftests/proc: check that faulting sysctl accesses don't hold up removal Christian Brauner
2026-11-05 19:30     ` sashiko-bot
2026-11-04 19:28   ` [PATCH RESEND v2 50/51] proc: don't pin a symlink's entry while readlink() copies it out Christian Brauner
2026-11-05 19:30     ` sashiko-bot
2026-11-04 19:28   ` [PATCH RESEND v2 51/51] selftests/proc: check that a faulting readlink() doesn't hold up removal Christian Brauner
2026-11-05 19:30     ` sashiko-bot
2026-11-04 19:29 ` [PATCH RESEND v2 00/23] proc: let procfs own the data path (Part 2/7) Christian Brauner
2026-11-04 19:29   ` [PATCH RESEND v2 01/23] proc: drop the compat file operations Christian Brauner
2026-11-05 19:35     ` sashiko-bot
2026-11-04 19:29   ` [PATCH RESEND v2 02/23] proc: add pde_pin() and pde_unpin() Christian Brauner
2026-11-05 19:35     ` sashiko-bot
2026-11-04 19:30   ` [PATCH RESEND v2 03/23] proc: share the readdir cursor with sysctl Christian Brauner
2026-11-05 19:35     ` sashiko-bot
2026-11-04 19:30   ` [PATCH RESEND v2 04/23] proc: wait for the last user of an entry with wait_var_event() Christian Brauner
2026-11-05 19:35     ` sashiko-bot
2026-11-04 19:30   ` [PATCH RESEND v2 05/23] proc: keep the open files of an entry in an open node Christian Brauner
2026-11-05 19:35     ` sashiko-bot
2026-11-04 19:30   ` [PATCH RESEND v2 06/23] proc: make room for more entry flags Christian Brauner
2026-11-05 19:35     ` sashiko-bot
2026-11-04 19:30   ` Christian Brauner [this message]
2026-11-05 19:35     ` [PATCH RESEND v2 07/23] proc: let procfs own the seq_file of seq_file entries sashiko-bot
2026-11-04 19:31   ` [PATCH RESEND v2 08/23] proc: let procfs own the seq_file of proc_create_seq() and friends Christian Brauner
2026-11-05 19:35     ` sashiko-bot
2026-11-04 19:31   ` [PATCH RESEND v2 09/23] proc: let procfs own the seq_file of DEFINE_PROC_SHOW_ATTRIBUTE() files Christian Brauner
2026-11-05 19:35     ` sashiko-bot
2026-11-04 19:31   ` [PATCH RESEND v2 10/23] treewide: let procfs own the seq_file of simple proc entries Christian Brauner
2026-11-05 19:35     ` sashiko-bot
2026-11-04 19:31   ` [PATCH RESEND v2 11/23] selftests/proc: check that a faulting reader doesn't hold up removal Christian Brauner
2026-11-05 19:35     ` sashiko-bot
2026-11-04 19:32   ` [PATCH RESEND v2 12/23] seq_file: add seq_preallocate() Christian Brauner
2026-11-05 19:35     ` sashiko-bot
2026-11-04 19:32   ` [PATCH RESEND v2 13/23] proc: let procfs own the seq_file of /proc/stat Christian Brauner
2026-11-05 19:35     ` sashiko-bot
2026-11-04 19:32   ` [PATCH RESEND v2 14/23] proc: let procfs copy in writes before pinning the entry Christian Brauner
2026-11-05 10:07     ` Geert Uytterhoeven
2026-11-05 19:35     ` sashiko-bot
2026-11-04 19:32   ` [PATCH RESEND v2 15/23] proc: copy in writes to the network namespace entries before pinning Christian Brauner
2026-11-05 19:35     ` sashiko-bot
2026-11-04 19:33   ` [PATCH RESEND v2 16/23] proc: let procfs copy out reads that don't go through seq_file Christian Brauner
2026-11-05 10:08     ` Geert Uytterhoeven
2026-11-05 19:35     ` sashiko-bot
2026-11-04 19:33   ` [PATCH RESEND v2 17/23] fs/proc/vmcore: let procfs copy out reads Christian Brauner
2026-11-05 19:35     ` sashiko-bot
2026-11-04 19:33   ` [PATCH RESEND v2 18/23] proc: let procfs copy ioctl arguments in and out Christian Brauner
2026-11-05 19:35     ` sashiko-bot
2026-11-04 19:33   ` [PATCH RESEND v2 19/23] proc: pin the entry around the vm_operations of its mappings Christian Brauner
2026-11-05 19:35     ` sashiko-bot
2026-11-04 19:34   ` [PATCH RESEND v2 20/23] selftests/proc: check that a mapped entry can be removed Christian Brauner
2026-11-05 19:35     ` sashiko-bot
2026-11-04 19:34   ` [PATCH RESEND v2 21/23] proc: let lockdep check the pin Christian Brauner
2026-11-05 19:35     ` sashiko-bot
2026-11-04 19:34   ` [PATCH RESEND v2 22/23] proc: own the wait queue of an entry with a ->proc_poll() Christian Brauner
2026-11-05 19:35     ` sashiko-bot
2026-11-04 19:34   ` [PATCH RESEND v2 23/23] Documentation: seq_file: describe how a /proc file uses seq_file Christian Brauner
2026-11-05 19:36     ` sashiko-bot
2026-11-04 19:35 ` [PATCH RESEND v2 00/23] proc: convert the arch and platform entries (Part 3/7) Christian Brauner
2026-11-04 19:35   ` [PATCH RESEND v2 01/23] alpha: srm_env: let procfs copy in writes Christian Brauner
2026-11-04 19:36   ` [PATCH RESEND v2 02/23] ARM: alignment: " Christian Brauner
2026-11-04 19:36   ` [PATCH RESEND v2 03/23] ARM: atags: let procfs copy out reads of /proc/atags Christian Brauner
2026-11-04 19:36   ` [PATCH RESEND v2 04/23] m68k/bootinfo: let procfs copy out reads of /proc/bootinfo Christian Brauner
2026-11-05  9:54     ` Geert Uytterhoeven
2026-11-04 19:36   ` [PATCH RESEND v2 05/23] powerpc/rtas: let procfs copy in writes Christian Brauner
2026-11-04 19:37   ` [PATCH RESEND v2 06/23] powerpc/rtas: let procfs copy out reads Christian Brauner
2026-11-04 19:37   ` [PATCH RESEND v2 07/23] powerpc/rtasd: let procfs own the wait queue of the rtas error log Christian Brauner
2026-11-04 19:37   ` [PATCH RESEND v2 08/23] powerpc/pseries: let procfs copy in writes Christian Brauner
2026-11-04 19:37   ` [PATCH RESEND v2 09/23] powerpc/procfs: let procfs copy out reads of /proc/powerpc/systemcfg Christian Brauner
2026-11-04 19:38   ` [PATCH RESEND v2 10/23] sh: alignment: let procfs copy in writes Christian Brauner
2026-11-04 19:38   ` [PATCH RESEND v2 11/23] sparc: led: " Christian Brauner
2026-11-04 19:38   ` [PATCH RESEND v2 12/23] um: " Christian Brauner
2026-11-04 19:38   ` [PATCH RESEND v2 13/23] x86/mtrr: let procfs own the seq_file of /proc/mtrr Christian Brauner
2026-11-04 19:39   ` [PATCH RESEND v2 14/23] x86/mtrr: let procfs copy in writes to /proc/mtrr Christian Brauner
2026-11-04 19:39   ` [PATCH RESEND v2 15/23] x86/mtrr: let procfs copy the ioctl arguments of /proc/mtrr Christian Brauner
2026-11-04 19:39   ` [PATCH RESEND v2 16/23] xtensa: simdisk: let procfs copy in writes Christian Brauner
2026-11-04 19:39   ` [PATCH RESEND v2 17/23] xtensa: simdisk: let procfs copy out reads Christian Brauner
2026-11-04 19:40   ` [PATCH RESEND v2 18/23] ACPI: proc: let procfs copy in writes to /proc/acpi/wakeup Christian Brauner
2026-11-04 19:40   ` [PATCH RESEND v2 19/23] macintosh/via-pmu: let procfs copy in writes to the options file Christian Brauner
2026-11-04 19:40   ` [PATCH RESEND v2 20/23] platform/x86: thinkpad_acpi: let procfs copy in writes Christian Brauner
2026-11-04 19:40   ` [PATCH RESEND v2 21/23] platform/x86: toshiba_acpi: " Christian Brauner
2026-11-04 19:41   ` [PATCH RESEND v2 22/23] PNP: pnpbios: " Christian Brauner
2026-11-04 19:41   ` [PATCH RESEND v2 23/23] PNP: isapnp: let procfs copy out reads Christian Brauner
2026-11-04 19:42 ` [PATCH RESEND v2 00/26] proc: convert the driver entries (Part 4/7) Christian Brauner
2026-11-04 19:42   ` [PATCH RESEND v2 01/26] nubus: let procfs own the seq_file of the resource files Christian Brauner
2026-11-05 19:49     ` sashiko-bot
2026-11-04 19:42   ` [PATCH RESEND v2 02/26] zorro: let procfs copy out reads Christian Brauner
2026-11-05  9:55     ` Geert Uytterhoeven
2026-11-05 19:49     ` sashiko-bot
2026-11-04 19:42   ` [PATCH RESEND v2 03/26] PCI/proc: let procfs copy in config space writes Christian Brauner
2026-11-05 19:49     ` sashiko-bot
2026-11-04 19:43   ` [PATCH RESEND v2 04/26] PCI/proc: let procfs copy out config space reads Christian Brauner
2026-11-05 19:49     ` sashiko-bot
2026-11-04 19:43   ` [PATCH RESEND v2 05/26] PCI/proc: let procfs handle the ioctls Christian Brauner
2026-11-05 19:49     ` sashiko-bot
2026-11-04 19:43   ` [PATCH RESEND v2 06/26] md: let procfs own the seq_file of /proc/mdstat Christian Brauner
2026-11-05 19:49     ` sashiko-bot
2026-11-04 19:43   ` [PATCH RESEND v2 07/26] md: let procfs own the wait queue " Christian Brauner
2026-11-05 19:49     ` sashiko-bot
2026-11-04 19:44   ` [PATCH RESEND v2 08/26] s390/dasd: let procfs copy in writes to /proc/dasd/statistics Christian Brauner
2026-11-05 19:49     ` sashiko-bot
2026-11-04 19:44   ` [PATCH RESEND v2 09/26] s390/cio: let procfs copy in writes Christian Brauner
2026-11-05 19:49     ` sashiko-bot
2026-11-04 19:44   ` [PATCH RESEND v2 10/26] scsi: let procfs own the seq_file of the host files Christian Brauner
2026-11-05 19:49     ` sashiko-bot
2026-11-04 19:44   ` [PATCH RESEND v2 11/26] scsi: core: let procfs copy in writes Christian Brauner
2026-11-05 19:49     ` sashiko-bot
2026-11-04 19:45   ` [PATCH RESEND v2 12/26] selftests/proc: check that a faulting writer doesn't hold up removal Christian Brauner
2026-11-05 19:49     ` sashiko-bot
2026-11-04 19:45   ` [PATCH RESEND v2 13/26] scsi: sg: let procfs own the seq_file of allow_dio and def_reserved_size Christian Brauner
2026-11-05 19:49     ` sashiko-bot
2026-11-04 19:45   ` [PATCH RESEND v2 14/26] scsi: sg: let procfs copy in writes Christian Brauner
2026-11-05 19:49     ` sashiko-bot
2026-11-04 19:45   ` [PATCH RESEND v2 15/26] scsi: esas2r: let procfs copy the ioctl argument of the ATTONode file Christian Brauner
2026-11-05 19:49     ` sashiko-bot
2026-11-04 19:46   ` [PATCH RESEND v2 16/26] hwmon: (dell-smm) let procfs copy the i8k ioctl arguments Christian Brauner
2026-11-05 19:49     ` sashiko-bot
2026-11-04 19:46   ` [PATCH RESEND v2 17/26] fbdev: viafb: let procfs copy in writes Christian Brauner
2026-11-05 19:49     ` sashiko-bot
2026-11-04 19:46   ` [PATCH RESEND v2 18/26] usb: gadget: function: rndis: " Christian Brauner
2026-11-05 19:49     ` sashiko-bot
2026-11-04 19:46   ` [PATCH RESEND v2 19/26] wifi: ipw2x00: let procfs copy in writes to the debug level Christian Brauner
2026-11-05 19:49     ` sashiko-bot
2026-11-04 19:47   ` [PATCH RESEND v2 20/26] tty: sysrq: let procfs copy in writes to /proc/sysrq-trigger Christian Brauner
2026-11-05 19:49     ` sashiko-bot
2026-11-04 19:47   ` [PATCH RESEND v2 21/26] Input: let procfs own the wait queue of /proc/bus/input/devices Christian Brauner
2026-11-05 19:49     ` sashiko-bot
2026-11-04 19:47   ` [PATCH RESEND v2 22/26] ALSA: info: let procfs own the seq_file of text entries Christian Brauner
2026-11-05 19:49     ` sashiko-bot
2026-11-05 21:52     ` Jann Horn
2026-11-05 21:56       ` Jann Horn
2026-11-04 19:47   ` [PATCH RESEND v2 23/26] ALSA: info: let procfs copy in writes Christian Brauner
2026-11-05 19:49     ` sashiko-bot
2026-11-04 19:48   ` [PATCH RESEND v2 24/26] ALSA: info: let procfs copy out reads of data entries Christian Brauner
2026-11-05 19:49     ` sashiko-bot
2026-11-04 19:48   ` [PATCH RESEND v2 25/26] ALSA: info: drop the ioctl hook " Christian Brauner
2026-11-05 19:49     ` sashiko-bot
2026-11-04 19:48   ` [PATCH RESEND v2 26/26] ALSA: info: drop the poll_table from the info entry poll op Christian Brauner
2026-11-05 19:50     ` sashiko-bot
2026-11-04 19:49 ` [PATCH RESEND v2 00/30] proc: convert the fs, kernel and mm entries (Part 5/7) Christian Brauner
2026-11-04 19:49   ` [PATCH RESEND v2 01/30] jbd2: let procfs own the seq_file of the info file Christian Brauner
2026-11-05 19:57     ` sashiko-bot
2026-11-04 19:50   ` [PATCH RESEND v2 02/30] jfs: let procfs copy in writes to the loglevel file Christian Brauner
2026-11-05 19:57     ` sashiko-bot
2026-11-04 19:50   ` [PATCH RESEND v2 03/30] lockd: let procfs copy in writes to nlm_end_grace Christian Brauner
2026-11-05 19:57     ` sashiko-bot
2026-11-04 19:50   ` [PATCH RESEND v2 04/30] lockd: let procfs copy out reads of nlm_end_grace Christian Brauner
2026-11-05 19:57     ` sashiko-bot
2026-11-04 19:50   ` [PATCH RESEND v2 05/30] nfsd: factor out setting up the exports seq_file Christian Brauner
2026-11-05 19:57     ` sashiko-bot
2026-11-04 19:51   ` [PATCH RESEND v2 06/30] nfsd: let procfs own the seq_file of /proc/fs/nfs/exports Christian Brauner
2026-11-05 19:57     ` sashiko-bot
2026-11-04 19:51   ` [PATCH RESEND v2 07/30] ntfs3: let procfs copy in writes to the label file Christian Brauner
2026-11-05 19:57     ` sashiko-bot
2026-11-04 19:51   ` [PATCH RESEND v2 08/30] smb: client: let procfs own the seq_file of the smbdirect files Christian Brauner
2026-11-05 19:57     ` sashiko-bot
2026-11-04 19:51   ` [PATCH RESEND v2 09/30] smb: client: let procfs copy in writes Christian Brauner
2026-11-05 19:57     ` sashiko-bot
2026-11-04 19:52   ` [PATCH RESEND v2 10/30] genirq/proc: let procfs copy in the affinity masks Christian Brauner
2026-11-05 19:57     ` sashiko-bot
2026-11-04 19:52   ` [PATCH RESEND v2 11/30] latencytop: let procfs copy in writes to /proc/latency_stats Christian Brauner
2026-11-05 19:57     ` sashiko-bot
2026-11-04 19:52   ` [PATCH RESEND v2 12/30] locking/lockdep: let procfs own the seq_file of /proc/lock_stat Christian Brauner
2026-11-05 19:57     ` sashiko-bot
2026-11-04 19:52   ` [PATCH RESEND v2 13/30] locking/lockdep: let procfs copy in writes to /proc/lock_stat Christian Brauner
2026-11-05 19:57     ` sashiko-bot
2026-11-04 19:53   ` [PATCH RESEND v2 14/30] profiling: let procfs copy in writes to /proc/profile Christian Brauner
2026-11-05 19:57     ` sashiko-bot
2026-11-04 19:53   ` [PATCH RESEND v2 15/30] profiling: let procfs copy out reads of /proc/profile Christian Brauner
2026-11-05 19:57     ` sashiko-bot
2026-11-04 19:53   ` [PATCH RESEND v2 16/30] profiling: mark /proc/profile permanent Christian Brauner
2026-11-05 19:57     ` sashiko-bot
2026-11-04 19:53   ` [PATCH RESEND v2 17/30] sched/psi: let procfs own the seq_file of the pressure files Christian Brauner
2026-11-05 19:58     ` sashiko-bot
2026-11-04 19:54   ` [PATCH RESEND v2 18/30] sched/psi: let procfs copy in trigger writes Christian Brauner
2026-11-05 19:58     ` sashiko-bot
2026-11-04 19:54   ` [PATCH RESEND v2 19/30] sched/psi: mark the pressure files permanent Christian Brauner
2026-11-05 19:58     ` sashiko-bot
2026-11-04 19:54   ` [PATCH RESEND v2 20/30] sched/psi: let procfs own the wait queue of the pressure files Christian Brauner
2026-11-05 19:58     ` sashiko-bot
2026-11-04 19:54   ` [PATCH RESEND v2 21/30] kallsyms: let procfs own the seq_file of /proc/kallsyms Christian Brauner
2026-11-05 19:58     ` sashiko-bot
2026-11-04 19:55   ` [PATCH RESEND v2 22/30] module: procfs: let procfs own the seq_file of /proc/modules Christian Brauner
2026-11-05 19:58     ` sashiko-bot
2026-11-04 19:55   ` [PATCH RESEND v2 23/30] dyndbg: let procfs copy in writes to /proc/dynamic_debug/control Christian Brauner
2026-11-05 19:58     ` sashiko-bot
2026-11-04 19:55   ` [PATCH RESEND v2 24/30] ipc: let procfs own the seq_file of the sysvipc files Christian Brauner
2026-11-05 19:58     ` sashiko-bot
2026-11-04 19:55   ` [PATCH RESEND v2 25/30] alloc_tag: let procfs own the seq_file of /proc/allocinfo Christian Brauner
2026-11-05 19:58     ` sashiko-bot
2026-11-04 19:56   ` [PATCH RESEND v2 26/30] alloc_tag: let procfs copy the ioctl arguments " Christian Brauner
2026-11-05 19:58     ` sashiko-bot
2026-11-04 19:56   ` [PATCH RESEND v2 27/30] mm/swapfile: let procfs own the seq_file of /proc/swaps Christian Brauner
2026-11-05 19:58     ` sashiko-bot
2026-11-04 19:56   ` [PATCH RESEND v2 28/30] mm/swapfile: let procfs own the wait queue " Christian Brauner
2026-11-05 19:58     ` sashiko-bot
2026-11-04 19:56   ` [PATCH RESEND v2 29/30] kernel/configs: let procfs copy out reads of /proc/config.gz Christian Brauner
2026-11-05 19:58     ` sashiko-bot
2026-11-04 19:57   ` [PATCH RESEND v2 30/30] selftests/proc: check that unloading configs doesn't wait for a reader Christian Brauner
2026-11-05 19:58     ` sashiko-bot
2026-11-04 20:05   ` [PATCH RESEND v2 00/30] proc: convert the fs, kernel and mm entries (Part 5/7) Linus Torvalds
2026-11-04 22:45     ` Christian Brauner
2026-11-04 23:34       ` Christian Brauner
2026-11-04 19:57 ` [PATCH RESEND v2 00/13] proc: convert the net entries and the kfifo samples (Part 6/7) Christian Brauner
2026-11-04 19:57   ` [PATCH RESEND v2 01/13] atm: let procfs copy out reads of the device files Christian Brauner
2026-11-04 19:58   ` [PATCH RESEND v2 02/13] l2tp: let procfs own the seq_file of /proc/net/pppol2tp Christian Brauner
2026-11-04 19:58   ` [PATCH RESEND v2 03/13] net: pktgen: let procfs copy in commands Christian Brauner
2026-11-04 19:58   ` [PATCH RESEND v2 04/13] netfilter: xt_recent: let procfs own the seq_file Christian Brauner
2026-11-04 19:58   ` [PATCH RESEND v2 05/13] netfilter: xt_recent: let procfs copy in writes Christian Brauner
2026-11-04 19:59   ` [PATCH RESEND v2 06/13] SUNRPC: let procfs own the seq_file of the cache content file Christian Brauner
2026-11-04 19:59   ` [PATCH RESEND v2 07/13] SUNRPC: let procfs copy in writes Christian Brauner
2026-11-04 19:59   ` [PATCH RESEND v2 08/13] SUNRPC: let procfs copy out reads Christian Brauner
2026-11-04 21:13   ` [PATCH RESEND v2 09/13] SUNRPC: drop the ioctl of the procfs channel files Christian Brauner
2026-11-04 21:13   ` [PATCH RESEND v2 10/13] SUNRPC: let procfs own the wait queue " Christian Brauner
2026-11-04 21:13   ` [PATCH RESEND v2 11/13] samples/kfifo: let procfs copy in writes Christian Brauner
2026-11-04 21:14   ` [PATCH RESEND v2 12/13] samples/kfifo: let procfs copy out reads Christian Brauner
2026-11-04 21:14   ` [PATCH RESEND v2 13/13] selftests/proc: check that removing a polled entry wakes its pollers Christian Brauner
2026-11-04 21:15 ` [PATCH RESEND v2 0/6] proc: drop the __user methods (Part 7/7) Christian Brauner
2026-11-04 21:15   ` [PATCH RESEND v2 1/6] proc: drop ->proc_write() Christian Brauner
2026-11-04 21:15   ` [PATCH RESEND v2 2/6] proc: drop ->proc_ioctl() and ->proc_compat_ioctl() Christian Brauner
2026-11-04 21:16   ` [PATCH RESEND v2 3/6] proc: give kcore, kmsg and the kpage files their own file_operations Christian Brauner
2026-11-04 21:16   ` [PATCH RESEND v2 4/6] proc: drop ->proc_read() and ->proc_read_iter() Christian Brauner
2026-11-04 21:16   ` [PATCH RESEND v2 5/6] proc: drop the _buf suffix from the new methods Christian Brauner
2026-11-05  9:56     ` Geert Uytterhoeven
2026-11-04 21:16   ` [PATCH RESEND v2 6/6] proc: drop the poll_table from ->proc_poll() Christian Brauner
2026-11-05 15:59 ` [PATCH RESEND v2 0/7] proc: move procfs to what kernfs does Josef Bacik
2026-11-05 16:34   ` Christian Brauner

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=20261104-work-procfs-core-v2-7-76ace653a773@kernel.org \
    --to=brauner@kernel.org \
    --cc=cel@kernel.org \
    --cc=corbet@lwn.net \
    --cc=coreteam@netfilter.org \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=edumazet@kernel.org \
    --cc=gregkh@suse.de \
    --cc=hch@lst.de \
    --cc=ibm-acpi-devel@lists.sourceforge.net \
    --cc=jack@suse.com \
    --cc=jack@suse.cz \
    --cc=jannh@google.com \
    --cc=jfs-discussion@lists.sourceforge.net \
    --cc=jlayton@kernel.org \
    --cc=joel.granados@kernel.org \
    --cc=josef@toxicpanda.com \
    --cc=kees@kernel.org \
    --cc=kexec@lists.infradead.org \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-alpha@vger.kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-atm-general@lists.sourceforge.net \
    --cc=linux-cifs@vger.kernel.org \
    --cc=linux-debuggers@vger.kernel.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-ext4@vger.kernel.org \
    --cc=linux-fbdev@vger.kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-hwmon@vger.kernel.org \
    --cc=linux-input@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=linux-m68k@lists.linux-m68k.org \
    --cc=linux-mm@kvack.org \
    --cc=linux-modules@vger.kernel.org \
    --cc=linux-nfs@vger.kernel.org \
    --cc=linux-pci@vger.kernel.org \
    --cc=linux-raid@vger.kernel.org \
    --cc=linux-s390@vger.kernel.org \
    --cc=linux-scsi@vger.kernel.org \
    --cc=linux-serial@vger.kernel.org \
    --cc=linux-sh@vger.kernel.org \
    --cc=linux-sound@vger.kernel.org \
    --cc=linux-um@lists.infradead.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=linux-wireless@vger.kernel.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=mason@kernel.org \
    --cc=neil@brown.name \
    --cc=netdev@vger.kernel.org \
    --cc=netfilter-devel@vger.kernel.org \
    --cc=ntfs3@lists.linux.dev \
    --cc=platform-driver-x86@vger.kernel.org \
    --cc=samba-technical@lists.samba.org \
    --cc=sparclinux@vger.kernel.org \
    --cc=tglx@kernel.org \
    --cc=tiwai@suse.de \
    --cc=torvalds@linux-foundation.org \
    --cc=viro@zeniv.linux.org.uk \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.