Skip to content

fs: use freeze_fs on suspend/hibernate

Luis R. Rodriguez linux-block linux-fsdevel linux-pm linux-xfs lkml 1 version In review

Get series with b4
b4 am [email protected]

Versions newest first

  1. v1 Latest11 patches 35 repliesIn review

Patches in v1 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/11fs: provide unlocked helper for freeze_super()fs/super.c+55 -451 reply
2/11fs: provide unlocked helper thaw_super()fs/super.c+26 -131 reply
3/11fs: add frozen sb state helpersfs/ext4/ext4_jbd2.c fs/super.c fs/xfs/xfs_trans.c +1 more+37 -411 replies
4/11fs: distinguish between user initiated freeze and kernel initiated freezefs/super.c include/linux/fs.h+29 -70 replies
5/11fs: add iterate_supers_excl() and iterate_supers_reverse_excl()fs/super.c include/linux/fs.h+93 -05 replies
6/11fs: freeze on suspend and thaw on resumefs/super.c include/linux/fs.h kernel/power/process.c+112 -10 replies
7/11xfs: remove not needed freezing callsfs/xfs/xfs_trans_ail.c+2 -54 replies
8/11ext4: remove not needed freezing callsfs/ext4/super.c+0 -20 replies
9/11f2fs: remove not needed freezing callsfs/f2fs/gc.c fs/f2fs/segment.c+2 -90 replies
10/11nilfs2: remove not needed freezing callsfs/nilfs2/segment.c+20 -280 replies
11/11jfs: remove not needed freezing callsfs/jfs/jfs_logmgr.c fs/jfs/jfs_txnmgr.c+12 -300 replies

Reviews trailers per patch

3 of 11 patches have a Reviewed-by or Acked-by.

PatchJan Kara
1/11R-b
2/11R-b
3/11
4/11
5/11R-b
6/11
7/11
8/11
9/11
10/11
11/11

Trailers given in replies are filled; those carried in the patches from earlier versions are outlined with dashes.

Read the v1 thread

Cover letter [PATCH 00/11] fs: use freeze_fs on suspend/hibernate

This is a followup from the original RFC which proposed to start to kill kthread freezing all together [0]. Instead of going straight out to the jugular for kthread freezing this series only addresses killing freezer calls on filesystems which implement freeze_fs, after we let the kernel freeze these filesystems for us on suspend.

This approach puts on a slow but steady path towards the original goal though. Each subsystem could look for similar solutions. Even with filesystems we're not all done yet, after this we'll still have to decide what to do about filesystems which do not implement freeze_fs().

Motivation and problem:

kthreads have some semantics for freezing, which helps the kernel freeze them when a system is going to suspend or hibernation. These semantics are not well defined though, and it actually turns out pretty hard to get it right.

Without a proper solution suspend and hibernation are fragile on filesystems, it can easily break suspend and fixing such issues are in no way trivial [1] [2].

Proposed solution:

Instead of fixing such semantics and trying to get all filesystems to do it right, we can easily do away with all freezing calls if the filesystem implements a proper freeze_fs() callback. The following 9 filesystems have freeze_fs() implemented as such we can let the kernel issue the callback upon suspend and thaw on resume automatically on our behalf.

o xfs
o reiserfs
o nilfs2
o jfs
o f2fs
o ext4
o ext2
o btrfs

Of these, the following have freezer helpers, which can then be removed after the kernel automaticaly calls freeze_fs for us on suspend:

o xfs
o nilfs2
o jfs
o f2fs
o ext4

I've tested this on a system with ext4 and XFS, and have let 0-day go at without issues. I have branches availabe for linux-next [3] and Linus' latest tree [4].

Further testing, thoughts, reviews, flames are all equally appreciated.

[0] https://lkml.kernel.org/r/[email protected]
[1] https://bugzilla.suse.com/show_bug.cgi?id=1043449
[2] https://lkml.kernel.org/r/[email protected]
[3] https://git.kernel.org/pub/scm/linux/kernel/git/mcgrof/linux-next.git/log/?h=20171129-fs-freeze-cleanup
[4] https://git.kernel.org/pub/scm/linux/kernel/git/mcgrof/linux.git/log/?h=20171129-fs-freeze-cleanup

Luis R. Rodriguez (11):
fs: provide unlocked helper for freeze_super()
fs: provide unlocked helper thaw_super()
fs: add frozen sb state helpers
fs: distinguish between user initiated freeze and kernel initiated
freeze
fs: add iterate_supers_excl() and iterate_supers_reverse_excl()
fs: freeze on suspend and thaw on resume
xfs: remove not needed freezing calls
ext4: remove not needed freezing calls
f2fs: remove not needed freezing calls
nilfs2: remove not needed freezing calls
jfs: remove not needed freezing calls

 fs/ext4/ext4_jbd2.c    |   2 +-
 fs/ext4/super.c        |   2 -
 fs/f2fs/gc.c           |   5 +-
 fs/f2fs/segment.c      |   6 +-
 fs/jfs/jfs_logmgr.c    |  11 +-
 fs/jfs/jfs_txnmgr.c    |  31 ++---
 fs/nilfs2/segment.c    |  48 ++++----
 fs/super.c             | 320 ++++++++++++++++++++++++++++++++++++++++---------
 fs/xfs/xfs_trans.c     |   2 +-
 fs/xfs/xfs_trans_ail.c |   7 +-
 include/linux/fs.h     |  63 +++++++++-
 kernel/power/process.c |  15 ++-
 12 files changed, 378 insertions(+), 134 deletions(-)
Signature · 1 line
2.15.0