fsnotify/vfsmount: add fsnotify fields to struct vfsmount
authorAndreas Gruenbacher <agruen@suse.de>
Fri, 18 Dec 2009 02:24:27 +0000 (21:24 -0500)
committerEric Paris <eparis@redhat.com>
Wed, 28 Jul 2010 13:58:57 +0000 (09:58 -0400)
This patch adds the list and mask fields needed to support vfsmount marks.
These are the same fields fsnotify needs on an inode.  They are not used,
just declared and we note where the cleanup hook should be (the function is
not yet defined)

Signed-off-by: Andreas Gruenbacher <agruen@suse.de>
Signed-off-by: Eric Paris <eparis@redhat.com>
fs/namespace.c
fs/notify/fsnotify.c
include/linux/mount.h

index 88058de59c7c2ca9edf14453f1fbeeaa4017bfa8..a2d681a6b5e9b01b494deefe6471463e8e699357 100644 (file)
@@ -29,6 +29,7 @@
 #include <linux/log2.h>
 #include <linux/idr.h>
 #include <linux/fs_struct.h>
+#include <linux/fsnotify.h>
 #include <asm/uaccess.h>
 #include <asm/unistd.h>
 #include "pnode.h"
@@ -150,6 +151,9 @@ struct vfsmount *alloc_vfsmnt(const char *name)
                INIT_LIST_HEAD(&mnt->mnt_share);
                INIT_LIST_HEAD(&mnt->mnt_slave_list);
                INIT_LIST_HEAD(&mnt->mnt_slave);
+#ifdef CONFIG_FSNOTIFY
+               INIT_HLIST_HEAD(&mnt->mnt_fsnotify_marks);
+#endif
 #ifdef CONFIG_SMP
                mnt->mnt_writers = alloc_percpu(int);
                if (!mnt->mnt_writers)
index 60e84fd338dd3d2f3dec21fa85d2f35c96ec0670..e0bf86953e1b8d20f9ed4c22475ea4fed9a7a1c5 100644 (file)
@@ -163,9 +163,7 @@ static bool needed_by_vfsmount(__u32 test_mask, struct vfsmount *mnt)
        if (!mnt)
                return false;
 
-       /* hook in this when mnt->mnt_fsnotify_mask is defined */
-       /* return (test_mask & path->mnt->mnt_fsnotify_mask); */
-       return false;
+       return (test_mask & mnt->mnt_fsnotify_mask);
 }
 /*
  * This is the main call to fsnotify.  The VFS calls into hook specific functions
index 4bd05474d11d557cd709ab3aa045902a8014af7c..907210bd9f9c6fac2dffe4f08339140fb804cf94 100644 (file)
@@ -56,7 +56,11 @@ struct vfsmount {
        struct list_head mnt_mounts;    /* list of children, anchored here */
        struct list_head mnt_child;     /* and going through their mnt_child */
        int mnt_flags;
-       /* 4 bytes hole on 64bits arches */
+       /* 4 bytes hole on 64bits arches without fsnotify */
+#ifdef CONFIG_FSNOTIFY
+       __u32 mnt_fsnotify_mask;
+       struct hlist_head mnt_fsnotify_marks;
+#endif
        const char *mnt_devname;        /* Name of device e.g. /dev/dsk/hda1 */
        struct list_head mnt_list;
        struct list_head mnt_expire;    /* link in fs-specific expiry list */