Whamcloud - gitweb
Update smfs: some fix about clear_inode in smfs
authorwangdi <wangdi>
Fri, 13 Feb 2004 07:23:00 +0000 (07:23 +0000)
committerwangdi <wangdi>
Fri, 13 Feb 2004 07:23:00 +0000 (07:23 +0000)
lustre/smfs/dir.c
lustre/smfs/inode.c
lustre/smfs/super.c

index 9ceb905..e6d986f 100644 (file)
@@ -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);
 }                     
 
index 3baaa2f..a51aabc 100644 (file)
@@ -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);
index f92473c..58dfcd3 100644 (file)
@@ -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);