All of lore.kernel.org
 help / color / mirror / Atom feed
* [patch 0/7] Providing additional information in fdinfo sufficient for c/r, v3
@ 2012-11-14 15:19 Cyrill Gorcunov
  2012-11-14 15:19 ` [patch 1/7] procfs: Add ability to plug in auxiliary fdinfo providers Cyrill Gorcunov
                   ` (6 more replies)
  0 siblings, 7 replies; 24+ messages in thread
From: Cyrill Gorcunov @ 2012-11-14 15:19 UTC (permalink / raw)
  To: linux-kernel, linux-fsdevel
  Cc: Al Viro, Alexey Dobriyan, Andrew Morton, Pavel Emelyanov,
	James Bottomley, Matthew Helsley, aneesh.kumar, bfields, oleg,
	rientjes, tvrtko.ursulin

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

^ permalink raw reply	[flat|nested] 24+ messages in thread

* [patch 1/7] procfs: Add ability to plug in auxiliary fdinfo providers
  2012-11-14 15:19 [patch 0/7] Providing additional information in fdinfo sufficient for c/r, v3 Cyrill Gorcunov
@ 2012-11-14 15:19 ` Cyrill Gorcunov
  2012-11-15 13:47   ` Pavel Emelyanov
  2012-11-14 15:19 ` [patch 2/7] fs, eventfd: Add procfs fdinfo helper Cyrill Gorcunov
                   ` (5 subsequent siblings)
  6 siblings, 1 reply; 24+ messages in thread
From: Cyrill Gorcunov @ 2012-11-14 15:19 UTC (permalink / raw)
  To: linux-kernel, linux-fsdevel
  Cc: Al Viro, Alexey Dobriyan, Andrew Morton, Pavel Emelyanov,
	James Bottomley, Matthew Helsley, aneesh.kumar, bfields, oleg,
	rientjes, tvrtko.ursulin, Cyrill Gorcunov, Andrey Vagin, Al Viro

[-- Attachment #1: seq-fdinfo-seq-ops-helpers-12 --]
[-- Type: text/plain, Size: 2573 bytes --]

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).

Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
CC: Pavel Emelyanov <xemul@parallels.com>
CC: Oleg Nesterov <oleg@redhat.com>
CC: Andrey Vagin <avagin@openvz.org>
CC: Al Viro <viro@ZenIV.linux.org.uk>
CC: Alexey Dobriyan <adobriyan@gmail.com>
CC: Andrew Morton <akpm@linux-foundation.org>
CC: James Bottomley <jbottomley@parallels.com>
CC: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
CC: Alexey Dobriyan <adobriyan@gmail.com>
CC: Matthew Helsley <matt.helsley@gmail.com>
CC: "J. Bruce Fields" <bfields@fieldses.org>
CC: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
CC: Tvrtko Ursulin <tvrtko.ursulin@onelan.co.uk>
---
 fs/proc/fd.c       |    2 ++
 include/linux/fs.h |    4 ++--
 2 files changed, 4 insertions(+), 2 deletions(-)

Index: linux-2.6.git/fs/proc/fd.c
===================================================================
--- linux-2.6.git.orig/fs/proc/fd.c
+++ 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);
 	}
 
Index: linux-2.6.git/include/linux/fs.h
===================================================================
--- linux-2.6.git.orig/include/linux/fs.h
+++ 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,


^ permalink raw reply	[flat|nested] 24+ messages in thread

