From 86e8e5601fb5bf56621d12e37636d0e63a516948 Mon Sep 17 00:00:00 2001
From: wangdi <wangdi>
Date: Fri, 13 Feb 2004 07:23:00 +0000
Subject: [PATCH] Update smfs: some fix about clear_inode in smfs

---
 lustre/smfs/dir.c   |  6 +-----
 lustre/smfs/inode.c | 13 ++++++-------
 lustre/smfs/super.c |  7 +++----
 3 files changed, 10 insertions(+), 16 deletions(-)

diff --git a/lustre/smfs/dir.c b/lustre/smfs/dir.c
index 9ceb90532f..e6d986fc17 100644
--- a/lustre/smfs/dir.c
+++ b/lustre/smfs/dir.c
@@ -95,6 +95,7 @@ static void prepare_parent_dentry(struct dentry *dentry, struct inode *inode)
         INIT_LIST_HEAD(&dentry->d_subdirs);
         INIT_LIST_HEAD(&dentry->d_alias);
 }
+
 static int smfs_create(struct inode *dir, 
 		       struct dentry *dentry, 
 		       int mode)
@@ -129,8 +130,6 @@ static int smfs_create(struct inode *dir,
 	sm_set_inode_ops(cache_inode, inode);
 exit:
 	smfs_clear_dentry(&cache_dentry);	
-	if (cache_inode)
-		iput(cache_inode);
 	RETURN(rc);
 }
 
@@ -167,9 +166,6 @@ static struct dentry *smfs_lookup(struct inode *dir,
 	d_add(dentry, inode);	
 exit:
 	smfs_clear_dentry(&cache_dentry);	
-	
-	if (cache_inode)
-		iput(cache_inode);
 	RETURN(rc);
 }		       
 
diff --git a/lustre/smfs/inode.c b/lustre/smfs/inode.c
index 3baaa2fce5..a51aabc98e 100644
--- a/lustre/smfs/inode.c
+++ b/lustre/smfs/inode.c
@@ -79,7 +79,6 @@ static void smfs_clear_inode(struct inode *inode)
 	if (cache_sb->s_op->clear_inode)
 		cache_sb->s_op->clear_inode(cache_inode);
 
-	//clear_inode(cache_inode);
 	duplicate_inode(inode, cache_inode);
 	
 	return;	
@@ -93,9 +92,11 @@ static void smfs_delete_inode(struct inode *inode)
 	cache_inode = I2CI(inode);
 	cache_sb = S2CSB(inode->i_sb);
 
-	if (!cache_inode || !cache_sb)
+	if (!cache_inode || !cache_sb || 
+	    !cache_inode->i_nlink) {
+		clear_inode(inode);	
 		return;
-		
+	}	
 	duplicate_inode(inode, cache_inode); 
 	
 	list_del(&cache_inode->i_hash);
@@ -162,9 +163,7 @@ static void smfs_put_inode(struct inode *inode)
 
 	if (!cache_inode || !cache_sb)
 		return;
-		
-	if (cache_sb->s_op->put_inode)
-		cache_sb->s_op->put_inode(cache_inode);
+	iput(cache_inode);
 
 	return;
 }
@@ -228,7 +227,7 @@ static int smfs_statfs(struct super_block * sb, struct statfs * buf)
 	cache_sb = S2CSB(sb);
 
 	if (!cache_sb)
-		return;
+		RETURN(-EINVAL);
 		
 	if (cache_sb->s_op->statfs)
 		rc = cache_sb->s_op->statfs(cache_sb, buf);
diff --git a/lustre/smfs/super.c b/lustre/smfs/super.c
index f92473c70a..58dfcd36f8 100644
--- a/lustre/smfs/super.c
+++ b/lustre/smfs/super.c
@@ -197,7 +197,6 @@ static void duplicate_sb(struct super_block *csb,
 	sb->s_magic = csb->s_magic;
 	sb->s_blocksize_bits = csb->s_blocksize_bits;
 	sb->s_maxbytes = csb->s_maxbytes;
-	sb->s_flags = csb->s_flags;
 }
 extern struct super_operations smfs_super_ops;
 
@@ -225,8 +224,8 @@ static int sm_mount_cache(struct super_block *sb,
         free_page(page);
 	
 	if (IS_ERR(mnt)) {
-                CERROR("do_kern_mount failed: rc = %d\n", err);
-                GOTO(err_out, 0);
+                CERROR("do_kern_mount failed: rc = %d\n", PTR_ERR(mnt));
+                GOTO(err_out, err = PTR_ERR(mnt));
         }
 	smb = S2SMI(sb); 
 	smb->smsi_sb = mnt->mnt_sb;
@@ -288,7 +287,7 @@ smfs_read_super(
 		CERROR("Can not mount %s as %s\n", devstr, typestr);
 		GOTO(out_err, 0);
 	}
-
+	dget(S2CSB(sb)->s_root);
 	root_ino = S2CSB(sb)->s_root->d_inode->i_ino;
 	root_inode = iget(sb, root_ino);
 		
-- 
GitLab