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