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