From 29a9b5d7e11386493d356e8b2436894b7b6c9f91 Mon Sep 17 00:00:00 2001
From: wangdi <wangdi>
Date: Mon, 16 Feb 2004 12:33:48 +0000
Subject: [PATCH] Update smfs: 1.fix bugs in smfs_link 2) decrease i_count in
 smfs_clear_inode

---
 lustre/smfs/dir.c   |  2 ++
 lustre/smfs/inode.c | 12 ++++++++++++
 2 files changed, 14 insertions(+)

diff --git a/lustre/smfs/dir.c b/lustre/smfs/dir.c
index c5f0554611..6996a0cbfd 100644
--- a/lustre/smfs/dir.c
+++ b/lustre/smfs/dir.c
@@ -215,6 +215,8 @@ static int smfs_link(struct dentry * old_dentry,
 		rc = cache_dir->i_op->link(&cache_old_dentry, cache_dir, &cache_dentry);		
 	
 	if (rc == 0) {
+		atomic_inc(&inode->i_count);
+		duplicate_inode(cache_old_dentry.d_inode, inode);
 		d_instantiate(dentry, inode);
 	} 	
 	
diff --git a/lustre/smfs/inode.c b/lustre/smfs/inode.c
index 0c44fef4dd..24ff6c30a1 100644
--- a/lustre/smfs/inode.c
+++ b/lustre/smfs/inode.c
@@ -73,6 +73,18 @@ static void smfs_clear_inode(struct inode *inode)
 	
 	cache_sb = S2CSB(inode->i_sb);
 	cache_inode = I2CI(inode);
+
+	/*FIXME: because i_count of cache_inode may not 
+         * be 0 or 1 in before smfs_delete inode, So we 
+         * need to dec it to 1 before we call delete_inode
+         * of the bellow cache filesystem Check again latter*/
+
+	if (atomic_read(&cache_inode->i_count) < 1)
+		BUG();
+	
+	while (atomic_read(&cache_inode->i_count) != 1) {
+		atomic_dec(&cache_inode->i_count);
+	}
 	iput(cache_inode);
 
 	return;	
-- 
GitLab