From 29a9b5d7e11386493d356e8b2436894b7b6c9f91 Mon Sep 17 00:00:00 2001 From: wangdi <wangdi> Date: Mon, 16 Feb 2004 12:33:48 +0000 Subject: [PATCH] Update smfs: 1.fix bugs in smfs_link 2) decrease i_count in smfs_clear_inode --- lustre/smfs/dir.c | 2 ++ lustre/smfs/inode.c | 12 ++++++++++++ 2 files changed, 14 insertions(+) diff --git a/lustre/smfs/dir.c b/lustre/smfs/dir.c index c5f0554611..6996a0cbfd 100644 --- a/lustre/smfs/dir.c +++ b/lustre/smfs/dir.c @@ -215,6 +215,8 @@ static int smfs_link(struct dentry * old_dentry, rc = cache_dir->i_op->link(&cache_old_dentry, cache_dir, &cache_dentry); if (rc == 0) { + atomic_inc(&inode->i_count); + duplicate_inode(cache_old_dentry.d_inode, inode); d_instantiate(dentry, inode); } diff --git a/lustre/smfs/inode.c b/lustre/smfs/inode.c index 0c44fef4dd..24ff6c30a1 100644 --- a/lustre/smfs/inode.c +++ b/lustre/smfs/inode.c @@ -73,6 +73,18 @@ static void smfs_clear_inode(struct inode *inode) cache_sb = S2CSB(inode->i_sb); cache_inode = I2CI(inode); + + /*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); + } iput(cache_inode); return; -- GitLab