* [patch 2/7] fs, eventfd: Add procfs fdinfo helper
  2012-11-14 15:19 [patch 0/7] Providing additional information in fdinfo sufficient for c/r, v3 Cyrill Gorcunov
  2012-11-14 15:19 ` [patch 1/7] procfs: Add ability to plug in auxiliary fdinfo providers Cyrill Gorcunov
@ 2012-11-14 15:19 ` Cyrill Gorcunov
  2012-11-15 13:48   ` Pavel Emelyanov
  2012-11-14 15:19 ` [patch 3/7] fs, epoll: Add procfs fdinfo helper v2 Cyrill Gorcunov
                   ` (4 subsequent siblings)
  6 siblings, 1 reply; 24+ messages in thread
From: Cyrill Gorcunov @ 2012-11-14 15:19 UTC (permalink / raw)
  To: linux-kernel, linux-fsdevel
  Cc: Al Viro, Alexey Dobriyan, Andrew Morton, Pavel Emelyanov,
	James Bottomley, Matthew Helsley, aneesh.kumar, bfields, oleg,
	rientjes, tvrtko.ursulin, Cyrill Gorcunov, Andrey Vagin, Al Viro

[-- Attachment #1: seq-fdinfo-eventfd-7 --]
[-- Type: text/plain, Size: 1849 bytes --]

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

 | pos:	0
 | flags:	04002
 | eventfd-count:               5a

Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
CC: Pavel Emelyanov <xemul@parallels.com>
CC: Oleg Nesterov <oleg@redhat.com>
CC: Andrey Vagin <avagin@openvz.org>
CC: Al Viro <viro@ZenIV.linux.org.uk>
CC: Alexey Dobriyan <adobriyan@gmail.com>
CC: Andrew Morton <akpm@linux-foundation.org>
CC: James Bottomley <jbottomley@parallels.com>
CC: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
CC: Alexey Dobriyan <adobriyan@gmail.com>
CC: Matthew Helsley <matt.helsley@gmail.com>
CC: "J. Bruce Fields" <bfields@fieldses.org>
CC: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
CC: Tvrtko Ursulin <tvrtko.ursulin@onelan.co.uk>
---
 fs/eventfd.c |   20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

Index: linux-2.6.git/fs/eventfd.c
===================================================================
--- linux-2.6.git.orig/fs/eventfd.c
+++ 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,


^ permalink raw reply	[flat|nested] 24+ messages in thread

* [patch 3/7] fs, epoll: Add procfs fdinfo helper v2
  2012-11-14 15:19 [patch 0/7] Providing additional information in fdinfo sufficient for c/r, v3 Cyrill Gorcunov
  2012-11-14 15:19 ` [patch 1/7] procfs: Add ability to plug in auxiliary fdinfo providers Cyrill Gorcunov
  2012-11-14 15:19 ` [patch 2/7] fs, eventfd: Add procfs fdinfo helper Cyrill Gorcunov
@ 2012-11-14 15:19 ` Cyrill Gorcunov
  2012-11-15 13:49   ` Pavel Emelyanov
  2012-11-14 15:19 ` [patch 4/7] fdinfo: Show sigmask for signalfd fd v3 Cyrill Gorcunov
                   ` (3 subsequent siblings)
  6 siblings, 1 reply; 24+ messages in thread
From: Cyrill Gorcunov @ 2012-11-14 15:19 UTC (permalink / raw)
  To: linux-kernel, linux-fsdevel
  Cc: Al Viro, Alexey Dobriyan, Andrew Morton, Pavel Emelyanov,
	James Bottomley, Matthew Helsley, aneesh.kumar, bfields, oleg,
	rientjes, tvrtko.ursulin, Cyrill Gorcunov, Andrey Vagin, Al Viro

[-- Attachment #1: seq-fdinfo-eventpoll-8 --]
[-- Type: text/plain, Size: 2287 bytes --]

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]

Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
CC: Pavel Emelyanov <xemul@parallels.com>
CC: Oleg Nesterov <oleg@redhat.com>
CC: Andrey Vagin <avagin@openvz.org>
CC: Al Viro <viro@ZenIV.linux.org.uk>
CC: Alexey Dobriyan <adobriyan@gmail.com>
CC: Andrew Morton <akpm@linux-foundation.org>
CC: James Bottomley <jbottomley@parallels.com>
CC: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
CC: Alexey Dobriyan <adobriyan@gmail.com>
CC: Matthew Helsley <matt.helsley@gmail.com>
CC: "J. Bruce Fields" <bfields@fieldses.org>
CC: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
CC: Tvrtko Ursulin <tvrtko.ursulin@onelan.co.uk>
---
 fs/eventpoll.c |   29 +++++++++++++++++++++++++++++
 1 file changed, 29 insertions(+)

Index: linux-2.6.git/fs/eventpoll.c
===================================================================
--- linux-2.6.git.orig/fs/eventpoll.c
+++ 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,


^ permalink raw reply	[flat|nested] 24+ messages in thread

* [patch 4/7] fdinfo: Show sigmask for signalfd fd v3
  2012-11-14 15:19 [patch 0/7] Providing additional information in fdinfo sufficient for c/r, v3 Cyrill Gorcunov
                   ` (2 preceding siblings ...)
  2012-11-14 15:19 ` [patch 3/7] fs, epoll: Add procfs fdinfo helper v2 Cyrill Gorcunov
@ 2012-11-14 15:19 ` Cyrill Gorcunov
  2012-11-15 13:49   ` Pavel Emelyanov
  2012-11-14 15:19 ` [patch 5/7] fs, exportfs: Escape nil dereference if no s_export_op present Cyrill Gorcunov
                   ` (2 subsequent siblings)
  6 siblings, 1 reply; 24+ messages in thread
From: Cyrill Gorcunov @ 2012-11-14 15:19 UTC (permalink / raw)
  To: linux-kernel, linux-fsdevel
  Cc: Al Viro, Alexey Dobriyan, Andrew Morton, Pavel Emelyanov,
	James Bottomley, Matthew Helsley, aneesh.kumar, bfields, oleg,
	rientjes, tvrtko.ursulin, Cyrill Gorcunov, Andrey Vagin, Al Viro

[-- Attachment #1: seq-fdinfo-signalfd-5 --]
[-- Type: text/plain, Size: 2806 bytes --]

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.

Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
CC: Pavel Emelyanov <xemul@parallels.com>
CC: Oleg Nesterov <oleg@redhat.com>
CC: Andrey Vagin <avagin@openvz.org>
CC: Al Viro <viro@ZenIV.linux.org.uk>
CC: Alexey Dobriyan <adobriyan@gmail.com>
CC: Andrew Morton <akpm@linux-foundation.org>
CC: James Bottomley <jbottomley@parallels.com>
CC: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
CC: Alexey Dobriyan <adobriyan@gmail.com>
CC: Matthew Helsley <matt.helsley@gmail.com>
CC: "J. Bruce Fields" <bfields@fieldses.org>
CC: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
CC: Tvrtko Ursulin <tvrtko.ursulin@onelan.co.uk>
---
 fs/proc/array.c         |    2 +-
 fs/signalfd.c           |   18 ++++++++++++++++++
 include/linux/proc_fs.h |    3 +++
 3 files changed, 22 insertions(+), 1 deletion(-)

Index: linux-2.6.git/fs/proc/array.c
===================================================================
--- linux-2.6.git.orig/fs/proc/array.c
+++ 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;
Index: linux-2.6.git/fs/signalfd.c
===================================================================
--- linux-2.6.git.orig/fs/signalfd.c
+++ 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,
Index: linux-2.6.git/include/linux/proc_fs.h
===================================================================
--- linux-2.6.git.orig/include/linux/proc_fs.h
+++ 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 */


^ permalink raw reply	[flat|nested] 24+ messages in thread

* [patch 5/7] fs, exportfs: Escape nil dereference if no s_export_op present
  2012-11-14 15:19 [patch 0/7] Providing additional information in fdinfo sufficient for c/r, v3 Cyrill Gorcunov
                   ` (3 preceding siblings ...)
  2012-11-14 15:19 ` [patch 4/7] fdinfo: Show sigmask for signalfd fd v3 Cyrill Gorcunov
@ 2012-11-14 15:19 ` Cyrill Gorcunov
  2012-11-15 13:49   ` Pavel Emelyanov
  2012-11-14 15:19 ` [patch 6/7] fs, exportfs: Add exportfs_encode_inode_fh helper Cyrill Gorcunov
  2012-11-14 15:19 ` [patch 7/7] fs, notify: Add procfs fdinfo helper v6 Cyrill Gorcunov
  6 siblings, 1 reply; 24+ messages in thread
From: Cyrill Gorcunov @ 2012-11-14 15:19 UTC (permalink / raw)
  To: linux-kernel, linux-fsdevel
  Cc: Al Viro, Alexey Dobriyan, Andrew Morton, Pavel Emelyanov,
	James Bottomley, Matthew Helsley, aneesh.kumar, bfields, oleg,
	rientjes, tvrtko.ursulin, Cyrill Gorcunov, Andrey Vagin, Al Viro

[-- Attachment #1: fs-exportfs-add-null-check --]
[-- Type: text/plain, Size: 1426 bytes --]

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.

Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
CC: Pavel Emelyanov <xemul@parallels.com>
CC: Oleg Nesterov <oleg@redhat.com>
CC: Andrey Vagin <avagin@openvz.org>
CC: Al Viro <viro@ZenIV.linux.org.uk>
CC: Alexey Dobriyan <adobriyan@gmail.com>
CC: Andrew Morton <akpm@linux-foundation.org>
CC: James Bottomley <jbottomley@parallels.com>
CC: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
CC: Alexey Dobriyan <adobriyan@gmail.com>
CC: Matthew Helsley <matt.helsley@gmail.com>
CC: "J. Bruce Fields" <bfields@fieldses.org>
CC: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
CC: Tvrtko Ursulin <tvrtko.ursulin@onelan.co.uk>
---
 fs/exportfs/expfs.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Index: linux-2.6.git/fs/exportfs/expfs.c
===================================================================
--- linux-2.6.git.orig/fs/exportfs/expfs.c
+++ 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);


^ permalink raw reply	[flat|nested] 24+ messages in thread

* [patch 6/7] fs, exportfs: Add exportfs_encode_inode_fh helper
  2012-11-14 15:19 [patch 0/7] Providing additional information in fdinfo sufficient for c/r, v3 Cyrill Gorcunov
                   ` (4 preceding siblings ...)
  2012-11-14 15:19 ` [patch 5/7] fs, exportfs: Escape nil dereference if no s_export_op present Cyrill Gorcunov
@ 2012-11-14 15:19 ` Cyrill Gorcunov
  2012-11-14 17:37   ` J. Bruce Fields
  2012-11-14 15:19 ` [patch 7/7] fs, notify: Add procfs fdinfo helper v6 Cyrill Gorcunov
  6 siblings, 1 reply; 24+ messages in thread
