iomap: fsync swap files before iterating mappings
PATCH v2 1/1 iomap: fsync swap files before iterating mappings
From: Darrick J. Wong <[email protected]>
Swap files require that all the file mapping metadata be stable on disk. It is insufficient to flush dirty pages in the page cache because that won't necessarily result in filesystems pushing all their metadata out to disk. Therefore, call fsync from iomap_swapfile_activate.
---
v2: fdatasync semantics, per hch feedback
--- fs/iomap.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
fs/iomap.c +5 -1
@@ -1387,7 +1387,11 @@ int iomap_swapfile_activate(struct swap_info_struct *sis,loff_t len =ALIGN_DOWN (i_size_read (inode),PAGE_SIZE );loff_t ret; - ret =filemap_write_and_wait (inode->i_mapping); +/* +* Persist all file mapping metadata so that we won't have any +* IOMAP_F_DIRTY iomaps. +*/ + ret =vfs_fsync (swap_file,1 );if (ret)return ret;
Looks good,
Quoted 8 lines · Darrick J. Wong
From: Darrick J. Wong <[email protected]>
Swap files require that all the file mapping metadata be stable on disk. It is insufficient to flush dirty pages in the page cache because that won't necessarily result in filesystems pushing all their metadata out to disk. Therefore, call fsync from
iomap_swapfile_activate.Signed-off-by Darrick J. Wong <[email protected]>
Makes sense and the patch looks good to me. You can add:
Honza
Quoted 23 lines
---
v2: fdatasync semantics, per hch feedback--- fs/iomap.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)fs/iomap.c +5
-1@@ -1387,7 +1387,11 @@ int iomap_swapfile_activate(struct swap_info_struct *sis,loff_t len =ALIGN_DOWN (i_size_read (inode),PAGE_SIZE );loff_t ret; - ret =filemap_write_and_wait (inode->i_mapping); +/* +* Persist all file mapping metadata so that we won't have any +* IOMAP_F_DIRTY iomaps. +*/ + ret =vfs_fsync (swap_file,1 );if (ret)return ret;
Signature · 2 lines
Jan Kara <[email protected]> SUSE Labs, CR