From 4aec4547e903afbb8aec6890aaa341f826e931d8 Mon Sep 17 00:00:00 2001
From: wangdi <wangdi>
Date: Sun, 22 Aug 2004 16:02:26 +0000
Subject: [PATCH] update .snap on smfs

---
 lustre/smfs/inode.c         | 13 +++++++------
 lustre/smfs/smfs_internal.h |  2 ++
 lustre/smfs/smfs_lib.c      |  9 ++++-----
 lustre/smfs/super.c         |  8 ++++++--
 4 files changed, 19 insertions(+), 13 deletions(-)

diff --git a/lustre/smfs/inode.c b/lustre/smfs/inode.c
index 1c7576fd17..b88139765c 100644
--- a/lustre/smfs/inode.c
+++ b/lustre/smfs/inode.c
@@ -64,10 +64,11 @@ static void smfs_init_inode_info (struct inode *inode, void *opaque)
 static void smfs_clear_inode_info(struct inode *inode)
 {
         struct inode *cache_inode = I2CI(inode);
-       
+ 
         LASSERTF(atomic_read(&cache_inode->i_count) == 1, 
-                 "cache inode %lu i_count %d not 0\n", cache_inode->i_ino,
+                 "inode %lu i_count %d != 1\n", cache_inode->i_ino, 
                  atomic_read(&cache_inode->i_count));
+      
         iput(cache_inode);
         OBD_FREE(I2SMI(inode), sizeof(struct smfs_inode_info));
 }
@@ -268,8 +269,8 @@ static void smfs_put_inode(struct inode *inode)
         
         CDEBUG(D_INFO, "cache_inode i_count ino %lu i_count %d\n",
                inode->i_ino, atomic_read(&inode->i_count));
-        if (atomic_read(&cache_inode->i_count) > 1 && 
-            cache_inode != cache_inode->i_sb->s_root->d_inode) {
+        if (atomic_read(&cache_inode->i_count) > 1 /*&& 
+            cache_inode != cache_inode->i_sb->s_root->d_inode*/) {
                 CDEBUG(D_INFO, "cache_inode i_count ino %lu i_count %d\n",
                        cache_inode->i_ino, 
                        atomic_read(&cache_inode->i_count) - 1);
@@ -306,8 +307,8 @@ static void smfs_clear_inode(struct inode *inode)
         
         cache_inode = I2CI(inode);
 
-        if (cache_inode != cache_inode->i_sb->s_root->d_inode) 
-                smfs_clear_inode_info(inode);
+        smfs_clear_inode_info(inode);
+        
         EXIT;
         return;
 }
diff --git a/lustre/smfs/smfs_internal.h b/lustre/smfs/smfs_internal.h
index be44d54906..ebca06e5d1 100644
--- a/lustre/smfs/smfs_internal.h
+++ b/lustre/smfs/smfs_internal.h
@@ -131,6 +131,8 @@ struct smfs_hook_ops *smfs_unregister_hook_ops(struct smfs_super_info *smb,
 /*smfs_lib.c*/
 void smfs_put_super(struct super_block *sb);
 int smfs_fill_super(struct super_block *sb, void *data, int silent);
+
+void smfs_cleanup_hooks(struct smfs_super_info *smb);
 /*sysctl.c*/
 extern int sm_debug_level;
 extern int sm_inodes;
diff --git a/lustre/smfs/smfs_lib.c b/lustre/smfs/smfs_lib.c
index 05d172c5f4..33b017a82c 100644
--- a/lustre/smfs/smfs_lib.c
+++ b/lustre/smfs/smfs_lib.c
@@ -163,8 +163,6 @@ err_out:
 
 static int smfs_umount_cache(struct smfs_super_info *smb)
 {
-        iput(smb->smsi_sb->s_root->d_inode);
-        dput(smb->smsi_sb->s_root);
         mntput(smb->smsi_mnt);
         smfs_cleanup_sm_ops(smb);
         smfs_cleanup_fsfilt_ops(smb);
@@ -216,7 +214,7 @@ static void smfs_cleanup_smb(struct super_block *sb)
         EXIT;
         return;
 }
-static void smfs_cleanup_hooks(struct smfs_super_info *smb)
+void smfs_cleanup_hooks(struct smfs_super_info *smb)
 {
         
         if (SMFS_CACHE_HOOK(smb))
@@ -227,15 +225,16 @@ static void smfs_cleanup_hooks(struct smfs_super_info *smb)
         if (SMFS_DO_COW(smb))
                 smfs_cow_cleanup(smb);
 #endif  
+        smfs_cleanup_hook_ops(smb);
 }
 
 void smfs_put_super(struct super_block *sb)
 {
         struct smfs_super_info *smfs_info = S2SMI(sb);
 
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0))
         smfs_cleanup_hooks(smfs_info);
-        
-        smfs_cleanup_hook_ops(smfs_info);
+#endif
         if (sb)
                 smfs_umount_cache(smfs_info);
         smfs_cleanup_smb(sb); 
diff --git a/lustre/smfs/super.c b/lustre/smfs/super.c
index 1056bfcba7..dd92c0b74e 100644
--- a/lustre/smfs/super.c
+++ b/lustre/smfs/super.c
@@ -69,12 +69,16 @@ struct super_block *smfs_get_sb(struct file_system_type *fs_type, int flags,
 {
         return get_sb_nodev(fs_type, flags, data, smfs_fill_super);
 }
-
+void smfs_kill_super(struct super_block *sb)
+{
+        smfs_cleanup_hooks(S2SMI(sb));
+        kill_anon_super(sb);
+}
 static struct file_system_type smfs_type = {
         .owner       = THIS_MODULE,
         .name        = "smfs",
         .get_sb      = smfs_get_sb,
-        .kill_sb     = kill_anon_super,
+        .kill_sb     = smfs_kill_super,
 };
 #endif
 
-- 
GitLab