From: Cyrill Gorcunov @ 2012-11-14 15:19 UTC (permalink / raw)
  To: linux-kernel, linux-fsdevel
  Cc: Al Viro, Alexey Dobriyan, Andrew Morton, Pavel Emelyanov,
	James Bottomley, Matthew Helsley, aneesh.kumar, bfields, oleg,
	rientjes, tvrtko.ursulin, Cyrill Gorcunov, Andrey Vagin, Al Viro

[-- Attachment #1: expfs-add-exportfs_encode_inode_fh --]
[-- Type: text/plain, Size: 2901 bytes --]

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).

Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
CC: Pavel Emelyanov <xemul@parallels.com>
CC: Oleg Nesterov <oleg@redhat.com>
CC: Andrey Vagin <avagin@openvz.org>
CC: Al Viro <viro@ZenIV.linux.org.uk>
CC: Alexey Dobriyan <adobriyan@gmail.com>
CC: Andrew Morton <akpm@linux-foundation.org>
CC: James Bottomley <jbottomley@parallels.com>
CC: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
CC: Alexey Dobriyan <adobriyan@gmail.com>
CC: Matthew Helsley <matt.helsley@gmail.com>
CC: "J. Bruce Fields" <bfields@fieldses.org>
CC: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
CC: Tvrtko Ursulin <tvrtko.ursulin@onelan.co.uk>
---
 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
===================================================================
--- linux-2.6.git.orig/fs/exportfs/expfs.c
+++ 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;
Index: linux-2.6.git/include/linux/exportfs.h
===================================================================
--- linux-2.6.git.orig/include/linux/exportfs.h
+++ 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,


^ permalink raw reply	[flat|nested] 24+ messages in thread

* [patch 7/7] fs, notify: Add procfs fdinfo helper v6
  2012-11-14 15:19 [patch 0/7] Providing additional information in fdinfo sufficient for c/r, v3 Cyrill Gorcunov
                   ` (5 preceding siblings ...)
  2012-11-14 15:19 ` [patch 6/7] fs, exportfs: Add exportfs_encode_inode_fh helper Cyrill Gorcunov
@ 2012-11-14 15:19 ` Cyrill Gorcunov
  2012-11-15 13:50   ` Pavel Emelyanov
                     ` (2 more replies)
  6 siblings, 3 replies; 24+ messages in thread
From: Cyrill Gorcunov @ 2012-11-14 15:19 UTC (permalink / raw)
  To: linux-kernel, linux-fsdevel
  Cc: Al Viro, Alexey Dobriyan, Andrew Morton, Pavel Emelyanov,
	James Bottomley, Matthew Helsley, aneesh.kumar, bfields, oleg,
	rientjes, tvrtko.ursulin, Cyrill Gorcunov, Andrey Vagin, Al Viro

[-- Attachment #1: seq-fdinfo-fsnotify-10 --]
[-- Type: text/plain, Size: 8715 bytes --]

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.

Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
CC: Pavel Emelyanov <xemul@parallels.com>
CC: Oleg Nesterov <oleg@redhat.com>
CC: Andrey Vagin <avagin@openvz.org>
CC: Al Viro <viro@ZenIV.linux.org.uk>
CC: Alexey Dobriyan <adobriyan@gmail.com>
CC: Andrew Morton <akpm@linux-foundation.org>
CC: James Bottomley <jbottomley@parallels.com>
CC: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
CC: Alexey Dobriyan <adobriyan@gmail.com>
CC: Matthew Helsley <matt.helsley@gmail.com>
CC: "J. Bruce Fields" <bfields@fieldses.org>
CC: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
CC: Tvrtko Ursulin <tvrtko.ursulin@onelan.co.uk>
---
 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(-)

Index: linux-2.6.git/fs/notify/Makefile
===================================================================
--- linux-2.6.git.orig/fs/notify/Makefile
+++ 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/
Index: linux-2.6.git/fs/notify/fanotify/fanotify_user.c
===================================================================
--- linux-2.6.git.orig/fs/notify/fanotify/fanotify_user.c
+++ 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,
Index: linux-2.6.git/fs/notify/fdinfo.c
===================================================================
--- /dev/null
+++ linux-2.6.git/fs/notify/fdinfo.c
@@ -0,0 +1,152 @@
+#include <linux/file.h>
+#include <linux/fs.h>
+#include <linux/fsnotify_backend.h>
+#include <linux/idr.h>
+#include <linux/init.h>
+#include <linux/inotify.h>
+#include <linux/kernel.h>
+#include <linux/namei.h>
+#include <linux/sched.h>
+#include <linux/types.h>
+#include <linux/seq_file.h>
+#include <linux/proc_fs.h>
+#include <linux/exportfs.h>
+
+#include "inotify/inotify.h"
+#include "../fs/mount.h"
+
+#if defined(CONFIG_PROC_FS)
+
+#if defined(CONFIG_INOTIFY_USER) || defined(CONFIG_FANOTIFY)
+
+static int show_fdinfo(struct seq_file *m, struct file *f,
+		       int (*show)(struct seq_file *m, struct fsnotify_mark *mark))
+{
+	struct fsnotify_group *group = f->private_data;
+	struct fsnotify_mark *mark;
+	int ret = 0;
+
+	spin_lock(&group->mark_lock);
+	list_for_each_entry(mark, &group->marks_list, g_list) {
+		ret = show(m, mark);
+		if (ret)
+			break;
+	}
+	spin_unlock(&group->mark_lock);
+	return ret;
+}
+
+#ifdef CONFIG_INOTIFY_USER
+
+#if defined(CONFIG_EXPORTFS)
+static int show_mark_fhandle(struct seq_file *m, struct inode *inode)
+{
+	struct {
+		struct file_handle handle;
+		u8 pad[64];
+	} f;
+	int size, ret, i;
+
+	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);
+	if ((ret == 255) || (ret == -ENOSPC)) {
+		WARN_ONCE(1, "Can't encode file handler for inotify: %d\n", ret);
+		return 0;
+	}
+
+	f.handle.handle_type = ret;
+	f.handle.handle_bytes = size * sizeof(u32);
+
+	ret = seq_printf(m, "fhandle-bytes: %8x fhandle-type: %8x f_handle: ",
+			 f.handle.handle_bytes, f.handle.handle_type);
+
+	for (i = 0; i < f.handle.handle_bytes; i++)
+		ret |= seq_printf(m, "%02x", (int)f.handle.f_handle[i]);
+
+	return ret;
+}
+#else
+static int show_mark_fhandle(struct seq_file *m, struct inode *inode)
+{
+	return 0;
+}
+#endif
+
+static int inotify_fdinfo(struct seq_file *m, struct fsnotify_mark *mark)
+{
+	struct inotify_inode_mark *inode_mark;
+	struct inode *inode;
+	int ret = 0;
+
+	if (!(mark->flags & (FSNOTIFY_MARK_FLAG_ALIVE | FSNOTIFY_MARK_FLAG_INODE)))
+		return 0;
+
+	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 ",
+				 inode_mark->wd, inode->i_ino,
+				 inode->i_sb->s_dev,
+				 mark->mask, mark->ignored_mask);
+		ret |= show_mark_fhandle(m, inode);
+		ret |= seq_putc(m, '\n');
+		iput(inode);
+	}
+
+	return ret;
+}
+
+int inotify_show_fdinfo(struct seq_file *m, struct file *f)
+{
+	return show_fdinfo(m, f, inotify_fdinfo);
+}
+
+#endif /* CONFIG_INOTIFY_USER */
+
+#ifdef CONFIG_FANOTIFY
+
+static int fanotify_fdinfo(struct seq_file *m, struct fsnotify_mark *mark)
+{
+	struct inode *inode;
+	int ret = 0;
+
+	if (!(mark->flags & FSNOTIFY_MARK_FLAG_ALIVE))
+		return 0;
+
+	if (mark->flags & FSNOTIFY_MARK_FLAG_INODE) {
+		inode = igrab(mark->i.inode);
+		if (!inode)
+			goto out;
+		ret = seq_printf(m, "fanotify ino: %16lx sdev: %8x "
+				 "mask: %8x ignored_mask: %8x\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",
+				 mnt->mnt_id, mark->mask, mark->ignored_mask);
+	}
+out:
+	return ret;
+}
+
+int fanotify_show_fdinfo(struct seq_file *m, struct file *f)
+{
+	return show_fdinfo(m, f, fanotify_fdinfo);
+}
+
+#endif /* CONFIG_FANOTIFY */
+
+#endif /* CONFIG_INOTIFY_USER || CONFIG_FANOTIFY */
+
+#else /* CONFIG_PROC_FS */
+
+#define inotify_show_fdinfo	NULL
+#define fanotify_show_fdinfo	NULL
+
+#endif /* CONFIG_PROC_FS */
Index: linux-2.6.git/fs/notify/fdinfo.h
===================================================================
--- /dev/null
+++ 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__ */
Index: linux-2.6.git/fs/notify/inotify/inotify_user.c
===================================================================
--- linux-2.6.git.orig/fs/notify/inotify/inotify_user.c
+++ 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,


^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [patch 6/7] fs, exportfs: Add exportfs_encode_inode_fh helper
  2012-11-14 15:19 ` [patch 6/7] fs, exportfs: Add exportfs_encode_inode_fh helper Cyrill Gorcunov
