f2fs: fix wrong error injection for evict_inode
authorJaegeuk Kim <jaegeuk@kernel.org>
Tue, 7 Mar 2017 21:32:20 +0000 (13:32 -0800)
committerJaegeuk Kim <jaegeuk@kernel.org>
Tue, 21 Mar 2017 20:52:16 +0000 (16:52 -0400)
The previous one was not a proper location to inject an error, since there
is no point to get errors. Instead, we can emulate EIO during truncation,
and the below logic should handle it correctly.

Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
fs/f2fs/inode.c

index ef8610bf950f2796577752501df278e1d0ba8717..2520fa72b23f47751de72ab7b32456ded6dad0d4 100644 (file)
@@ -372,13 +372,6 @@ void f2fs_evict_inode(struct inode *inode)
        if (inode->i_nlink || is_bad_inode(inode))
                goto no_delete;
 
-#ifdef CONFIG_F2FS_FAULT_INJECTION
-       if (time_to_inject(sbi, FAULT_EVICT_INODE)) {
-               f2fs_show_injection_info(FAULT_EVICT_INODE);
-               goto no_delete;
-       }
-#endif
-
        remove_ino_entry(sbi, inode->i_ino, APPEND_INO);
        remove_ino_entry(sbi, inode->i_ino, UPDATE_INO);
 
@@ -389,6 +382,12 @@ retry:
        if (F2FS_HAS_BLOCKS(inode))
                err = f2fs_truncate(inode);
 
+#ifdef CONFIG_F2FS_FAULT_INJECTION
+       if (time_to_inject(sbi, FAULT_EVICT_INODE)) {
+               f2fs_show_injection_info(FAULT_EVICT_INODE);
+               err = -EIO;
+       }
+#endif
        if (!err) {
                f2fs_lock_op(sbi);
                err = remove_inode_page(inode);