From: Samuel Wu Date: Wed, 19 Nov 2025 17:14:25 +0000 (-0800) Subject: PM: sleep: Call pm_sleep_fs_sync() instead of ksys_sync_helper() X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=8e2d57e6539b1c2c9b76bc1726ac49384a96c04f;p=thirdparty%2Fkernel%2Flinux.git PM: sleep: Call pm_sleep_fs_sync() instead of ksys_sync_helper() Replace the direct calls to ksys_sync_helper() with the new pm_sleep_fs_sync() in suspend and hibernation code paths. This enables the new mechanism allowing the filesystem sync phase to be interrupted. Suggested-by: Saravana Kannan Signed-off-by: Samuel Wu Co-developed-by: Rafael J. Wysocki [ rjw: Subject and changelog edits, tags adjustment ] Link: https://patch.msgid.link/20251119171426.4086783-3-wusamuel@google.com Signed-off-by: Rafael J. Wysocki --- diff --git a/kernel/power/hibernate.c b/kernel/power/hibernate.c index 53166ef86ba46..7fed1cd36e4d8 100644 --- a/kernel/power/hibernate.c +++ b/kernel/power/hibernate.c @@ -820,7 +820,10 @@ int hibernate(void) if (error) goto Restore; - ksys_sync_helper(); + error = pm_sleep_fs_sync(); + if (error) + goto Notify; + if (filesystem_freeze_enabled) filesystems_freeze(); @@ -892,6 +895,7 @@ int hibernate(void) freezer_test_done = false; Exit: filesystems_thaw(); + Notify: pm_notifier_call_chain(PM_POST_HIBERNATION); Restore: pm_restore_console(); diff --git a/kernel/power/suspend.c b/kernel/power/suspend.c index 1c2f777da3674..02f50afaa9279 100644 --- a/kernel/power/suspend.c +++ b/kernel/power/suspend.c @@ -594,7 +594,11 @@ static int enter_state(suspend_state_t state) if (sync_on_suspend_enabled) { trace_suspend_resume(TPS("sync_filesystems"), 0, true); - ksys_sync_helper(); + + error = pm_sleep_fs_sync(); + if (error) + goto Unlock; + trace_suspend_resume(TPS("sync_filesystems"), 0, false); } diff --git a/kernel/power/user.c b/kernel/power/user.c index 3f9e3efb9f6e7..4401cfe26e5c9 100644 --- a/kernel/power/user.c +++ b/kernel/power/user.c @@ -278,7 +278,9 @@ static long snapshot_ioctl(struct file *filp, unsigned int cmd, if (data->frozen) break; - ksys_sync_helper(); + error = pm_sleep_fs_sync(); + if (error) + break; error = freeze_processes(); if (error)