summaryrefslogtreecommitdiff
path: root/fs/f2fs/super.c
diff options
context:
space:
mode:
authorJaegeuk Kim <jaegeuk@kernel.org>2014-08-12 01:37:46 (GMT)
committerJaegeuk Kim <jaegeuk@kernel.org>2014-08-21 20:55:05 (GMT)
commitcf779cab14d50a84b61399f758da269654b863db (patch)
treec11a1da5ea17f3e3f86e5cdad7cc57b97427e7fa /fs/f2fs/super.c
parent8501017e50fb7586ba522a2913ce664d6c2024f6 (diff)
downloadlinux-cf779cab14d50a84b61399f758da269654b863db.tar.xz
f2fs: handle EIO not to break fs consistency
There are two rules when EIO is occurred. 1. don't write any checkpoint data to preserve the previous checkpoint 2. don't lose the cached dentry/node/meta pages So, at first, this patch adds set_page_dirty in f2fs_write_end_io's failure. Then, writing checkpoint/dentry/node blocks is not allowed. Note that, for the data pages, we can't just throw away by redirtying them. Otherwise, kworker can fall into infinite loop to flush them. (Ref. xfstests/019) Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Diffstat (limited to 'fs/f2fs/super.c')
-rw-r--r--fs/f2fs/super.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
index e7a7b61..ddb1e9d 100644
--- a/fs/f2fs/super.c
+++ b/fs/f2fs/super.c
@@ -435,7 +435,10 @@ static void f2fs_put_super(struct super_block *sb)
if (sbi->s_dirty)
write_checkpoint(sbi, true);
- /* normally superblock is clean, so we need to release this */
+ /*
+ * normally superblock is clean, so we need to release this.
+ * In addition, EIO will skip do checkpoint, we need this as well.
+ */
release_dirty_inode(sbi);
iput(sbi->node_inode);