@ 2012-11-14 17:37   ` J. Bruce Fields
  2012-11-15 13:50     ` Pavel Emelyanov
  0 siblings, 1 reply; 24+ messages in thread
From: J. Bruce Fields @ 2012-11-14 17:37 UTC (permalink / raw)
  To: Cyrill Gorcunov
  Cc: linux-kernel, linux-fsdevel, Al Viro, Alexey Dobriyan,
	Andrew Morton, Pavel Emelyanov, James Bottomley, Matthew Helsley,
	aneesh.kumar, oleg, rientjes, tvrtko.ursulin, Andrey Vagin

On Wed, Nov 14, 2012 at 07:19:43PM +0400, Cyrill Gorcunov wrote:
> 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.

> 
> Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
> CC: Pavel Emelyanov <xemul@parallels.com>
> CC: Oleg Nesterov <oleg@redhat.com>
> CC: Andrey Vagin <avagin@openvz.org>
> CC: Al Viro <viro@ZenIV.linux.org.uk>
> CC: Alexey Dobriyan <adobriyan@gmail.com>
> CC: Andrew Morton <akpm@linux-foundation.org>
> CC: James Bottomley <jbottomley@parallels.com>
> CC: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
> CC: Alexey Dobriyan <adobriyan@gmail.com>
> CC: Matthew Helsley <matt.helsley@gmail.com>
> CC: "J. Bruce Fields" <bfields@fieldses.org>
> CC: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
> CC: Tvrtko Ursulin <tvrtko.ursulin@onelan.co.uk>
> ---
>  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
> ===================================================================
> --- linux-2.6.git.orig/fs/exportfs/expfs.c
> +++ 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;
> Index: linux-2.6.git/include/linux/exportfs.h
> ===================================================================
> --- linux-2.6.git.orig/include/linux/exportfs.h
> +++ 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,
> 

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [patch 1/7] procfs: Add ability to plug in auxiliary fdinfo providers
  2012-11-14 15:19 ` [patch 1/7] procfs: Add ability to plug in auxiliary fdinfo providers Cyrill Gorcunov
@ 2012-11-15 13:47   ` Pavel Emelyanov
  0 siblings, 0 replies; 24+ messages in thread
From: Pavel Emelyanov @ 2012-11-15 13:47 UTC (permalink / raw)
  To: Cyrill Gorcunov, Al Viro, Andrew Morton
  Cc: linux-kernel, linux-fsdevel, Alexey Dobriyan, James Bottomley,
	Matthew Helsley, aneesh.kumar, bfields, oleg, rientjes,
	tvrtko.ursulin, Andrey Vagin

> 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).
> 
> Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
> CC: Pavel Emelyanov <xemul@parallels.com>
> CC: Oleg Nesterov <oleg@redhat.com>
> CC: Andrey Vagin <avagin@openvz.org>
> CC: Al Viro <viro@ZenIV.linux.org.uk>
> CC: Alexey Dobriyan <adobriyan@gmail.com>
> CC: Andrew Morton <akpm@linux-foundation.org>
> CC: James Bottomley <jbottomley@parallels.com>
> CC: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
> CC: Alexey Dobriyan <adobriyan@gmail.com>
> CC: Matthew Helsley <matt.helsley@gmail.com>
> CC: "J. Bruce Fields" <bfields@fieldses.org>
> CC: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
> CC: Tvrtko Ursulin <tvrtko.ursulin@onelan.co.uk>
> ---
>  fs/proc/fd.c       |    2 ++
>  include/linux/fs.h |    4 ++--
>  2 files changed, 4 insertions(+), 2 deletions(-)

