{
        struct inode *inode;
        struct node_info ni;
+       int err = acquire_orphan_inode(sbi);
+
+       if (err) {
+               set_sbi_flag(sbi, SBI_NEED_FSCK);
+               f2fs_msg(sbi->sb, KERN_WARNING,
+                               "%s: orphan failed (ino=%x), run fsck to fix.",
+                               __func__, ino);
+               return err;
+       }
+
+       __add_ino_entry(sbi, ino, ORPHAN_INO);
 
        inode = f2fs_iget_retry(sbi->sb, ino);
        if (IS_ERR(inode)) {
 
        /* ENOMEM was fully retried in f2fs_evict_inode. */
        if (ni.blk_addr != NULL_ADDR) {
-               int err = acquire_orphan_inode(sbi);
-
-               if (err) {
-                       set_sbi_flag(sbi, SBI_NEED_FSCK);
-                       f2fs_msg(sbi->sb, KERN_WARNING,
-                               "%s: orphan failed (ino=%x), run fsck to fix.",
-                                       __func__, ino);
-                       return err;
-               }
-               __add_ino_entry(sbi, ino, ORPHAN_INO);
+               set_sbi_flag(sbi, SBI_NEED_FSCK);
+               f2fs_msg(sbi->sb, KERN_WARNING,
+                       "%s: orphan failed (ino=%x), run fsck to fix.",
+                               __func__, ino);
+               return -EIO;
        }
+       __remove_ino_entry(sbi, ino, ORPHAN_INO);
        return 0;
 }
 
 
        sb->s_root = NULL;
 free_node_inode:
        mutex_lock(&sbi->umount_mutex);
+       release_ino_entry(sbi, true);
        f2fs_leave_shrinker(sbi);
        iput(sbi->node_inode);
        mutex_unlock(&sbi->umount_mutex);