diff -rupN linux-2.6.7/fs/namespace.c linux-2.6.7.new/fs/namespace.c --- linux-2.6.7/fs/namespace.c 2005-03-29 18:54:13.000000000 +0300 +++ linux-2.6.7.new/fs/namespace.c 2005-03-30 17:51:39.000000000 +0300 @@ -60,6 +60,7 @@ struct vfsmount *alloc_vfsmnt(const char INIT_LIST_HEAD(&mnt->mnt_child); INIT_LIST_HEAD(&mnt->mnt_mounts); INIT_LIST_HEAD(&mnt->mnt_list); + INIT_LIST_HEAD(&mnt->mnt_lustre_list); if (name) { int size = strlen(name)+1; char *newname = kmalloc(size, GFP_KERNEL); @@ -173,6 +174,9 @@ void __mntput(struct vfsmount *mnt) { struct super_block *sb = mnt->mnt_sb; dput(mnt->mnt_root); + spin_lock(&dcache_lock); + list_del(&mnt->mnt_lustre_list); + spin_unlock(&dcache_lock); free_vfsmnt(mnt); deactivate_super(sb); } diff -rupN linux-2.6.7/include/linux/dcache.h linux-2.6.7.new/include/linux/dcache.h --- linux-2.6.7/include/linux/dcache.h 2005-03-29 18:54:13.000000000 +0300 +++ linux-2.6.7.new/include/linux/dcache.h 2005-03-31 14:35:51.589553400 +0300 @@ -167,7 +167,9 @@ d_iput: no no no yes #define DCACHE_UNHASHED 0x0010 #define DCACHE_LUSTRE_INVALID 0x0020 /* invalidated by Lustre */ -#define DCACHE_CROSS_REF 0x0040 /* entry points to inode on another MDS */ +#define DCACHE_CROSS_REF 0x0040 /* entry points to inode on another MDS */ +#define DCACHE_GNS_PENDING 0x0080 /* entry is GNS pending mount point */ +#define DCACHE_GNS_MOUNTING 0x0100 /* entry is GNS mount in progress */ extern spinlock_t dcache_lock;