Acked-by: Pavel Emelyanov <xemul@parallels.com>

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [patch 2/7] fs, eventfd: Add procfs fdinfo helper
  2012-11-14 15:19 ` [patch 2/7] fs, eventfd: Add procfs fdinfo helper Cyrill Gorcunov
@ 2012-11-15 13:48   ` Pavel Emelyanov
  0 siblings, 0 replies; 24+ messages in thread
From: Pavel Emelyanov @ 2012-11-15 13:48 UTC (permalink / raw)
  To: Cyrill Gorcunov, Al Viro, Andrew Morton
  Cc: linux-kernel, linux-fsdevel, Alexey Dobriyan, James Bottomley,
	Matthew Helsley, aneesh.kumar, bfields, oleg, rientjes,
	tvrtko.ursulin, Andrey Vagin

> This allow us to print out raw counter value.
> The /proc/pid/fdinfo/fd output is
> 
>  | pos:	0
>  | flags:	04002
>  | eventfd-count:               5a
> 
> Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
> CC: Pavel Emelyanov <xemul@parallels.com>
> CC: Oleg Nesterov <oleg@redhat.com>
> CC: Andrey Vagin <avagin@openvz.org>
> CC: Al Viro <viro@ZenIV.linux.org.uk>
> CC: Alexey Dobriyan <adobriyan@gmail.com>
> CC: Andrew Morton <akpm@linux-foundation.org>
> CC: James Bottomley <jbottomley@parallels.com>
> CC: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
> CC: Alexey Dobriyan <adobriyan@gmail.com>
> CC: Matthew Helsley <matt.helsley@gmail.com>
> CC: "J. Bruce Fields" <bfields@fieldses.org>
> CC: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
> CC: Tvrtko Ursulin <tvrtko.ursulin@onelan.co.uk>
> ---

Acked-by: Pavel Emelyanov <xemul@parallels.com>

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [patch 3/7] fs, epoll: Add procfs fdinfo helper v2
  2012-11-14 15:19 ` [patch 3/7] fs, epoll: Add procfs fdinfo helper v2 Cyrill Gorcunov
@ 2012-11-15 13:49   ` Pavel Emelyanov
  0 siblings, 0 replies; 24+ messages in thread
From: Pavel Emelyanov @ 2012-11-15 13:49 UTC (permalink / raw)
  To: Cyrill Gorcunov, Al Viro, Andrew Morton
  Cc: linux-kernel, linux-fsdevel, Alexey Dobriyan, James Bottomley,
	Matthew Helsley, aneesh.kumar, bfields, oleg, rientjes,
	tvrtko.ursulin, Andrey Vagin

On 11/14/2012 07:19 PM, Cyrill Gorcunov wrote:
> 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]
> 
> Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
> CC: Pavel Emelyanov <xemul@parallels.com>
> CC: Oleg Nesterov <oleg@redhat.com>
> CC: Andrey Vagin <avagin@openvz.org>
> CC: Al Viro <viro@ZenIV.linux.org.uk>
> CC: Alexey Dobriyan <adobriyan@gmail.com>
> CC: Andrew Morton <akpm@linux-foundation.org>
> CC: James Bottomley <jbottomley@parallels.com>
> CC: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
> CC: Alexey Dobriyan <adobriyan@gmail.com>
> CC: Matthew Helsley <matt.helsley@gmail.com>
> CC: "J. Bruce Fields" <bfields@fieldses.org>
> CC: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
> CC: Tvrtko Ursulin <tvrtko.ursulin@onelan.co.uk>

Acked-by: Pavel Emelyanov <xemul@parallels.com>

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [patch 4/7] fdinfo: Show sigmask for signalfd fd v3
  2012-11-14 15:19 ` [patch 4/7] fdinfo: Show sigmask for signalfd fd v3 Cyrill Gorcunov
@ 2012-11-15 13:49   ` Pavel Emelyanov
  0 siblings, 0 replies; 24+ messages in thread
From: Pavel Emelyanov @ 2012-11-15 13:49 UTC (permalink / raw)
  To: Cyrill Gorcunov
  Cc: linux-kernel, linux-fsdevel, Al Viro, Alexey Dobriyan,
	Andrew Morton, James Bottomley, Matthew Helsley, aneesh.kumar,
	bfields, oleg, rientjes, tvrtko.ursulin, Andrey Vagin

On 11/14/2012 07:19 PM, Cyrill Gorcunov wrote:
> 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.
> 
> Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
> CC: Pavel Emelyanov <xemul@parallels.com>
> CC: Oleg Nesterov <oleg@redhat.com>
> CC: Andrey Vagin <avagin@openvz.org>
> CC: Al Viro <viro@ZenIV.linux.org.uk>
> CC: Alexey Dobriyan <adobriyan@gmail.com>
> CC: Andrew Morton <akpm@linux-foundation.org>
> CC: James Bottomley <jbottomley@parallels.com>
> CC: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
> CC: Alexey Dobriyan <adobriyan@gmail.com>
> CC: Matthew Helsley <matt.helsley@gmail.com>
> CC: "J. Bruce Fields" <bfields@fieldses.org>
> CC: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
> CC: Tvrtko Ursulin <tvrtko.ursulin@onelan.co.uk>
> ---
>  fs/proc/array.c         |    2 +-
>  fs/signalfd.c           |   18 ++++++++++++++++++
>  include/linux/proc_fs.h |    3 +++
>  3 files changed, 22 insertions(+), 1 deletion(-)


Acked-by: Pavel Emelyanov <xemul@parallels.com>

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [patch 5/7] fs, exportfs: Escape nil dereference if no s_export_op present
  2012-11-14 15:19 ` [patch 5/7] fs, exportfs: Escape nil dereference if no s_export_op present Cyrill Gorcunov
@ 2012-11-15 13:49   ` Pavel Emelyanov
  0 siblings, 0 replies; 24+ messages in thread
From: Pavel Emelyanov @ 2012-11-15 13:49 UTC (permalink / raw)
  To: Cyrill Gorcunov
  Cc: linux-kernel, linux-fsdevel, Al Viro, Alexey Dobriyan,
	Andrew Morton, James Bottomley, Matthew Helsley, aneesh.kumar,
	bfields, oleg, rientjes, tvrtko.ursulin, Andrey Vagin

