From 070152d89a5c07d5e4e66f74f1fd51083ed75cf3 Mon Sep 17 00:00:00 2001
From: wangdi <wangdi>
Date: Wed, 25 Feb 2004 09:18:29 +0000
Subject: [PATCH] Update smfs:some minor fix in smfs

---
 lustre/smfs/dir.c   | 16 +++++++++++++++-
 lustre/smfs/file.c  |  8 ++++++++
 lustre/smfs/inode.c | 18 +++++++++++-------
 3 files changed, 34 insertions(+), 8 deletions(-)

diff --git a/lustre/smfs/dir.c b/lustre/smfs/dir.c
index d194bb8f21..a5c77656fe 100644
--- a/lustre/smfs/dir.c
+++ b/lustre/smfs/dir.c
@@ -162,6 +162,7 @@ static int smfs_link(struct dentry * old_dentry,
 	prepare_parent_dentry(&parent_old, cache_dir);
 	cache_old_dentry = d_alloc(&parent_old, &dentry->d_name);
 	d_add(cache_old_dentry, cache_old_inode); 
+	pre_smfs_inode(inode, cache_old_dentry->d_inode);
 	
 	if (cache_dir->i_op->link)
 		rc = cache_dir->i_op->link(cache_old_dentry, cache_dir, cache_dentry);		
@@ -201,6 +202,9 @@ static int smfs_unlink(struct inode * dir,
 	cache_dentry = d_alloc(&parent, &dentry->d_name);
 	d_add(cache_dentry, cache_inode);
 
+	pre_smfs_inode(dentry->d_inode, cache_dentry->d_inode);
+	pre_smfs_inode(dir, cache_dir);
+	
 	if (cache_dir->i_op->unlink)
 		rc = cache_dir->i_op->unlink(cache_dir, cache_dentry);
 
@@ -272,6 +276,7 @@ static int smfs_mkdir(struct inode * dir,
 	prepare_parent_dentry(&parent, cache_dir);
 	cache_dentry = d_alloc(&parent, &dentry->d_name);
 
+	pre_smfs_inode(dir, cache_dir);
 	lock_kernel();	
 	if (cache_dir->i_op->mkdir)
 		rc = cache_dir->i_op->mkdir(cache_dir, cache_dentry, mode);
@@ -312,9 +317,12 @@ static int  smfs_rmdir(struct inode * dir,
 	prepare_parent_dentry(&parent, cache_dir);
 	cache_dentry = d_alloc(&parent, &dentry->d_name);
 	d_add(cache_dentry, cache_inode);
-	
 	igrab(cache_inode);
 	
+	pre_smfs_inode(dir, cache_dir);
+	pre_smfs_inode(dentry->d_inode, cache_dentry->d_inode);
+	
+	
 	if (cache_dir->i_op->rmdir)
 		rc = cache_dir->i_op->rmdir(cache_dir, cache_dentry);
 
@@ -340,6 +348,9 @@ static int smfs_mknod(struct inode * dir, struct dentry *dentry,
 	prepare_parent_dentry(&parent, cache_dir);
 	cache_dentry = d_alloc(&parent, &dentry->d_name);
 	
+	pre_smfs_inode(dir, cache_dir);
+	pre_smfs_inode(dentry->d_inode, cache_dentry->d_inode);
+	
 	if (cache_dir->i_op->mknod)
 		rc = cache_dir->i_op->mknod(cache_dir, cache_dentry, mode, rdev);
 	
@@ -379,6 +390,9 @@ static int smfs_rename(struct inode * old_dir, struct dentry *old_dentry,
 	prepare_parent_dentry(&parent_new, cache_new_dir);
 	cache_new_dentry = d_alloc(&parent_new, &new_dentry->d_name);
 	
+	pre_smfs_inode(old_dir, cache_old_dir) ;
+	pre_smfs_inode(new_dir, cache_new_dir);
+	
 	if (cache_old_dir->i_op->rename)
 		rc = cache_old_dir->i_op->rename(cache_old_dir, cache_old_dentry,
 					         cache_new_dir, cache_new_dentry);
diff --git a/lustre/smfs/file.c b/lustre/smfs/file.c
index 15d57e6cd4..eaf190164c 100644
--- a/lustre/smfs/file.c
+++ b/lustre/smfs/file.c
@@ -87,6 +87,8 @@ static ssize_t smfs_write (struct file *filp, const char *buf,
 	
 	smfs_prepare_cachefile(inode, filp, cache_inode, 
 			       &open_file, &open_dentry);
+	pre_smfs_inode(inode, cache_inode);
+	
 	if (cache_inode->i_fop->write)
 		rc = cache_inode->i_fop->write(&open_file, buf, count, cache_ppos);
 	
@@ -153,6 +155,7 @@ static ssize_t smfs_read (struct file *filp, char *buf,
 			       &open_file, &open_dentry);
 
 	
+	pre_smfs_inode(inode, cache_inode);
 	if (cache_inode->i_fop->read)
 		rc = cache_inode->i_fop->read(&open_file, buf, count, cache_ppos);
     
@@ -181,6 +184,7 @@ static loff_t smfs_llseek(struct file *file,
 	smfs_prepare_cachefile(dentry->d_inode, file, cache_inode, 
 			       &open_file, &open_dentry);
 	
+	pre_smfs_inode(dentry->d_inode, cache_inode);
 	if (cache_inode->i_fop->llseek)
 		rc = cache_inode->i_fop->llseek(&open_file, offset, origin);
 
@@ -208,6 +212,7 @@ static int smfs_mmap(struct file * file, struct vm_area_struct * vma)
 	if (cache_inode->i_mapping == &cache_inode->i_data)
                 inode->i_mapping = cache_inode->i_mapping;
 
+	pre_smfs_inode(inode, cache_inode);
 	if (cache_inode->i_fop->mmap)
 		rc = cache_inode->i_fop->mmap(&open_file, vma);
       
@@ -231,6 +236,7 @@ static int smfs_open(struct inode * inode, struct file * filp)
 	smfs_prepare_cachefile(inode, filp, cache_inode, 
 			       &open_file, &open_dentry);
 	
+	pre_smfs_inode(inode, cache_inode);
 	if (cache_inode->i_fop->open)
 		rc = cache_inode->i_fop->open(cache_inode, &open_file);
         
@@ -254,6 +260,7 @@ static int smfs_release(struct inode * inode, struct file * filp)
 	smfs_prepare_cachefile(inode, filp, cache_inode, 
 			       &open_file, &open_dentry);
 
+	pre_smfs_inode(inode, cache_inode);
 	if (cache_inode->i_fop->release)
 		rc = cache_inode->i_fop->release(cache_inode, &open_file);
 
@@ -279,6 +286,7 @@ int smfs_fsync(struct file * file,
 	smfs_prepare_cachefile(inode, file, cache_inode, 
 			       &open_file, &open_dentry);
 
+	pre_smfs_inode(inode, cache_inode);
 	if (cache_inode->i_fop->fsync)
 		rc = cache_inode->i_fop->fsync(&open_file, &open_dentry, datasync);
 	
diff --git a/lustre/smfs/inode.c b/lustre/smfs/inode.c
index dbc42a2960..117d503ce3 100644
--- a/lustre/smfs/inode.c
+++ b/lustre/smfs/inode.c
@@ -33,17 +33,21 @@ static void duplicate_inode(struct inode *dst_inode,
 void post_smfs_inode(struct inode *inode, 
 		     struct inode *cache_inode)
 {
-	duplicate_inode(inode, cache_inode);
-	/*Here we must release the cache_inode,
-	 *Otherwise we will have no chance to
-	 *do it
-	 */
-	cache_inode->i_state &=~I_LOCK;	
+	if (inode && cache_inode) {
+		duplicate_inode(inode, cache_inode);
+		/*Here we must release the cache_inode,
+		 *Otherwise we will have no chance to
+		 *do it
+		 */
+		cache_inode->i_state &=~I_LOCK;	
+	}
 }
 void pre_smfs_inode(struct inode *inode,
 		    struct inode *cache_inode)
 {
-	duplicate_inode(cache_inode, inode);
+	if (inode && cache_inode) {
+		duplicate_inode(cache_inode, inode);
+	}
 }
 
 static void smfs_read_inode(struct inode *inode)
-- 
GitLab