Skip to contentSkip to conversation

Providing additional information in fdinfo sufficient for c/r, v3

PATCH In review Cyrill Gorcunov 5 participants 24 messages Nov 14, 2012 – Dec 10, 2012

Subsystems (6)
lore
Share & tools
lore
#0 lore raw

cover Providing additional information in fdinfo sufficient for c/r, v3

Hello guys, here is updated series for fdinfo via procfs. The main change is that we've dropped carrying fhandle with inotify mark but provide it on demand. This is achieved by adding a small helper into exportfs code. Please review, thanks a lot for all earlier comments!

Cyrill

#1 lore raw

PATCH 1/7 procfs: Add ability to plug in auxiliary fdinfo providers

This patch brings ability to print out auxiliary data associated with file in procfs interface /proc/pid/fdinfo/fd.

In particular further patches make eventfd, evenpoll, signalfd and fsnotify to print additional information complete enough to restore these objects after checkpoint.

To simplify the code we add show_fdinfo callback inside struct file_operations (as Al and Pavel are proposing).

CC Pavel Emelyanov <[email protected]>
CC Oleg Nesterov <[email protected]>
CC Andrey Vagin <[email protected]>
CC Al Viro <[email protected]>
CC Alexey Dobriyan <[email protected]>
CC Andrew Morton <[email protected]>
CC James Bottomley <[email protected]>
CC "Aneesh Kumar K.V" <[email protected]>
CC Alexey Dobriyan <[email protected]>
CC Matthew Helsley <[email protected]>
CC "J. Bruce Fields" <[email protected]>
CC "Aneesh Kumar K.V" <[email protected]>
CC Tvrtko Ursulin <[email protected]>
---
 fs/proc/fd.c       |    2 ++
 include/linux/fs.h |    4 ++--
 2 files changed, 4 insertions(+), 2 deletions(-)