On 11/14/2012 07:19 PM, Cyrill Gorcunov wrote:
> 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.
> 
> Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
> CC: Pavel Emelyanov <xemul@parallels.com>
> CC: Oleg Nesterov <oleg@redhat.com>
> CC: Andrey Vagin <avagin@openvz.org>
> CC: Al Viro <viro@ZenIV.linux.org.uk>
> CC: Alexey Dobriyan <adobriyan@gmail.com>
> CC: Andrew Morton <akpm@linux-foundation.org>
> CC: James Bottomley <jbottomley@parallels.com>
> CC: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
> CC: Alexey Dobriyan <adobriyan@gmail.com>
> CC: Matthew Helsley <matt.helsley@gmail.com>
> CC: "J. Bruce Fields" <bfields@fieldses.org>
> CC: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
> CC: Tvrtko Ursulin <tvrtko.ursulin@onelan.co.uk>
> ---


Acked-by: Pavel Emelyanov <xemul@parallels.com>

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [patch 6/7] fs, exportfs: Add exportfs_encode_inode_fh helper
  2012-11-14 17:37   ` J. Bruce Fields
@ 2012-11-15 13:50     ` Pavel Emelyanov
  0 siblings, 0 replies; 24+ messages in thread
From: Pavel Emelyanov @ 2012-11-15 13:50 UTC (permalink / raw)
  To: J. Bruce Fields, Al Viro, Andrew Morton
  Cc: Cyrill Gorcunov, linux-kernel, linux-fsdevel, Alexey Dobriyan,
	James Bottomley, Matthew Helsley, aneesh.kumar, oleg, rientjes,
	tvrtko.ursulin, Andrey Vagin

On 11/14/2012 09:37 PM, J. Bruce Fields wrote:
> On Wed, Nov 14, 2012 at 07:19:43PM +0400, Cyrill Gorcunov wrote:
>> 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!

>>
>> Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
>> CC: Pavel Emelyanov <xemul@parallels.com>
>> CC: Oleg Nesterov <oleg@redhat.com>
>> CC: Andrey Vagin <avagin@openvz.org>
>> CC: Al Viro <viro@ZenIV.linux.org.uk>
>> CC: Alexey Dobriyan <adobriyan@gmail.com>
>> CC: Andrew Morton <akpm@linux-foundation.org>
>> CC: James Bottomley <jbottomley@parallels.com>
>> CC: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
>> CC: Alexey Dobriyan <adobriyan@gmail.com>
>> CC: Matthew Helsley <matt.helsley@gmail.com>
>> CC: "J. Bruce Fields" <bfields@fieldses.org>
>> CC: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
>> CC: Tvrtko Ursulin <tvrtko.ursulin@onelan.co.uk>

Acked-by: Pavel Emelyanov <xemul@parallels.com>

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [patch 7/7] fs, notify: Add procfs fdinfo helper v6
  2012-11-14 15:19 ` [patch 7/7] fs, notify: Add procfs fdinfo helper v6 Cyrill Gorcunov
@ 2012-11-15 13:50   ` Pavel Emelyanov
  2012-11-16 23:56   ` Andrew Morton
  2012-11-27  0:41   ` Andrew Morton
  2 siblings, 0 replies; 24+ messages in thread
From: Pavel Emelyanov @ 2012-11-15 13:50 UTC (permalink / raw)
  To: Cyrill Gorcunov, Al Viro, Andrew Morton
  Cc: linux-kernel, linux-fsdevel, Alexey Dobriyan, James Bottomley,
	Matthew Helsley, aneesh.kumar, bfields, oleg, rientjes,
	tvrtko.ursulin, Andrey Vagin

> 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.
> 
> Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
> CC: Pavel Emelyanov <xemul@parallels.com>
> CC: Oleg Nesterov <oleg@redhat.com>
> CC: Andrey Vagin <avagin@openvz.org>
> CC: Al Viro <viro@ZenIV.linux.org.uk>
> CC: Alexey Dobriyan <adobriyan@gmail.com>
> CC: Andrew Morton <akpm@linux-foundation.org>
> CC: James Bottomley <jbottomley@parallels.com>
> CC: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
> CC: Alexey Dobriyan <adobriyan@gmail.com>
> CC: Matthew Helsley <matt.helsley@gmail.com>
> CC: "J. Bruce Fields" <bfields@fieldses.org>
> CC: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
> CC: Tvrtko Ursulin <tvrtko.ursulin@onelan.co.uk>

Acked-by: Pavel Emelyanov <xemul@parallels.com>

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [patch 7/7] fs, notify: Add procfs fdinfo helper v6
  2012-11-14 15:19 ` [patch 7/7] fs, notify: Add procfs fdinfo helper v6 Cyrill Gorcunov
  2012-11-15 13:50   ` Pavel Emelyanov
@ 2012-11-16 23:56   ` Andrew Morton
  2012-11-17  7:10     ` Cyrill Gorcunov
  2012-12-10  2:21     ` Jan Engelhardt
  2012-11-27  0:41   ` Andrew Morton
  2 siblings, 2 replies; 24+ messages in thread
From: Andrew Morton @ 2012-11-16 23:56 UTC (permalink / raw)
  To: Cyrill Gorcunov
  Cc: linux-kernel, linux-fsdevel, Al Viro, Alexey Dobriyan,
	Pavel Emelyanov, James Bottomley, Matthew Helsley, aneesh.kumar,
	bfields, oleg, rientjes, tvrtko.ursulin, Andrey Vagin

On Wed, 14 Nov 2012 19:19:44 +0400
Cyrill Gorcunov <gorcunov@openvz.org> 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)?

--- a/fs/notify/fdinfo.c~fs-notify-add-procfs-fdinfo-helper-v6-fix
+++ a/fs/notify/fdinfo.c
@@ -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:
_


^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [patch 7/7] fs, notify: Add procfs fdinfo helper v6
  2012-11-16 23:56   ` Andrew Morton
@ 2012-11-17  7:10     ` Cyrill Gorcunov
  2012-11-17  8:34       ` Cyrill Gorcunov
  2012-12-10  2:21     ` Jan Engelhardt
  1 sibling, 1 reply; 24+ messages in thread
From: Cyrill Gorcunov @ 2012-11-17  7:10 UTC (permalink / raw)
  To: Andrew Morton
  Cc: linux-kernel, linux-fsdevel, Al Viro, Alexey Dobriyan,
	Pavel Emelyanov, James Bottomley, Matthew Helsley, aneesh.kumar,
	bfields, oleg, rientjes, tvrtko.ursulin, Andrey Vagin

