alistair23-linux/fs/f2fs
Jaegeuk Kim 577e349514 f2fs: prevent checkpoint once any IO failure is detected
This patch enhances the checkpoint routine to cope with IO errors.

Basically f2fs detects IO errors from end_io_write, and the errors are able to
be occurred during one of data, node, and meta page writes.

In the previous code, when an IO error is occurred during writes, f2fs sets a
flag, CP_ERROR_FLAG, in the raw ckeckpoint buffer which will be written to disk.
Afterwards, write_checkpoint() will check the flag and remount f2fs as a
read-only (ro) mode.

However, even once f2fs is remounted as a ro mode, dirty checkpoint pages are
freely able to be written to disk by flusher or kswapd in background.
In such a case, after cold reboot, f2fs would restore the checkpoint data having
CP_ERROR_FLAG, resulting in disabling write_checkpoint and remounting f2fs as
a ro mode again.

Therefore, let's prevent any checkpoint page (meta) writes once an IO error is
occurred, and remount f2fs as a ro mode right away at that moment.

Reported-by: Oliver Winker <oliver@oli1170.net>
Signed-off-by: Jaegeuk Kim <jaegeuk.kim@samsung.com>
Reviewed-by: Namjae Jeon <namjae.jeon@samsung.com>
2013-02-12 07:15:00 +09:00
..
acl.c f2fs: avoid null dereference in f2fs_acl_from_disk 2013-01-04 09:46:27 +09:00
acl.h f2fs: adjust kernel coding style 2012-12-11 13:43:42 +09:00
checkpoint.c f2fs: prevent checkpoint once any IO failure is detected 2013-02-12 07:15:00 +09:00
data.c f2fs: support swapfile 2013-01-22 10:48:58 +09:00
debug.c f2fs: fix the debugfs entry creation path 2013-01-15 20:19:15 +09:00
dir.c f2fs: avoid redundant time update for parent directory in f2fs_delete_entry 2013-01-14 09:43:27 +09:00
f2fs.h f2fs: prevent checkpoint once any IO failure is detected 2013-02-12 07:15:00 +09:00
file.c f2fs: add remap_pages as generic_file_remap_pages 2013-01-22 10:48:58 +09:00
gc.c f2fs: add comments of start_bidx_of_node 2013-01-22 10:48:59 +09:00
gc.h f2fs: adjust kernel coding style 2012-12-11 13:43:42 +09:00
hash.c f2fs: unify string length declarations and usage 2012-12-28 11:27:53 +09:00
inode.c f2fs: save device node number into f2fs_inode 2013-02-12 07:15:00 +09:00
Kconfig f2fs: resolve build failures 2012-12-11 13:43:43 +09:00
Makefile f2fs: update Kconfig and Makefile 2012-12-11 13:43:42 +09:00
namei.c f2fs: unify string length declarations and usage 2012-12-28 11:27:53 +09:00
node.c f2fs: avoid issuing small bios due to several dirty node pages 2013-01-22 10:48:59 +09:00
node.h f2fs: adjust kernel coding style 2012-12-11 13:43:42 +09:00
recovery.c f2fs: use _safe() version of list_for_each 2013-01-22 10:49:00 +09:00
segment.c f2fs: prevent checkpoint once any IO failure is detected 2013-02-12 07:15:00 +09:00
segment.h f2fs: fix equation of has_not_enough_free_secs() 2012-12-28 11:24:10 +09:00
super.c f2fs: prevent checkpoint once any IO failure is detected 2013-02-12 07:15:00 +09:00
xattr.c f2fs: add f2fs_balance_fs in several interfaces 2013-01-11 15:09:17 +09:00
xattr.h f2fs: adjust kernel coding style 2012-12-11 13:43:42 +09:00