fs/proc/fd.c +2 -0
Index: linux-2.6.git/fs/proc/fd.c
===================================================================
@@ -50,6 +50,8 @@ static int seq_show(struct seq_file *m,
 	if (!ret) {
                 seq_printf(m, "pos:\t%lli\nflags:\t0%o\n",
 			   (long long)file->f_pos, f_flags);
+		if (file->f_op->show_fdinfo)
+			ret = file->f_op->show_fdinfo(m, file);
 		fput(file);
 	}
 
include/linux/fs.h +2 -2
Index: linux-2.6.git/include/linux/fs.h
===================================================================
@@ -44,6 +44,7 @@ struct vm_area_struct;
 struct vfsmount;
 struct cred;
 struct swap_info_struct;
+struct seq_file;
 
 extern void __init inode_init(void);
 extern void __init inode_init_early(void);
@@ -1545,6 +1546,7 @@ struct file_operations {
 	int (*setlease)(struct file *, long, struct file_lock **);
 	long (*fallocate)(struct file *file, int mode, loff_t offset,
 			  loff_t len);
+	int (*show_fdinfo)(struct seq_file *m, struct file *f);
 };
 
 struct inode_operations {
@@ -1580,8 +1582,6 @@ struct inode_operations {
 			   umode_t create_mode, int *opened);
 } ____cacheline_aligned;
 
-struct seq_file;
-
 ssize_t rw_copy_check_uvector(int type, const struct iovec __user * uvector,
 			      unsigned long nr_segs, unsigned long fast_segs,
 			      struct iovec *fast_pointer,
Acked-by on v1 1/7
#2 lore raw

Re: [patch 1/7] procfs: Add ability to plug in auxiliary fdinfo providers

Quoted 24 lines

This patch brings ability to print out auxiliary data associated with file in procfs interface /proc/pid/fdinfo/fd.

In particular further patches make eventfd, evenpoll, signalfd and fsnotify to print additional information complete enough to restore these objects after checkpoint.

To simplify the code we add show_fdinfo callback inside struct file_operations (as Al and Pavel are proposing).

CC Pavel Emelyanov <[email protected]>
CC Oleg Nesterov <[email protected]>
CC Andrey Vagin <[email protected]>
CC Al Viro <[email protected]>
CC Alexey Dobriyan <[email protected]>
CC Andrew Morton <[email protected]>
CC James Bottomley <[email protected]>
CC "Aneesh Kumar K.V" <[email protected]>
CC Alexey Dobriyan <[email protected]>
CC Matthew Helsley <[email protected]>
CC "J. Bruce Fields" <[email protected]>
CC "Aneesh Kumar K.V" <[email protected]>
CC Tvrtko Ursulin <[email protected]>
Quoted 4 lines
---
 fs/proc/fd.c       |    2 ++
 include/linux/fs.h |    4 ++--
 2 files changed, 4 insertions(+), 2 deletions(-)
#3 lore raw

PATCH 2/7 fs, eventfd: Add procfs fdinfo helper

In reply to Cyrill Gorcunov

This allow us to print out raw counter value.
The /proc/pid/fdinfo/fd output is

 | pos:	0
 | flags:	04002
 | eventfd-count:               5a
CC Pavel Emelyanov <[email protected]>
CC Oleg Nesterov <[email protected]>
CC Andrey Vagin <[email protected]>
CC Al Viro <[email protected]>
CC Alexey Dobriyan <[email protected]>
CC Andrew Morton <[email protected]>
CC James Bottomley <[email protected]>
CC "Aneesh Kumar K.V" <[email protected]>
CC Alexey Dobriyan <[email protected]>
CC Matthew Helsley <[email protected]>
CC "J. Bruce Fields" <[email protected]>
CC "Aneesh Kumar K.V" <[email protected]>
CC Tvrtko Ursulin <[email protected]>
---
 fs/eventfd.c |   20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)
fs/eventfd.c +20 -0
Index: linux-2.6.git/fs/eventfd.c
===================================================================
@@ -19,6 +19,8 @@
 #include <linux/export.h>
 #include <linux/kref.h>
 #include <linux/eventfd.h>
+#include <linux/proc_fs.h>
+#include <linux/seq_file.h>
 
 struct eventfd_ctx {
 	struct kref kref;
@@ -284,7 +286,25 @@ static ssize_t eventfd_write(struct file
 	return res;
 }
 
+#ifdef CONFIG_PROC_FS
+static int eventfd_show_fdinfo(struct seq_file *m, struct file *f)
+{
+	struct eventfd_ctx *ctx = f->private_data;
+	int ret;
+
+	spin_lock_irq(&ctx->wqh.lock);
+	ret = seq_printf(m, "eventfd-count: %16llx\n",
+			 (unsigned long long)ctx->count);
+	spin_unlock_irq(&ctx->wqh.lock);
+
+	return ret;
+}
+#endif
+
 static const struct file_operations eventfd_fops = {
+#ifdef CONFIG_PROC_FS
+	.show_fdinfo	= eventfd_show_fdinfo,
+#endif
 	.release	= eventfd_release,
 	.poll		= eventfd_poll,
 	.read		= eventfd_read,
Acked-by on v1 2/7
#4 lore raw

Re: [patch 2/7] fs, eventfd: Add procfs fdinfo helper

Quoted 21 lines

This allow us to print out raw counter value.
The /proc/pid/fdinfo/fd output is

 | pos:	0
 | flags:	04002
 | eventfd-count:               5a
CC Pavel Emelyanov <[email protected]>
CC Oleg Nesterov <[email protected]>
CC Andrey Vagin <[email protected]>
CC Al Viro <[email protected]>
CC Alexey Dobriyan <[email protected]>
CC Andrew Morton <[email protected]>
CC James Bottomley <[email protected]>
CC "Aneesh Kumar K.V" <[email protected]>
CC Alexey Dobriyan <[email protected]>
CC Matthew Helsley <[email protected]>
CC "J. Bruce Fields" <[email protected]>
CC "Aneesh Kumar K.V" <[email protected]>
CC Tvrtko Ursulin <[email protected]>
Quoted 1 line

---

#5 lore raw

PATCH 3/7 fs, epoll: Add procfs fdinfo helper v2

In reply to Cyrill Gorcunov

This allow us to print out eventpoll target file descriptor, events and data, the /proc/pid/fdinfo/fd consists of

 | pos:	0
 | flags:	02
 | tfd:        5 events:       1d data: ffffffffffffffff enabled: 1

[avagin@: fix for unitialized ret variable]

CC Pavel Emelyanov <[email protected]>
CC Oleg Nesterov <[email protected]>
CC Andrey Vagin <[email protected]>
CC Al Viro <[email protected]>
CC Alexey Dobriyan <[email protected]>
CC Andrew Morton <[email protected]>
CC James Bottomley <[email protected]>
CC "Aneesh Kumar K.V" <[email protected]>
CC Alexey Dobriyan <[email protected]>
CC Matthew Helsley <[email protected]>
CC "J. Bruce Fields" <[email protected]>
CC "Aneesh Kumar K.V" <[email protected]>
CC Tvrtko Ursulin <[email protected]>
---
 fs/eventpoll.c |   29 +++++++++++++++++++++++++++++
 1 file changed, 29 insertions(+)
fs/eventpoll.c +29 -0
Index: linux-2.6.git/fs/eventpoll.c
===================================================================
@@ -38,6 +38,8 @@
 #include <asm/io.h>
 #include <asm/mman.h>
 #include <linux/atomic.h>
+#include <linux/proc_fs.h>
+#include <linux/seq_file.h>
 
 /*
  * LOCKING:
@@ -783,8 +785,35 @@ static unsigned int ep_eventpoll_poll(st
 	return pollflags != -1 ? pollflags : 0;
 }
 
+#ifdef CONFIG_PROC_FS
+static int ep_show_fdinfo(struct seq_file *m, struct file *f)
+{
+	struct eventpoll *ep = f->private_data;
+	struct rb_node *rbp;
+	int ret = 0;
+
+	mutex_lock(&ep->mtx);
+	for (rbp = rb_first(&ep->rbr); rbp; rbp = rb_next(rbp)) {
+		struct epitem *epi = rb_entry(rbp, struct epitem, rbn);
+
+		ret = seq_printf(m, "tfd: %8d events: %8x data: %16llx enabled: %d\n",
+				 epi->ffd.fd, epi->event.events,
+				 (long long)epi->event.data,
+				 ep_is_linked(&epi->rdllink));
+		if (ret)
+			break;
+	}
+	mutex_unlock(&ep->mtx);
+
+	return ret;
+}
+#endif
+
 /* File callbacks that implement the eventpoll file behaviour */
 static const struct file_operations eventpoll_fops = {
+#ifdef CONFIG_PROC_FS
+	.show_fdinfo	= ep_show_fdinfo,
+#endif
 	.release	= ep_eventpoll_release,
 	.poll		= ep_eventpoll_poll,
 	.llseek		= noop_llseek,
Acked-by on v1 3/7
#6 lore raw

Re: [patch 3/7] fs, epoll: Add procfs fdinfo helper v2

Quoted 9 lines · Cyrill Gorcunov

This allow us to print out eventpoll target file descriptor, events and data, the /proc/pid/fdinfo/fd consists of

 | pos:	0
 | flags:	02
 | tfd:        5 events:       1d data: ffffffffffffffff enabled: 1

[avagin@: fix for unitialized ret variable]

Quoted 14 lines
CC Pavel Emelyanov <[email protected]>
CC Oleg Nesterov <[email protected]>
CC Andrey Vagin <[email protected]>
CC Al Viro <[email protected]>
CC Alexey Dobriyan <[email protected]>
CC Andrew Morton <[email protected]>
CC James Bottomley <[email protected]>
CC "Aneesh Kumar K.V" <[email protected]>
CC Alexey Dobriyan <[email protected]>
CC Matthew Helsley <[email protected]>
CC "J. Bruce Fields" <[email protected]>
CC "Aneesh Kumar K.V" <[email protected]>
CC Tvrtko Ursulin <[email protected]>
#7 lore raw

PATCH 4/7 fdinfo: Show sigmask for signalfd fd v3

In reply to Cyrill Gorcunov

The sigmask is read in lockless manner for a sake of code simplicity, thus if precise data needed here the tasks which refer to the signalfd should be stopped before read.

CC Pavel Emelyanov <[email protected]>
CC Oleg Nesterov <[email protected]>
CC Andrey Vagin <[email protected]>
CC Al Viro <[email protected]>
CC Alexey Dobriyan <[email protected]>
CC Andrew Morton <[email protected]>
CC James Bottomley <[email protected]>
CC "Aneesh Kumar K.V" <[email protected]>
CC Alexey Dobriyan <[email protected]>
CC Matthew Helsley <[email protected]>
CC "J. Bruce Fields" <[email protected]>
CC "Aneesh Kumar K.V" <[email protected]>
CC Tvrtko Ursulin <[email protected]>
---
 fs/proc/array.c         |    2 +-
 fs/signalfd.c           |   18 ++++++++++++++++++
 include/linux/proc_fs.h |    3 +++
 3 files changed, 22 insertions(+), 1 deletion(-)
fs/proc/array.c +1 -1
Index: linux-2.6.git/fs/proc/array.c
===================================================================
@@ -220,7 +220,7 @@ static inline void task_state(struct seq
 	seq_putc(m, '\n');
 }
 
-static void render_sigset_t(struct seq_file *m, const char *header,
+void render_sigset_t(struct seq_file *m, const char *header,
 				sigset_t *set)
 {
 	int i;
fs/signalfd.c +18 -0
Index: linux-2.6.git/fs/signalfd.c
===================================================================
@@ -29,6 +29,7 @@
 #include <linux/anon_inodes.h>
 #include <linux/signalfd.h>
 #include <linux/syscalls.h>
+#include <linux/proc_fs.h>
 
 void signalfd_cleanup(struct sighand_struct *sighand)
 {
@@ -227,7 +228,24 @@ static ssize_t signalfd_read(struct file
 	return total ? total: ret;
 }
 
+#ifdef CONFIG_PROC_FS
+static int signalfd_show_fdinfo(struct seq_file *m, struct file *f)
+{
+	struct signalfd_ctx *ctx = f->private_data;
+	sigset_t sigmask;
+
+	sigmask = ctx->sigmask;
+	signotset(&sigmask);
+	render_sigset_t(m, "sigmask:\t", &sigmask);
+
+	return 0;
+}
+#endif
+
 static const struct file_operations signalfd_fops = {
+#ifdef CONFIG_PROC_FS
+	.show_fdinfo	= signalfd_show_fdinfo,
+#endif
 	.release	= signalfd_release,
 	.poll		= signalfd_poll,
 	.read		= signalfd_read,
include/linux/proc_fs.h +3 -0
Index: linux-2.6.git/include/linux/proc_fs.h
===================================================================
@@ -290,4 +290,7 @@ static inline struct net *PDE_NET(struct
 	return pde->parent->data;
 }
 
+#include <linux/signal.h>
+
+void render_sigset_t(struct seq_file *m, const char *header, sigset_t *set);
 #endif /* _LINUX_PROC_FS_H */
Acked-by on v1 4/7
#8 lore raw

Re: [patch 4/7] fdinfo: Show sigmask for signalfd fd v3

Quoted 19 lines · Cyrill Gorcunov

The sigmask is read in lockless manner for a sake of code simplicity, thus if precise data needed here the tasks which refer to the signalfd should be stopped before read.

CC Pavel Emelyanov <[email protected]>
CC Oleg Nesterov <[email protected]>
CC Andrey Vagin <[email protected]>
CC Al Viro <[email protected]>
CC Alexey Dobriyan <[email protected]>
CC Andrew Morton <[email protected]>
CC James Bottomley <[email protected]>
CC "Aneesh Kumar K.V" <[email protected]>
CC Alexey Dobriyan <[email protected]>
CC Matthew Helsley <[email protected]>
CC "J. Bruce Fields" <[email protected]>
CC "Aneesh Kumar K.V" <[email protected]>
CC Tvrtko Ursulin <[email protected]>
Quoted 5 lines
---
 fs/proc/array.c         |    2 +-
 fs/signalfd.c           |   18 ++++++++++++++++++
 include/linux/proc_fs.h |    3 +++
 3 files changed, 22 insertions(+), 1 deletion(-)
#9 lore raw

PATCH 5/7 fs, exportfs: Escape nil dereference if no s_export_op present

In reply to Cyrill Gorcunov

This routine will be used to generate a file handle in fdinfo output for inotify subsystem, where if no s_export_op present the general export_encode_fh should be used. Thus add a test if s_export_op present inside exportfs_encode_fh itself.

CC Pavel Emelyanov <[email protected]>
CC Oleg Nesterov <[email protected]>
CC Andrey Vagin <[email protected]>
CC Al Viro <[email protected]>
CC Alexey Dobriyan <[email protected]>
CC Andrew Morton <[email protected]>
CC James Bottomley <[email protected]>
CC "Aneesh Kumar K.V" <[email protected]>
CC Alexey Dobriyan <[email protected]>
CC Matthew Helsley <[email protected]>
CC "J. Bruce Fields" <[email protected]>
CC "Aneesh Kumar K.V" <[email protected]>
CC Tvrtko Ursulin <[email protected]>
---
 fs/exportfs/expfs.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
fs/exportfs/expfs.c +1 -1
Index: linux-2.6.git/fs/exportfs/expfs.c
===================================================================
@@ -357,7 +357,7 @@ int exportfs_encode_fh(struct dentry *de
 		 */
 		parent = p->d_inode;
 	}
-	if (nop->encode_fh)
+	if (nop && nop->encode_fh)
 		error = nop->encode_fh(inode, fid->raw, max_len, parent);
 	else
 		error = export_encode_fh(inode, fid, max_len, parent);
Acked-by on v1 5/7
#10 lore raw

Re: [patch 5/7] fs, exportfs: Escape nil dereference if no s_export_op present

Quoted 19 lines · Cyrill Gorcunov

This routine will be used to generate a file handle in fdinfo output for inotify subsystem, where if no s_export_op present the general export_encode_fh should be used. Thus add a test if s_export_op present inside exportfs_encode_fh itself.

CC Pavel Emelyanov <[email protected]>
CC Oleg Nesterov <[email protected]>
CC Andrey Vagin <[email protected]>
CC Al Viro <[email protected]>
CC Alexey Dobriyan <[email protected]>
CC Andrew Morton <[email protected]>
CC James Bottomley <[email protected]>
CC "Aneesh Kumar K.V" <[email protected]>
CC Alexey Dobriyan <[email protected]>
CC Matthew Helsley <[email protected]>
CC "J. Bruce Fields" <[email protected]>
CC "Aneesh Kumar K.V" <[email protected]>
CC Tvrtko Ursulin <[email protected]>
Quoted 1 line

---

#11 lore raw

PATCH 6/7 fs, exportfs: Add exportfs_encode_inode_fh helper

In reply to Cyrill Gorcunov

We will need this helper in the next patch to provide a file handle for inotify marks in /proc/pid/fdinfo output.

The patch is rather providing the way to use inodes directly when dentry is not available (like in case of inotify system).

CC Pavel Emelyanov <[email protected]>
CC Oleg Nesterov <[email protected]>
CC Andrey Vagin <[email protected]>
CC Al Viro <[email protected]>
CC Alexey Dobriyan <[email protected]>
CC Andrew Morton <[email protected]>
CC James Bottomley <[email protected]>
CC "Aneesh Kumar K.V" <[email protected]>
CC Alexey Dobriyan <[email protected]>
CC Matthew Helsley <[email protected]>
CC "J. Bruce Fields" <[email protected]>
CC "Aneesh Kumar K.V" <[email protected]>
CC Tvrtko Ursulin <[email protected]>
---
 fs/exportfs/expfs.c      |   19 ++++++++++++++-----
 include/linux/exportfs.h |    2 ++
 2 files changed, 16 insertions(+), 5 deletions(-)
fs/exportfs/expfs.c +14 -5
Index: linux-2.6.git/fs/exportfs/expfs.c
===================================================================
@@ -341,10 +341,21 @@ static int export_encode_fh(struct inode
 	return type;
 }
 
+int exportfs_encode_inode_fh(struct inode *inode, struct fid *fid,
+			     int *max_len, struct inode *parent)
+{
+	const struct export_operations *nop = inode->i_sb->s_export_op;
+
+	if (nop && nop->encode_fh)
+		return nop->encode_fh(inode, fid->raw, max_len, parent);
+
+	return export_encode_fh(inode, fid, max_len, parent);
+}
+EXPORT_SYMBOL_GPL(exportfs_encode_inode_fh);
+
 int exportfs_encode_fh(struct dentry *dentry, struct fid *fid, int *max_len,
 		int connectable)
 {
-	const struct export_operations *nop = dentry->d_sb->s_export_op;
 	int error;
 	struct dentry *p = NULL;
 	struct inode *inode = dentry->d_inode, *parent = NULL;
@@ -357,10 +368,8 @@ int exportfs_encode_fh(struct dentry *de
 		 */
 		parent = p->d_inode;
 	}
-	if (nop && nop->encode_fh)
-		error = nop->encode_fh(inode, fid->raw, max_len, parent);
-	else
-		error = export_encode_fh(inode, fid, max_len, parent);
+
+	error = exportfs_encode_inode_fh(inode, fid, max_len, parent);
 	dput(p);
 
 	return error;
include/linux/exportfs.h +2 -0
Index: linux-2.6.git/include/linux/exportfs.h
===================================================================
@@ -177,6 +177,8 @@ struct export_operations {
 	int (*commit_metadata)(struct inode *inode);
 };
 
+extern int exportfs_encode_inode_fh(struct inode *inode, struct fid *fid,
+				    int *max_len, struct inode *parent);
 extern int exportfs_encode_fh(struct dentry *dentry, struct fid *fid,
 	int *max_len, int connectable);
 extern struct dentry *exportfs_decode_fh(struct vfsmount *mnt, struct fid *fid,
#12 lore raw

Re: [patch 6/7] fs, exportfs: Add exportfs_encode_inode_fh helper

Quoted 7 lines · Cyrill Gorcunov

We will need this helper in the next patch to provide a file handle for inotify marks in /proc/pid/fdinfo output.

The patch is rather providing the way to use inodes directly when dentry is not available (like in case of inotify system).

Looks OK to me.--b.

Quoted 73 lines
CC Pavel Emelyanov <[email protected]>
CC Oleg Nesterov <[email protected]>
CC Andrey Vagin <[email protected]>
CC Al Viro <[email protected]>
CC Alexey Dobriyan <[email protected]>
CC Andrew Morton <[email protected]>
CC James Bottomley <[email protected]>
CC "Aneesh Kumar K.V" <[email protected]>
CC Alexey Dobriyan <[email protected]>
CC Matthew Helsley <[email protected]>
CC "J. Bruce Fields" <[email protected]>
CC "Aneesh Kumar K.V" <[email protected]>
CC Tvrtko Ursulin <[email protected]>
---
 fs/exportfs/expfs.c      |   19 ++++++++++++++-----
 include/linux/exportfs.h |    2 ++
 2 files changed, 16 insertions(+), 5 deletions(-)

Index: linux-2.6.git/fs/exportfs/expfs.c
===================================================================

fs/exportfs/expfs.c +14 -5
@@ -341,10 +341,21 @@ static int export_encode_fh(struct inode
 	return type;
 }
 
+int exportfs_encode_inode_fh(struct inode *inode, struct fid *fid,
+			     int *max_len, struct inode *parent)
+{
+	const struct export_operations *nop = inode->i_sb->s_export_op;
+
+	if (nop && nop->encode_fh)
+		return nop->encode_fh(inode, fid->raw, max_len, parent);
+
+	return export_encode_fh(inode, fid, max_len, parent);
+}
+EXPORT_SYMBOL_GPL(exportfs_encode_inode_fh);
+
 int exportfs_encode_fh(struct dentry *dentry, struct fid *fid, int *max_len,
 		int connectable)
 {
-	const struct export_operations *nop = dentry->d_sb->s_export_op;
 	int error;
 	struct dentry *p = NULL;
 	struct inode *inode = dentry->d_inode, *parent = NULL;
@@ -357,10 +368,8 @@ int exportfs_encode_fh(struct dentry *de
 		 */
 		parent = p->d_inode;
 	}
-	if (nop && nop->encode_fh)
-		error = nop->encode_fh(inode, fid->raw, max_len, parent);
-	else
-		error = export_encode_fh(inode, fid, max_len, parent);
+
+	error = exportfs_encode_inode_fh(inode, fid, max_len, parent);
 	dput(p);
 
 	return error;

Index: linux-2.6.git/include/linux/exportfs.h
===================================================================

include/linux/exportfs.h +2 -0
@@ -177,6 +177,8 @@ struct export_operations {
 	int (*commit_metadata)(struct inode *inode);
 };
 
+extern int exportfs_encode_inode_fh(struct inode *inode, struct fid *fid,
+				    int *max_len, struct inode *parent);
 extern int exportfs_encode_fh(struct dentry *dentry, struct fid *fid,
 	int *max_len, int connectable);
 extern struct dentry *exportfs_decode_fh(struct vfsmount *mnt, struct fid *fid,
#13 lore raw

Re: [patch 6/7] fs, exportfs: Add exportfs_encode_inode_fh helper

Quoted 10 lines · J. Bruce Fields
Quoted 7 lines · Cyrill Gorcunov

We will need this helper in the next patch to provide a file handle for inotify marks in /proc/pid/fdinfo output.

The patch is rather providing the way to use inodes directly when dentry is not available (like in case of inotify system).

Looks OK to me.--b.

Thank you, Bruce!

Quoted 15 lines
Quoted 15 lines
CC Pavel Emelyanov <[email protected]>
CC Oleg Nesterov <[email protected]>
CC Andrey Vagin <[email protected]>
CC Al Viro <[email protected]>
CC Alexey Dobriyan <[email protected]>
CC Andrew Morton <[email protected]>
CC James Bottomley <[email protected]>
CC "Aneesh Kumar K.V" <[email protected]>
CC Alexey Dobriyan <[email protected]>
CC Matthew Helsley <[email protected]>
CC "J. Bruce Fields" <[email protected]>
CC "Aneesh Kumar K.V" <[email protected]>
CC Tvrtko Ursulin <[email protected]>
#14 lore raw

PATCH 7/7 fs, notify: Add procfs fdinfo helper v6

In reply to Cyrill Gorcunov

This allow us to print out fsnotify details such as watchee inode, device, mask and optionally a file handle.

For inotify objects if kernel compiled with exportfs support the output will be

 | pos:	0
 | flags:	02000000
 | inotify wd:        3 ino:             9e7e sdev:   800013 mask:  800afce ignored_mask:        0 fhandle-bytes:        8 fhandle-type:        1 f_handle: 7e9e0000640d1b6d
 | inotify wd:        2 ino:             a111 sdev:   800013 mask:  800afce ignored_mask:        0 fhandle-bytes:        8 fhandle-type:        1 f_handle: 11a1000020542153
 | inotify wd:        1 ino:            6b149 sdev:   800013 mask:  800afce ignored_mask:        0 fhandle-bytes:        8 fhandle-type:        1 f_handle: 49b1060023552153

If kernel compiled without exportfs support, the file handle won't be provided but inode and device only.

 | pos:	0
 | flags:	02000000
 | inotify wd:        3 ino:             9e7e sdev:   800013 mask:  800afce ignored_mask:        0
 | inotify wd:        2 ino:             a111 sdev:   800013 mask:  800afce ignored_mask:        0
 | inotify wd:        1 ino:            6b149 sdev:   800013 mask:  800afce ignored_mask:        0

For fanotify the output is like

 | pos:	0
 | flags:	02
 | fanotify ino:            68f71 sdev:   800013 mask:        1 ignored_mask: 40000000
 | fanotify mnt_id:       13 mask:        1 ignored_mask: 40000000

To minimize impact on general fsnotify code the new functionality is gathered in fs/notify/fdinfo.c file.

CC Pavel Emelyanov <[email protected]>
CC Oleg Nesterov <[email protected]>
CC Andrey Vagin <[email protected]>
CC Al Viro <[email protected]>
CC Alexey Dobriyan <[email protected]>
CC Andrew Morton <[email protected]>
CC James Bottomley <[email protected]>
CC "Aneesh Kumar K.V" <[email protected]>
CC Alexey Dobriyan <[email protected]>
CC Matthew Helsley <[email protected]>
CC "J. Bruce Fields" <[email protected]>
CC "Aneesh Kumar K.V" <[email protected]>
CC Tvrtko Ursulin <[email protected]>
---
 fs/notify/Makefile                 |    2 
 fs/notify/fanotify/fanotify_user.c |    2 
 fs/notify/fdinfo.c                 |  152 +++++++++++++++++++++++++++++++++++++
 fs/notify/fdinfo.h                 |   22 +++++
 fs/notify/inotify/inotify_user.c   |    2 
 5 files changed, 179 insertions(+), 1 deletion(-)
fs/notify/Makefile +1 -1
Index: linux-2.6.git/fs/notify/Makefile
===================================================================
@@ -1,5 +1,5 @@
 obj-$(CONFIG_FSNOTIFY)		+= fsnotify.o notification.o group.o inode_mark.o \
-				   mark.o vfsmount_mark.o
+				   mark.o vfsmount_mark.o fdinfo.o
 
 obj-y			+= dnotify/
 obj-y			+= inotify/
fs/notify/fanotify/fanotify_user.c +2 -0
Index: linux-2.6.git/fs/notify/fanotify/fanotify_user.c
===================================================================
@@ -17,6 +17,7 @@
 #include <asm/ioctls.h>
 
 #include "../../mount.h"
+#include "../fdinfo.h"
 
 #define FANOTIFY_DEFAULT_MAX_EVENTS	16384
 #define FANOTIFY_DEFAULT_MAX_MARKS	8192
@@ -427,6 +428,7 @@ static long fanotify_ioctl(struct file *
 }
 
 static const struct file_operations fanotify_fops = {
+	.show_fdinfo	= fanotify_show_fdinfo,
 	.poll		= fanotify_poll,
 	.read		= fanotify_read,
 	.write		= fanotify_write,
fs/notify/fdinfo.c new file +152 -0

152 lines not on this page · raw message

fs/notify/fdinfo.h new file +22 -0
Index: linux-2.6.git/fs/notify/fdinfo.h
===================================================================
@@ -0,0 +1,22 @@
+#ifndef __FSNOTIFY_FDINFO_H__
+#define __FSNOTIFY_FDINFO_H__
+
+#include <linux/errno.h>
+#include <linux/proc_fs.h>
+
+struct seq_file;
+struct file;
+
+#ifdef CONFIG_PROC_FS
+
+#ifdef CONFIG_INOTIFY_USER
+extern int inotify_show_fdinfo(struct seq_file *m, struct file *f);
+#endif
+
+#ifdef CONFIG_FANOTIFY
+extern int fanotify_show_fdinfo(struct seq_file *m, struct file *f);
+#endif
+
+#endif /* CONFIG_PROC_FS */
+
+#endif /* __FSNOTIFY_FDINFO_H__ */
fs/notify/inotify/inotify_user.c +2 -0
Index: linux-2.6.git/fs/notify/inotify/inotify_user.c
===================================================================
@@ -40,6 +40,7 @@
 #include <linux/wait.h>
 
 #include "inotify.h"
+#include "../fdinfo.h"
 
 #include <asm/ioctls.h>
 
@@ -335,6 +336,7 @@ static long inotify_ioctl(struct file *f
 }
 
 static const struct file_operations inotify_fops = {
+	.show_fdinfo	= inotify_show_fdinfo,
 	.poll		= inotify_poll,
 	.read		= inotify_read,
 	.fasync		= inotify_fasync,
Acked-by on v1 7/7
#15 lore raw

Re: [patch 7/7] fs, notify: Add procfs fdinfo helper v6

Quoted 31 lines

This allow us to print out fsnotify details such as watchee inode, device, mask and optionally a file handle.

For inotify objects if kernel compiled with exportfs support the output will be

 | pos:	0
 | flags:	02000000
 | inotify wd:        3 ino:             9e7e sdev:   800013 mask:  800afce ignored_mask:        0 fhandle-bytes:        8 fhandle-type:        1 f_handle: 7e9e0000640d1b6d
 | inotify wd:        2 ino:             a111 sdev:   800013 mask:  800afce ignored_mask:        0 fhandle-bytes:        8 fhandle-type:        1 f_handle: 11a1000020542153
 | inotify wd:        1 ino:            6b149 sdev:   800013 mask:  800afce ignored_mask:        0 fhandle-bytes:        8 fhandle-type:        1 f_handle: 49b1060023552153

If kernel compiled without exportfs support, the file handle won't be provided but inode and device only.

 | pos:	0
 | flags:	02000000
 | inotify wd:        3 ino:             9e7e sdev:   800013 mask:  800afce ignored_mask:        0
 | inotify wd:        2 ino:             a111 sdev:   800013 mask:  800afce ignored_mask:        0
 | inotify wd:        1 ino:            6b149 sdev:   800013 mask:  800afce ignored_mask:        0

For fanotify the output is like

 | pos:	0
 | flags:	02
 | fanotify ino:            68f71 sdev:   800013 mask:        1 ignored_mask: 40000000
 | fanotify mnt_id:       13 mask:        1 ignored_mask: 40000000

To minimize impact on general fsnotify code the new functionality is gathered in fs/notify/fdinfo.c file.

Quoted 14 lines
CC Pavel Emelyanov <[email protected]>
CC Oleg Nesterov <[email protected]>
CC Andrey Vagin <[email protected]>
CC Al Viro <[email protected]>
CC Alexey Dobriyan <[email protected]>
CC Andrew Morton <[email protected]>
CC James Bottomley <[email protected]>
CC "Aneesh Kumar K.V" <[email protected]>
CC Alexey Dobriyan <[email protected]>
CC Matthew Helsley <[email protected]>
CC "J. Bruce Fields" <[email protected]>
CC "Aneesh Kumar K.V" <[email protected]>
CC Tvrtko Ursulin <[email protected]>
#16 lore raw

Re: [patch 7/7] fs, notify: Add procfs fdinfo helper v6

In reply to Cyrill Gorcunov
Quoted 11 lines · On Wed, 14 Nov 2012 19:19:44 +0400 Cyrill Gorcunov <[email protected]> wrote:

This allow us to print out fsnotify details such as watchee inode, device, mask and optionally a file handle.

For inotify objects if kernel compiled with exportfs support the output will be

 | pos:	0
 | flags:	02000000
 | inotify wd:        3 ino:             9e7e sdev:   800013 mask:  800afce ignored_mask:        0 fhandle-bytes:        8 fhandle-type:        1 f_handle: 7e9e0000640d1b6d
 | inotify wd:        2 ino:             a111 sdev:   800013 mask:  800afce ignored_mask:        0 fhandle-bytes:        8 fhandle-type:        1 f_handle: 11a1000020542153
 | inotify wd:        1 ino:            6b149 sdev:   800013 mask:  800afce ignored_mask:        0 fhandle-bytes:        8 fhandle-type:        1 f_handle: 49b1060023552153

This is a lousy output format. It's sort-of like a sensible set of name-value tuples: "name:value name:value name:value" but

a) it has lots of random pointless whitespace after the colons and

b) several of the labels have spaces in them, just to make life harder for parsing code and

c) inotify-wd is secretly printed in decimal while everything else is in hex.

What happens if we do something like the below (which will require a changelog update)?

fs/notify/fdinfo.c renamed from fs/notify/fdinfo.c~fs-notify-add-procfs-fdinfo-helper-v6-fix +8 -7
@@ -50,7 +50,7 @@ static int show_mark_fhandle(struct seq_
 	f.handle.handle_bytes = sizeof(f.pad);
 	size = f.handle.handle_bytes >> 2;
 
-	ret = exportfs_encode_inode_fh(inode, (struct fid *)f.handle.f_handle, &size,  0);
+	ret = exportfs_encode_inode_fh(inode, (struct fid *)f.handle.f_handle, &size, 0);
 	if ((ret == 255) || (ret == -ENOSPC)) {
 		WARN_ONCE(1, "Can't encode file handler for inotify: %d\n", ret);
 		return 0;
@@ -59,7 +59,7 @@ static int show_mark_fhandle(struct seq_
 	f.handle.handle_type = ret;
 	f.handle.handle_bytes = size * sizeof(u32);
 
-	ret = seq_printf(m, "fhandle-bytes: %8x fhandle-type: %8x f_handle: ",
+	ret = seq_printf(m, "fhandle-bytes:%x fhandle-type:%x f_handle:",
 			 f.handle.handle_bytes, f.handle.handle_type);
 
 	for (i = 0; i < f.handle.handle_bytes; i++)
@@ -86,8 +86,8 @@ static int inotify_fdinfo(struct seq_fil
 	inode_mark = container_of(mark, struct inotify_inode_mark, fsn_mark);
 	inode = igrab(mark->i.inode);
 	if (inode) {
-		ret = seq_printf(m, "inotify wd: %8d ino: %16lx sdev: %8x "
-				 "mask: %8x ignored_mask: %8x ",
+		ret = seq_printf(m, "inotify-wd:%x ino:%lx sdev:%x "
+				 "mask:%x ignored_mask:%x ",
 				 inode_mark->wd, inode->i_ino,
 				 inode->i_sb->s_dev,
 				 mark->mask, mark->ignored_mask);
@@ -120,15 +120,16 @@ static int fanotify_fdinfo(struct seq_fi
 		inode = igrab(mark->i.inode);
 		if (!inode)
 			goto out;
-		ret = seq_printf(m, "fanotify ino: %16lx sdev: %8x "
-				 "mask: %8x ignored_mask: %8x\n",
+		ret = seq_printf(m, "fanotify-ino:%x sdev:%x "
+				 "mask:%x ignored_mask:%x\n",
 				 inode->i_ino, inode->i_sb->s_dev,
 				 mark->mask, mark->ignored_mask);
 		iput(inode);
 	} else if (mark->flags & FSNOTIFY_MARK_FLAG_VFSMOUNT) {
 		struct mount *mnt = real_mount(mark->m.mnt);
 
-		ret = seq_printf(m, "fanotify mnt_id: %8x mask: %8x ignored_mask: %8x\n",
+		ret = seq_printf(m, "fanotify-mnt_id:%x mask:%x "
+				 "ignored_mask:%x\n",
 				 mnt->mnt_id, mark->mask, mark->ignored_mask);
 	}
 out:

_

#17 lore raw

Re: [patch 7/7] fs, notify: Add procfs fdinfo helper v6

Quoted 6 lines · Andrew Morton

This is a lousy output format. It's sort-of like a sensible set of name-value tuples: "name:value name:value name:value" but

a) it has lots of random pointless whitespace after the colons and

Quoted 8 lines

b) several of the labels have spaces in them, just to make life harder for parsing code and

c) inotify-wd is secretly printed in decimal while everything else is in hex.

What happens if we do something like the below (which will require a changelog update)?

Looks good for me, Andrew. The only reason for such whitespace rich format was to make output column aligned. But it's fine to have name:val as well. I'll update. Thanks!

Cyrill

author Acked-by Pavel Emelyanov
#18 lore raw

Re: [patch 7/7] fs, notify: Add procfs fdinfo helper v6

Quoted 7 lines · Cyrill Gorcunov
Quoted 3 lines

What happens if we do something like the below (which will require a changelog update)?

Looks good for me, Andrew. The only reason for such whitespace rich format was to make output column aligned. But it's fine to have name:val as well. I'll update. Thanks!

Andrew, here is a patch which contains and your change, and changelog update and one fix (you've lost %lx for ino number thus compiler warns me about missing specificator). Also the inotify/fanotify at first position on the line (without dash, as you propose, ie inotify-wd) applies to the whole line, that's why I didn't use dashes in first place.

Right below changelog I wrote which patches this one deprecate. If it's inconvenient and I better should provide you the patch on top instead -- just give me a word.
---
From: Cyrill Gorcunov <[email protected]>
Subject: fs, notify: Add procfs fdinfo helper v7

This allow us to print out fsnotify details such as watchee inode, device, mask and optionally a file handle.

For inotify objects if kernel compiled with exportfs support the output will be

 | pos:	0
 | flags:	02000000
 | inotify wd:3 ino:9e7e sdev:800013 mask:800afce ignored_mask:0 fhandle-bytes:8 fhandle-type:1 f_handle:7e9e0000640d1b6d
 | inotify wd:2 ino:a111 sdev:800013 mask:800afce ignored_mask:0 fhandle-bytes:8 fhandle-type:1 f_handle:11a1000020542153
 | inotify wd:1 ino:6b149 sdev:800013 mask:800afce ignored_mask:0 fhandle-bytes:8 fhandle-type:1 f_handle:49b1060023552153

If kernel compiled without exportfs support, the file handle won't be provided but inode and device only.

 | pos:	0
 | flags:	02000000
 | inotify wd:3 ino:9e7e sdev:800013 mask:800afce ignored_mask:0
 | inotify wd:2 ino:a111 sdev:800013 mask:800afce ignored_mask:0
 | inotify wd:1 ino:6b149 sdev:800013 mask:800afce ignored_mask:0

For fanotify the output is like

 | pos:	0
 | flags:	02
 | fanotify ino:68f71 sdev:800013 mask:1 ignored_mask:40000000
 | pos:	0
 | flags:	02
 | fanotify mnt_id:13 mask:1 ignored_mask:40000000

To minimize impact on general fsnotify code the new functionality is gathered in fs/notify/fdinfo.c file.

CC Oleg Nesterov <[email protected]>
CC Andrey Vagin <[email protected]>
CC Al Viro <[email protected]>
CC Alexey Dobriyan <[email protected]>
CC Andrew Morton <[email protected]>
CC James Bottomley <[email protected]>
CC "Aneesh Kumar K.V" <[email protected]>
CC Alexey Dobriyan <[email protected]>
CC Matthew Helsley <[email protected]>
CC "J. Bruce Fields" <[email protected]>
CC "Aneesh Kumar K.V" <[email protected]>
CC Tvrtko Ursulin <[email protected]>

---

The patch to substitute two patches in -mm tree
fs-notify-add-procfs-fdinfo-helper-v6.patch
fs-notify-add-procfs-fdinfo-helper-v6-fix.patch

 fs/notify/Makefile                 |    2 
 fs/notify/fanotify/fanotify_user.c |    2 
 fs/notify/fdinfo.c                 |  153 +++++++++++++++++++++++++++++++++++++
 fs/notify/fdinfo.h                 |   22 +++++
 fs/notify/inotify/inotify_user.c   |    2 
 5 files changed, 180 insertions(+), 1 deletion(-)
fs/notify/Makefile +1 -1
Index: linux-2.6.git/fs/notify/Makefile
===================================================================
@@ -1,5 +1,5 @@
 obj-$(CONFIG_FSNOTIFY)		+= fsnotify.o notification.o group.o inode_mark.o \
-				   mark.o vfsmount_mark.o
+				   mark.o vfsmount_mark.o fdinfo.o
 
 obj-y			+= dnotify/
 obj-y			+= inotify/
fs/notify/fanotify/fanotify_user.c +2 -0
Index: linux-2.6.git/fs/notify/fanotify/fanotify_user.c
===================================================================
@@ -17,6 +17,7 @@
 #include <asm/ioctls.h>
 
 #include "../../mount.h"
+#include "../fdinfo.h"
 
 #define FANOTIFY_DEFAULT_MAX_EVENTS	16384
 #define FANOTIFY_DEFAULT_MAX_MARKS	8192
@@ -427,6 +428,7 @@ static long fanotify_ioctl(struct file *
 }
 
 static const struct file_operations fanotify_fops = {
+	.show_fdinfo	= fanotify_show_fdinfo,
 	.poll		= fanotify_poll,
 	.read		= fanotify_read,
 	.write		= fanotify_write,
fs/notify/fdinfo.c new file +153 -0

153 lines not on this page · raw message

fs/notify/fdinfo.h new file +22 -0
Index: linux-2.6.git/fs/notify/fdinfo.h
===================================================================
@@ -0,0 +1,22 @@
+#ifndef __FSNOTIFY_FDINFO_H__
+#define __FSNOTIFY_FDINFO_H__
+
+#include <linux/errno.h>
+#include <linux/proc_fs.h>
+
+struct seq_file;
+struct file;
+
+#ifdef CONFIG_PROC_FS
+
+#ifdef CONFIG_INOTIFY_USER
+extern int inotify_show_fdinfo(struct seq_file *m, struct file *f);
+#endif
+
+#ifdef CONFIG_FANOTIFY
+extern int fanotify_show_fdinfo(struct seq_file *m, struct file *f);
+#endif
+
+#endif /* CONFIG_PROC_FS */
+
+#endif /* __FSNOTIFY_FDINFO_H__ */
fs/notify/inotify/inotify_user.c +2 -0
Index: linux-2.6.git/fs/notify/inotify/inotify_user.c
===================================================================
@@ -40,6 +40,7 @@
 #include <linux/wait.h>
 
 #include "inotify.h"
+#include "../fdinfo.h"
 
 #include <asm/ioctls.h>
 
@@ -335,6 +336,7 @@ static long inotify_ioctl(struct file *f
 }
 
 static const struct file_operations inotify_fops = {
+	.show_fdinfo	= inotify_show_fdinfo,
 	.poll		= inotify_poll,
 	.read		= inotify_read,
 	.fasync		= inotify_fasync,
#19 lore raw

Re: [patch 7/7] fs, notify: Add procfs fdinfo helper v6

Quoted 9 lines · On Sat, 17 Nov 2012 12:34:37 +0400 Cyrill Gorcunov <[email protected]> wrote:
Quoted 7 lines · Cyrill Gorcunov
Quoted 3 lines

What happens if we do something like the below (which will require a changelog update)?

Looks good for me, Andrew. The only reason for such whitespace rich format was to make output column aligned. But it's fine to have name:val as well. I'll update. Thanks!

Quoted 5 lines

Andrew, here is a patch which contains and your change, and changelog update and one fix (you've lost %lx for ino number thus compiler warns me about missing specificator). Also the inotify/fanotify at first position on the line (without dash, as you propose, ie inotify-wd) applies to the whole line, that's why I didn't use dashes in first place.

Oh, I see.

Quoted 3 lines
 | pos:	0
 | flags:	02000000
 | inotify wd:3 ino:9e7e sdev:800013 mask:800afce ignored_mask:0 fhandle-bytes:8 fhandle-type:1 f_handle:7e9e0000640d1b6d

It's still a bit strange, isn't it? The "inotify" identifier doesn't have the colon. I guess it's unavoidable, as this multiple-name-value line is being mixed into the same pseudo-file as single name-value lines.

Where *is* this pseudo-file, anyway? The changelog doesn't tell us where it lies in the filesystem.

I know! I'll search the documentation! /proc/sys/fs/epoll/..., yes?

btw, Documentation/sysctl/fs.txt is missing documentation for max_user_instances and max_queued_events. Perhaps you can fix that when providing the documentation changes for your patch :)

#20 lore raw

Re: [patch 7/7] fs, notify: Add procfs fdinfo helper v6

Quoted 9 lines · Andrew Morton

Where *is* this pseudo-file, anyway? The changelog doesn't tell us where it lies in the filesystem.

I know! I'll search the documentation! /proc/sys/fs/epoll/..., yes?

btw, Documentation/sysctl/fs.txt is missing documentation for max_user_instances and max_queued_events. Perhaps you can fix that when providing the documentation changes for your patch :)

Sure, I'll provide the docs patch on top. Thanks!

Cyrill

#21 lore raw

Re: [patch 7/7] fs, notify: Add procfs fdinfo helper v6

In reply to Andrew Morton
Quoted 16 lines · Andrew Morton
Quoted 5 lines
 | pos:	0
 | flags:	02000000
 | inotify wd:        3 ino:             9e7e
 | inotify wd:        2 ino:             a111
 | inotify wd:        1 ino:            6b149[...]

This is a lousy output format. It's sort-of like a sensible set of name-value tuples: "name:value name:value name:value" but

c) inotify-wd is secretly printed in decimal while everything else is in hex.

What happens if we do something like the below (which will require a changelog update)?

fs/notify/fdinfo.c static int show_mark_fhandle(struct seq_ · line 63

Quoted 6 lines
fs/notify/fdinfo.c renamed from fs/notify/fdinfo.c~fs-notify-add-procfs-fdinfo-helper-v6-fix +1 -1
@@ -59,7 +59,7 @@ static int show_mark_fhandle(struct seq_
 	f.handle.handle_type = ret;
 	f.handle.handle_bytes = size * sizeof(u32);
 
-	ret = seq_printf(m, "fhandle-bytes: %8x fhandle-type: %8x f_handle: ",
+	ret = seq_printf(m, "fhandle-bytes:%x fhandle-type:%x f_handle:",
 			 f.handle.handle_bytes, f.handle.handle_type);

Why don't we actually make sure to print a 0x prefix when it's hex and 0 on octal? Then it should be clear what base these lines are in. (That would also be a good idea for the rest of procfs files, but I reckon they cannot be easily changed.)

#22 lore raw

Re: [patch 7/7] fs, notify: Add procfs fdinfo helper v6

Quoted 8 lines · Jan Engelhardt
Quoted 6 lines · Andrew Morton
Quoted 5 lines
 | pos:	0
 | flags:	02000000
 | inotify wd:        3 ino:             9e7e
 | inotify wd:        2 ino:             a111
 | inotify wd:        1 ino:            6b149[...]
Quoted 5 lines
Quoted 5 lines

This is a lousy output format. It's sort-of like a sensible set of name-value tuples: "name:value name:value name:value" but

c) inotify-wd is secretly printed in decimal while everything else is in hex.

Hi Jan, not secretly, actually, the patch for documentation in -mm tree, where the format is described.

Quoted 3 lines
Quoted 3 lines

What happens if we do something like the below (which will require a changelog update)?

It's already there :) Andrew pointed to same nit and we've updated the format. The final one, which sits in -mm is

	ret = seq_printf(m, "fhandle-bytes:%x fhandle-type:%x f_handle:",
			 f.handle.handle_bytes, f.handle.handle_type);
Quoted 5 lines
Quoted 5 lines
fs/notify/fdinfo.c renamed from fs/notify/fdinfo.c~fs-notify-add-procfs-fdinfo-helper-v6-fix +0 -0
@@ -59,7 +59,7 @@ static int show_mark_fhandle(struct seq_
 	f.handle.handle_type = ret;
 	f.handle.handle_bytes = size * sizeof(u32);
 
Quoted 8 lines

fs/notify/fdinfo.c static int show_mark_fhandle(struct seq_ · line 63

Quoted 3 lines
fs/notify/fdinfo.c renamed from fs/notify/fdinfo.c~fs-notify-add-procfs-fdinfo-helper-v6-fix +1 -1
-	ret = seq_printf(m, "fhandle-bytes: %8x fhandle-type: %8x f_handle: ",
+	ret = seq_printf(m, "fhandle-bytes:%x fhandle-type:%x f_handle:",
 			 f.handle.handle_bytes, f.handle.handle_type);

Why don't we actually make sure to print a 0x prefix when it's hex and 0 on octal? Then it should be clear what base these lines are in. (That would also be a good idea for the rest of procfs files, but I reckon they cannot be easily changed.)

Sounds good for me. If Andrew won't mind I'll update.

Cyrill

#23 lore raw

Re: [patch 7/7] fs, notify: Add procfs fdinfo helper v6

In reply to Cyrill Gorcunov
Quoted 2 lines · On Wed, 14 Nov 2012 19:19:44 +0400 Cyrill Gorcunov <[email protected]> wrote:

This allow us to print out fsnotify details such as watchee inode, device, mask and optionally a file handle.

This helps the compiler quite a lot:

fs/notify/fdinfo.c renamed from fs/notify/fdinfo.c~fs-notify-add-procfs-fdinfo-helper-v7-fix +2 -2
@@ -26,13 +26,13 @@ static int show_fdinfo(struct seq_file *
 	struct fsnotify_mark *mark;
 	int ret = 0;
 
-	spin_lock(&group->mark_lock);
+	mutex_lock(&group->mark_mutex);
 	list_for_each_entry(mark, &group->marks_list, g_list) {
 		ret = show(m, mark);
 		if (ret)
 			break;
 	}
-	spin_unlock(&group->mark_lock);
+	mutex_unlock(&group->mark_mutex);
 	return ret;
 }
 

But I rather worry that the code which you sent clearly wasn't the code which you tested. Please retest and confirm that I now have the correct code?