On Fri, Nov 16, 2012 at 03:56:03PM -0800, Andrew Morton wrote:
> 
> 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)?

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

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [patch 7/7] fs, notify: Add procfs fdinfo helper v6
  2012-11-17  7:10     ` Cyrill Gorcunov
@ 2012-11-17  8:34       ` Cyrill Gorcunov
  2012-11-20  0:49         ` Andrew Morton
  0 siblings, 1 reply; 24+ messages in thread
From: Cyrill Gorcunov @ 2012-11-17  8:34 UTC (permalink / raw)
  To: Andrew Morton
  Cc: linux-kernel, linux-fsdevel, Al Viro, Alexey Dobriyan,
	Pavel Emelyanov, James Bottomley, Matthew Helsley, aneesh.kumar,
	bfields, oleg, rientjes, tvrtko.ursulin, Andrey Vagin

On Sat, Nov 17, 2012 at 11:10:39AM +0400, Cyrill Gorcunov wrote:
> > 
> > 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 <gorcunov@openvz.org>
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.

Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Acked-by: Pavel Emelyanov <xemul@parallels.com>
CC: Oleg Nesterov <oleg@redhat.com>
CC: Andrey Vagin <avagin@openvz.org>
CC: Al Viro <viro@ZenIV.linux.org.uk>
CC: Alexey Dobriyan <adobriyan@gmail.com>
CC: Andrew Morton <akpm@linux-foundation.org>
CC: James Bottomley <jbottomley@parallels.com>
CC: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
CC: Alexey Dobriyan <adobriyan@gmail.com>
CC: Matthew Helsley <matt.helsley@gmail.com>
CC: "J. Bruce Fields" <bfields@fieldses.org>
CC: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
CC: Tvrtko Ursulin <tvrtko.ursulin@onelan.co.uk>
---

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(-)

Index: linux-2.6.git/fs/notify/Makefile
===================================================================
--- linux-2.6.git.orig/fs/notify/Makefile
+++ 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/
Index: linux-2.6.git/fs/notify/fanotify/fanotify_user.c
===================================================================
--- linux-2.6.git.orig/fs/notify/fanotify/fanotify_user.c
+++ 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,
Index: linux-2.6.git/fs/notify/fdinfo.c
===================================================================
--- /dev/null
+++ linux-2.6.git/fs/notify/fdinfo.c
@@ -0,0 +1,153 @@
+#include <linux/file.h>
+#include <linux/fs.h>
+#include <linux/fsnotify_backend.h>
+#include <linux/idr.h>
+#include <linux/init.h>
+#include <linux/inotify.h>
+#include <linux/kernel.h>
+#include <linux/namei.h>
+#include <linux/sched.h>
+#include <linux/types.h>
+#include <linux/seq_file.h>
+#include <linux/proc_fs.h>
+#include <linux/exportfs.h>
+
+#include "inotify/inotify.h"
+#include "../fs/mount.h"
+
+#if defined(CONFIG_PROC_FS)
+
+#if defined(CONFIG_INOTIFY_USER) || defined(CONFIG_FANOTIFY)
+
+static int show_fdinfo(struct seq_file *m, struct file *f,
+		       int (*show)(struct seq_file *m, struct fsnotify_mark *mark))
+{
+	struct fsnotify_group *group = f->private_data;
+	struct fsnotify_mark *mark;
+	int ret = 0;
+
+	spin_lock(&group->mark_lock);
+	list_for_each_entry(mark, &group->marks_list, g_list) {
+		ret = show(m, mark);
+		if (ret)
+			break;
+	}
+	spin_unlock(&group->mark_lock);
+	return ret;
+}
+
+#ifdef CONFIG_INOTIFY_USER
+
+#if defined(CONFIG_EXPORTFS)
+static int show_mark_fhandle(struct seq_file *m, struct inode *inode)
+{
+	struct {
+		struct file_handle handle;
+		u8 pad[64];
+	} f;
+	int size, ret, i;
+
+	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);
+	if ((ret == 255) || (ret == -ENOSPC)) {
+		WARN_ONCE(1, "Can't encode file handler for inotify: %d\n", ret);
+		return 0;
+	}
+
+	f.handle.handle_type = ret;
+	f.handle.handle_bytes = size * sizeof(u32);
+
+	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++)
+		ret |= seq_printf(m, "%02x", (int)f.handle.f_handle[i]);
+
+	return ret;
+}
+#else
+static int show_mark_fhandle(struct seq_file *m, struct inode *inode)
+{
+	return 0;
+}
+#endif
+
+static int inotify_fdinfo(struct seq_file *m, struct fsnotify_mark *mark)
+{
+	struct inotify_inode_mark *inode_mark;
+	struct inode *inode;
+	int ret = 0;
+
+	if (!(mark->flags & (FSNOTIFY_MARK_FLAG_ALIVE | FSNOTIFY_MARK_FLAG_INODE)))
+		return 0;
+
+	inode_mark = container_of(mark, struct inotify_inode_mark, fsn_mark);
+	inode = igrab(mark->i.inode);
+	if (inode) {
+		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);
+		ret |= show_mark_fhandle(m, inode);
+		ret |= seq_putc(m, '\n');
+		iput(inode);
+	}
+
+	return ret;
+}
+
+int inotify_show_fdinfo(struct seq_file *m, struct file *f)
+{
+	return show_fdinfo(m, f, inotify_fdinfo);
+}
+
+#endif /* CONFIG_INOTIFY_USER */
+
+#ifdef CONFIG_FANOTIFY
+
+static int fanotify_fdinfo(struct seq_file *m, struct fsnotify_mark *mark)
+{
+	struct inode *inode;
+	int ret = 0;
+
+	if (!(mark->flags & FSNOTIFY_MARK_FLAG_ALIVE))
+		return 0;
+
+	if (mark->flags & FSNOTIFY_MARK_FLAG_INODE) {
+		inode = igrab(mark->i.inode);
+		if (!inode)
+			goto out;
+		ret = seq_printf(m, "fanotify ino:%lx 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:%x mask:%x "
+				 "ignored_mask:%x\n",
+				 mnt->mnt_id, mark->mask, mark->ignored_mask);
+	}
+out:
+	return ret;
+}
+
+int fanotify_show_fdinfo(struct seq_file *m, struct file *f)
+{
+	return show_fdinfo(m, f, fanotify_fdinfo);
+}
+
+#endif /* CONFIG_FANOTIFY */
+
+#endif /* CONFIG_INOTIFY_USER || CONFIG_FANOTIFY */
+
+#else /* CONFIG_PROC_FS */
+
+#define inotify_show_fdinfo	NULL
+#define fanotify_show_fdinfo	NULL
+
+#endif /* CONFIG_PROC_FS */
Index: linux-2.6.git/fs/notify/fdinfo.h
===================================================================
--- /dev/null
+++ 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__ */
Index: linux-2.6.git/fs/notify/inotify/inotify_user.c
===================================================================
--- linux-2.6.git.orig/fs/notify/inotify/inotify_user.c
+++ 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,

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [patch 7/7] fs, notify: Add procfs fdinfo helper v6
  2012-11-17  8:34       ` Cyrill Gorcunov
@ 2012-11-20  0:49         ` Andrew Morton
  2012-11-20  6:35           ` Cyrill Gorcunov
  0 siblings, 1 reply; 24+ messages in thread
