Whamcloud - gitweb
1. Adding iput(cache_inode) in smfs_clear_inode for clearing cache inode according...
authorwangdi <wangdi>
Sun, 15 Feb 2004 15:50:02 +0000 (15:50 +0000)
committerwangdi <wangdi>
Sun, 15 Feb 2004 15:50:02 +0000 (15:50 +0000)
lustre/smfs/inode.c

index a51aabc..0c44fef 100644 (file)
@@ -73,14 +73,8 @@ static void smfs_clear_inode(struct inode *inode)
        
        cache_sb = S2CSB(inode->i_sb);
        cache_inode = I2CI(inode);
+       iput(cache_inode);
 
-       duplicate_inode(inode, cache_inode); 
-       
-       if (cache_sb->s_op->clear_inode)
-               cache_sb->s_op->clear_inode(cache_inode);
-
-       duplicate_inode(inode, cache_inode);
-       
        return; 
 }
 static void smfs_delete_inode(struct inode *inode)
@@ -92,11 +86,21 @@ static void smfs_delete_inode(struct inode *inode)
        cache_inode = I2CI(inode);
        cache_sb = S2CSB(inode->i_sb);
 
-       if (!cache_inode || !cache_sb || 
-           !cache_inode->i_nlink) {
-               clear_inode(inode);     
+       if (!cache_inode || !cache_sb)  
                return;
-       }       
+
+       /*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);
+       }
+       
        duplicate_inode(inode, cache_inode); 
        
        list_del(&cache_inode->i_hash);
@@ -163,7 +167,8 @@ static void smfs_put_inode(struct inode *inode)
 
        if (!cache_inode || !cache_sb)
                return;
-       iput(cache_inode);
+       if (cache_sb->s_op->put_inode)
+               cache_sb->s_op->put_inode(cache_inode);
 
        return;
 }
@@ -255,7 +260,7 @@ static int smfs_remount(struct super_block * sb, int * flags, char * data)
 }
 struct super_operations smfs_super_ops = {
        read_inode:     smfs_read_inode,
-       //clear_inode:  smfs_clear_inode,
+       clear_inode:    smfs_clear_inode,
        put_super:      smfs_put_super,
        delete_inode:   smfs_delete_inode,
         write_inode:   smfs_write_inode,