Whamcloud - gitweb
b=16721
authorpravins <pravins>
Wed, 6 May 2009 12:41:07 +0000 (12:41 +0000)
committerpravins <pravins>
Wed, 6 May 2009 12:41:07 +0000 (12:41 +0000)
i=fanyong
i=rahul

return -ESTALE for dead inodes.

lustre/osd/osd_handler.c

index 57c930c..454b9e3 100644 (file)
@@ -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);
         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) {
         } 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. */
                 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);
                 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;
 
 }
         return inode;
 
 }