From: Andrew Morton @ 2012-11-20  0:49 UTC (permalink / raw)
  To: Cyrill Gorcunov
  Cc: linux-kernel, linux-fsdevel, Al Viro, Alexey Dobriyan,
	Pavel Emelyanov, James Bottomley, Matthew Helsley, aneesh.kumar,
	bfields, oleg, rientjes, tvrtko.ursulin, Andrey Vagin

On Sat, 17 Nov 2012 12:34:37 +0400
Cyrill Gorcunov <gorcunov@openvz.org> wrote:

> On Sat, Nov 17, 2012 at 11:10:39AM +0400, Cyrill Gorcunov wrote:
> > > 
> > > 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.

Oh, I see.

>  | 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 :)


^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [patch 7/7] fs, notify: Add procfs fdinfo helper v6
  2012-11-20  0:49         ` Andrew Morton
@ 2012-11-20  6:35           ` Cyrill Gorcunov
  0 siblings, 0 replies; 24+ messages in thread
From: Cyrill Gorcunov @ 2012-11-20  6:35 UTC (permalink / raw)
  To: Andrew Morton
  Cc: linux-kernel, linux-fsdevel, Al Viro, Alexey Dobriyan,
	Pavel Emelyanov, James Bottomley, Matthew Helsley, aneesh.kumar,
	bfields, oleg, rientjes, tvrtko.ursulin, Andrey Vagin

On Mon, Nov 19, 2012 at 04:49:38PM -0800, Andrew Morton wrote:
> 
> 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

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [patch 7/7] fs, notify: Add procfs fdinfo helper v6
  2012-11-14 15:19 ` [patch 7/7] fs, notify: Add procfs fdinfo helper v6 Cyrill Gorcunov
  2012-11-15 13:50   ` Pavel Emelyanov
  2012-11-16 23:56   ` Andrew Morton
@ 2012-11-27  0:41   ` Andrew Morton
  2 siblings, 0 replies; 24+ messages in thread
From: Andrew Morton @ 2012-11-27  0:41 UTC (permalink / raw)
  To: Cyrill Gorcunov
  Cc: linux-kernel, linux-fsdevel, Al Viro, Alexey Dobriyan,
	Pavel Emelyanov, James Bottomley, Matthew Helsley, aneesh.kumar,
	bfields, oleg, rientjes, tvrtko.ursulin, Andrey Vagin

On Wed, 14 Nov 2012 19:19:44 +0400
Cyrill Gorcunov <gorcunov@openvz.org> 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:

--- a/fs/notify/fdinfo.c~fs-notify-add-procfs-fdinfo-helper-v7-fix
+++ a/fs/notify/fdinfo.c
@@ -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?


^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [patch 7/7] fs, notify: Add procfs fdinfo helper v6
  2012-11-16 23:56   ` Andrew Morton
  2012-11-17  7:10     ` Cyrill Gorcunov
@ 2012-12-10  2:21     ` Jan Engelhardt
  2012-12-10  6:47       ` Cyrill Gorcunov
  1 sibling, 1 reply; 24+ messages in thread
From: Jan Engelhardt @ 2012-12-10  2:21 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Cyrill Gorcunov, linux-kernel, linux-fsdevel, Al Viro,
	Alexey Dobriyan, Pavel Emelyanov, James Bottomley,
	Matthew Helsley, aneesh.kumar, bfields, oleg, rientjes,
	tvrtko.ursulin, Andrey Vagin


On Saturday 2012-11-17 00:56, Andrew Morton wrote:
>>  | 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)?
>
>@@ -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.)

^ permalink raw reply	[flat|nested] 24+ messages in thread

* Re: [patch 7/7] fs, notify: Add procfs fdinfo helper v6
  2012-12-10  2:21     ` Jan Engelhardt
@ 2012-12-10  6:47       ` Cyrill Gorcunov
  0 siblings, 0 replies; 24+ messages in thread
From: Cyrill Gorcunov @ 2012-12-10  6:47 UTC (permalink / raw)
  To: Jan Engelhardt
  Cc: Andrew Morton, linux-kernel, linux-fsdevel, Al Viro,
	Alexey Dobriyan, Pavel Emelyanov, James Bottomley,
	Matthew Helsley, aneesh.kumar, bfields, oleg, rientjes,
	tvrtko.ursulin, Andrey Vagin

On Mon, Dec 10, 2012 at 03:21:53AM +0100, Jan Engelhardt wrote:
> 
> On Saturday 2012-11-17 00:56, Andrew Morton wrote:
> >>  | 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.

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

> >
> >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);

> >
> >@@ -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.)

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

	Cyrill

^ permalink raw reply	[flat|nested] 24+ messages in thread

end of thread, other threads:[~2012-12-10  6:47 UTC | newest]

Thread overview: 24+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-11-14 15:19 [patch 0/7] Providing additional information in fdinfo sufficient for c/r, v3 Cyrill Gorcunov
2012-11-14 15:19 ` [patch 1/7] procfs: Add ability to plug in auxiliary fdinfo providers Cyrill Gorcunov
2012-11-15 13:47   ` Pavel Emelyanov
2012-11-14 15:19 ` [patch 2/7] fs, eventfd: Add procfs fdinfo helper Cyrill Gorcunov
2012-11-15 13:48   ` Pavel Emelyanov
2012-11-14 15:19 ` [patch 3/7] fs, epoll: Add procfs fdinfo helper v2 Cyrill Gorcunov
2012-11-15 13:49   ` Pavel Emelyanov
2012-11-14 15:19 ` [patch 4/7] fdinfo: Show sigmask for signalfd fd v3 Cyrill Gorcunov
2012-11-15 13:49   ` Pavel Emelyanov
2012-11-14 15:19 ` [patch 5/7] fs, exportfs: Escape nil dereference if no s_export_op present Cyrill Gorcunov
2012-11-15 13:49   ` Pavel Emelyanov
2012-11-14 15:19 ` [patch 6/7] fs, exportfs: Add exportfs_encode_inode_fh helper Cyrill Gorcunov
2012-11-14 17:37   ` J. Bruce Fields
2012-11-15 13:50     ` Pavel Emelyanov
2012-11-14 15:19 ` [patch 7/7] fs, notify: Add procfs fdinfo helper v6 Cyrill Gorcunov
2012-11-15 13:50   ` Pavel Emelyanov
2012-11-16 23:56   ` Andrew Morton
2012-11-17  7:10     ` Cyrill Gorcunov
2012-11-17  8:34       ` Cyrill Gorcunov
2012-11-20  0:49         ` Andrew Morton
2012-11-20  6:35           ` Cyrill Gorcunov
2012-12-10  2:21     ` Jan Engelhardt
2012-12-10  6:47       ` Cyrill Gorcunov
2012-11-27  0:41   ` Andrew Morton

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.