fs, fanotify: Add missing pieses in fdinfo for ability to call fanotify_init
PATCH 1/1 fs, fanotify: Add missing pieses in fdinfo for ability to call fanotify_init
While been restoring fanotify objects I discovered that the minimum information we provide now is enough to restore notification marks but still a bit incomplete for fanotify_init system call (the @flags and @event-flags are unknown). This patch adds missing bits into fdinfo output.
An example of output is below
| pos: 0 | flags: 04002 | fanotify flags:10 event-flags:0 | fanotify mnt_id:12 mask:3b ignored_mask:0 | fanotify ino:50205 sdev:800013 mask:3b ignored_mask:40000000 fhandle-bytes:8 fhandle-type:1 f_handle:05020500fb1d47e7
Signed-off-by Cyrill Gorcunov <[email protected]>
CC Pavel Emelyanov <[email protected]>
CC Oleg Nesterov <[email protected]>
CC Andrey Vagin <[email protected]>
CC Al Viro <[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 Tvrtko Ursulin <[email protected]>
--- fs/notify/fdinfo.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+)
fs/notify/fdinfo.c +25 -0
@@ -4,6 +4,7 @@#include <linux/idr.h> #include <linux/init.h> #include <linux/inotify.h> +#include <linux/fanotify.h> #include <linux/kernel.h> #include <linux/namei.h> #include <linux/sched.h>
@@ -140,6 +141,30 @@ out:int fanotify_show_fdinfo (struct seq_file *m,struct file *f) { +struct fsnotify_group *group = f->private_data; +unsigned int flags =0 ; + +switch (group->priority) { +case FS_PRIO_0 : + flags |=FAN_CLASS_NOTIF ; +break ; +case FS_PRIO_1 : + flags |=FAN_CLASS_CONTENT ; +break ; +case FS_PRIO_2 : + flags |=FAN_CLASS_PRE_CONTENT ; +break ; + } + +if (group->max_events ==UINT_MAX ) + flags |=FAN_UNLIMITED_QUEUE ; + +if (group->fanotify_data.max_marks ==UINT_MAX ) + flags |=FAN_UNLIMITED_MARKS ; + +seq_printf (m,"fanotify flags:%x event-flags:%x\n" , + flags, group->fanotify_data.f_flags); +return show_fdinfo (m, f, fanotify_fdinfo); }