From d57062541b587184daab88d544065e04e09ede0d Mon Sep 17 00:00:00 2001 From: pravins Date: Wed, 6 May 2009 12:41:07 +0000 Subject: [PATCH] b=16721 i=fanyong i=rahul return -ESTALE for dead inodes. --- lustre/osd/osd_handler.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/lustre/osd/osd_handler.c b/lustre/osd/osd_handler.c index 57c930c..454b9e3 100644 --- a/lustre/osd/osd_handler.c +++ b/lustre/osd/osd_handler.c @@ -3688,23 +3688,22 @@ static struct inode *osd_iget(struct osd_thread_info *info, if (inode == NULL) { CERROR("no inode\n"); inode = ERR_PTR(-EACCES); - } else if (is_bad_inode(inode)) { - CERROR("bad inode\n"); - iput(inode); - inode = ERR_PTR(-ENOENT); } else if (id->oii_gen != OSD_OII_NOGEN && inode->i_generation != id->oii_gen) { - CERROR("stale inode\n"); iput(inode); inode = ERR_PTR(-ESTALE); } else if (inode->i_nlink == 0) { /* due to parallel readdir and unlink, * we can have dead inode here. */ + CWARN("stale inode\n"); make_bad_inode(inode); iput(inode); inode = ERR_PTR(-ESTALE); + } else if (is_bad_inode(inode)) { + CERROR("bad inode %lx\n",inode->i_ino); + iput(inode); + inode = ERR_PTR(-ENOENT); } - return inode; } -- 1.8.3.1