This reverts commit a3f8f8662771285511ae26c4c8d3ba1cd22159b9.
Closes: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15317
References: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15341
Signed-off-by: Chaitanya Kumar Borah <[email protected]>
---
fs/efivarfs/super.c | 1 -
fs/super.c | 13 +++----------
include/linux/fs.h | 3 +--
kernel/power/hibernate.c | 9 ++++++---
kernel/power/suspend.c | 3 ++-
5 files changed, 12 insertions(+), 17 deletions(-)
diff --git a/fs/efivarfs/super.c b/fs/efivarfs/super.c
index 6de97565d5f7..1f4d8ce56667 100644
--- a/fs/efivarfs/super.c
+++ b/fs/efivarfs/super.c
@@ -533,7 +533,6 @@ static struct file_system_type efivarfs_type = {
.init_fs_context = efivarfs_init_fs_context,
.kill_sb = efivarfs_kill_sb,
.parameters = efivarfs_parameters,
- .fs_flags = FS_POWER_FREEZE,
};
static __init int efivarfs_init(void)
diff --git a/fs/super.c b/fs/super.c
index 277b84e5c279..5bab94fb7e03 100644
--- a/fs/super.c
+++ b/fs/super.c
@@ -1183,14 +1183,11 @@ static inline bool get_active_super(struct super_block
*sb)
static const char *filesystems_freeze_ptr = "filesystems_freeze";
-static void filesystems_freeze_callback(struct super_block *sb, void
*freeze_all_ptr)
+static void filesystems_freeze_callback(struct super_block *sb, void *unused)
{
if (!sb->s_op->freeze_fs && !sb->s_op->freeze_super)
return;
- if (freeze_all_ptr && !(sb->s_type->fs_flags & FS_POWER_FREEZE))
- return;
-
if (!get_active_super(sb))
return;
@@ -1204,13 +1201,9 @@ static void filesystems_freeze_callback(struct
super_block *sb, void *freeze_all
deactivate_super(sb);
}
-void filesystems_freeze(bool freeze_all)
+void filesystems_freeze(void)
{
- void *freeze_all_ptr = NULL;
-
- if (freeze_all)
- freeze_all_ptr = &freeze_all;
- __iterate_supers(filesystems_freeze_callback, freeze_all_ptr,
+ __iterate_supers(filesystems_freeze_callback, NULL,
SUPER_ITER_UNLOCKED | SUPER_ITER_REVERSE);
}
diff --git a/include/linux/fs.h b/include/linux/fs.h
index dd3b57cfadee..6abc3bb2939d 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -2689,7 +2689,6 @@ struct file_system_type {
#define FS_ALLOW_IDMAP 32 /* FS has been updated to handle vfs
idmappings. */
#define FS_MGTIME 64 /* FS uses multigrain timestamps */
#define FS_LBS 128 /* FS supports LBS */
-#define FS_POWER_FREEZE 256 /* Always freeze on
suspend/hibernate */
#define FS_RENAME_DOES_D_MOVE 32768 /* FS will handle d_move() during
rename() internally. */
int (*init_fs_context)(struct fs_context *);
const struct fs_parameter_spec *parameters;
@@ -3608,7 +3607,7 @@ extern void drop_super_exclusive(struct super_block *sb);
extern void iterate_supers(void (*f)(struct super_block *, void *), void *arg);
extern void iterate_supers_type(struct file_system_type *,
void (*)(struct super_block *, void *), void *);
-void filesystems_freeze(bool freeze_all);
+void filesystems_freeze(void);
void filesystems_thaw(void);
extern int dcache_dir_open(struct inode *, struct file *);
diff --git a/kernel/power/hibernate.c b/kernel/power/hibernate.c
index 26e45f86b955..53166ef86ba4 100644
--- a/kernel/power/hibernate.c
+++ b/kernel/power/hibernate.c
@@ -821,7 +821,8 @@ int hibernate(void)
goto Restore;
ksys_sync_helper();
- filesystems_freeze(filesystem_freeze_enabled);
+ if (filesystem_freeze_enabled)
+ filesystems_freeze();
error = freeze_processes();
if (error)
@@ -927,7 +928,8 @@ int hibernate_quiet_exec(int (*func)(void *data), void
*data)
if (error)
goto restore;
- filesystems_freeze(filesystem_freeze_enabled);
+ if (filesystem_freeze_enabled)
+ filesystems_freeze();
error = freeze_processes();
if (error)
@@ -1077,7 +1079,8 @@ static int software_resume(void)
if (error)
goto Restore;
- filesystems_freeze(filesystem_freeze_enabled);
+ if (filesystem_freeze_enabled)
+ filesystems_freeze();
pm_pr_dbg("Preparing processes for hibernation restore.\n");
error = freeze_processes();
diff --git a/kernel/power/suspend.c b/kernel/power/suspend.c
index 3d4ebedad69f..b4ca17c2fecf 100644
--- a/kernel/power/suspend.c
+++ b/kernel/power/suspend.c
@@ -375,7 +375,8 @@ static int suspend_prepare(suspend_state_t state)
if (error)
goto Restore;
- filesystems_freeze(filesystem_freeze_enabled);
+ if (filesystem_freeze_enabled)
+ filesystems_freeze();
trace_suspend_resume(TPS("freeze_processes"), 0, true);
error = suspend_freeze_processes();
trace_suspend_resume(TPS("freeze_processes"), 0, false);
--
2.25.1