|
@@ -535,6 +535,17 @@ static int recover_orphan_inode(struct f2fs_sb_info *sbi, nid_t ino)
|
|
|
{
|
|
|
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)) {
|
|
@@ -555,17 +566,13 @@ static int recover_orphan_inode(struct f2fs_sb_info *sbi, nid_t ino)
|
|
|
|
|
|
/* 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;
|
|
|
}
|
|
|
|