From: Jan Kara <jack@suse.cz>
To: Luis Chamberlain <mcgrof@kernel.org>
Cc: hch@infradead.org, djwong@kernel.org, sandeen@sandeen.net,
song@kernel.org, rafael@kernel.org, gregkh@linuxfoundation.org,
viro@zeniv.linux.org.uk, jack@suse.cz, jikos@kernel.org,
bvanassche@acm.org, ebiederm@xmission.com, mchehab@kernel.org,
keescook@chromium.org, p.raghav@samsung.com,
da.gomez@samsung.com, linux-fsdevel@vger.kernel.org,
kernel@tuxforce.de, kexec@lists.infradead.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH 1/3] ext4: replace kthread freezing with auto fs freezing
Date: Thu, 25 May 2023 18:07:24 +0200 [thread overview]
Message-ID: <20230525160724.aqpwh5bapsw57uwm@quack3> (raw)
In-Reply-To: <20230508011927.4036707-2-mcgrof@kernel.org>
On Sun 07-05-23 18:19:25, Luis Chamberlain wrote:
> The kernel power management now supports allowing the VFS
> to handle filesystem freezing freezes and thawing. Take advantage
> of that and remove the kthread freezing. This is needed so that we
> properly really stop IO in flight without races after userspace
> has been frozen. Without this we rely on kthread freezing and
> its semantics are loose and error prone.
>
> The filesystem therefore is in charge of properly dealing with
> quiescing of the filesystem through its callbacks if it thinks
> it knows better than how the VFS handles it.
>
> The following Coccinelle rule was used as to remove the now superfluous
> freezer calls:
>
> make coccicheck MODE=patch SPFLAGS="--in-place --no-show-diff" COCCI=./fs-freeze-cleanup.cocci M=fs/ext4
>
> virtual patch
>
> @ remove_set_freezable @
> expression time;
> statement S, S2;
> expression task, current;
> @@
>
> (
> - set_freezable();
> |
> - if (try_to_freeze())
> - continue;
> |
> - try_to_freeze();
> |
> - freezable_schedule();
> + schedule();
> |
> - freezable_schedule_timeout(time);
> + schedule_timeout(time);
> |
> - if (freezing(task)) { S }
> |
> - if (freezing(task)) { S }
> - else
> { S2 }
> |
> - freezing(current)
> )
>
> @ remove_wq_freezable @
> expression WQ_E, WQ_ARG1, WQ_ARG2, WQ_ARG3, WQ_ARG4;
> identifier fs_wq_fn;
> @@
>
> (
> WQ_E = alloc_workqueue(WQ_ARG1,
> - WQ_ARG2 | WQ_FREEZABLE,
> + WQ_ARG2,
> ...);
> |
> WQ_E = alloc_workqueue(WQ_ARG1,
> - WQ_ARG2 | WQ_FREEZABLE | WQ_ARG3,
> + WQ_ARG2 | WQ_ARG3,
> ...);
> |
> WQ_E = alloc_workqueue(WQ_ARG1,
> - WQ_ARG2 | WQ_ARG3 | WQ_FREEZABLE,
> + WQ_ARG2 | WQ_ARG3,
> ...);
> |
> WQ_E = alloc_workqueue(WQ_ARG1,
> - WQ_ARG2 | WQ_ARG3 | WQ_FREEZABLE | WQ_ARG4,
> + WQ_ARG2 | WQ_ARG3 | WQ_ARG4,
> ...);
> |
> WQ_E =
> - WQ_ARG1 | WQ_FREEZABLE
> + WQ_ARG1
> |
> WQ_E =
> - WQ_ARG1 | WQ_FREEZABLE | WQ_ARG3
> + WQ_ARG1 | WQ_ARG3
> |
> fs_wq_fn(
> - WQ_FREEZABLE | WQ_ARG2 | WQ_ARG3
> + WQ_ARG2 | WQ_ARG3
> )
> |
> fs_wq_fn(
> - WQ_FREEZABLE | WQ_ARG2
> + WQ_ARG2
> )
> |
> fs_wq_fn(
> - WQ_FREEZABLE
> + 0
> )
> )
>
> @ add_auto_flag @
> expression E1;
> identifier fs_type;
> @@
>
> struct file_system_type fs_type = {
> .fs_flags = E1
> + | FS_AUTOFREEZE
> ,
> };
>
> Generated-by: Coccinelle SmPL
> Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
I guess we can also usually remove the #include <linux/freezer.h> line? At
least in ext4 it is the case I believe. Otherwise this looks good.
Honza
> ---
> fs/ext4/super.c | 9 +++------
> 1 file changed, 3 insertions(+), 6 deletions(-)
>
> diff --git a/fs/ext4/super.c b/fs/ext4/super.c
> index d39f386e9baf..1f436938d8be 100644
> --- a/fs/ext4/super.c
> +++ b/fs/ext4/super.c
> @@ -136,7 +136,7 @@ static struct file_system_type ext2_fs_type = {
> .init_fs_context = ext4_init_fs_context,
> .parameters = ext4_param_specs,
> .kill_sb = kill_block_super,
> - .fs_flags = FS_REQUIRES_DEV,
> + .fs_flags = FS_REQUIRES_DEV | FS_AUTOFREEZE,
> };
> MODULE_ALIAS_FS("ext2");
> MODULE_ALIAS("ext2");
> @@ -152,7 +152,7 @@ static struct file_system_type ext3_fs_type = {
> .init_fs_context = ext4_init_fs_context,
> .parameters = ext4_param_specs,
> .kill_sb = kill_block_super,
> - .fs_flags = FS_REQUIRES_DEV,
> + .fs_flags = FS_REQUIRES_DEV | FS_AUTOFREEZE,
> };
> MODULE_ALIAS_FS("ext3");
> MODULE_ALIAS("ext3");
> @@ -3790,7 +3790,6 @@ static int ext4_lazyinit_thread(void *arg)
> unsigned long next_wakeup, cur;
>
> BUG_ON(NULL == eli);
> - set_freezable();
>
> cont_thread:
> while (true) {
> @@ -3842,8 +3841,6 @@ static int ext4_lazyinit_thread(void *arg)
> }
> mutex_unlock(&eli->li_list_mtx);
>
> - try_to_freeze();
> -
> cur = jiffies;
> if ((time_after_eq(cur, next_wakeup)) ||
> (MAX_JIFFY_OFFSET == next_wakeup)) {
> @@ -7245,7 +7242,7 @@ static struct file_system_type ext4_fs_type = {
> .init_fs_context = ext4_init_fs_context,
> .parameters = ext4_param_specs,
> .kill_sb = kill_block_super,
> - .fs_flags = FS_REQUIRES_DEV | FS_ALLOW_IDMAP,
> + .fs_flags = FS_REQUIRES_DEV | FS_ALLOW_IDMAP | FS_AUTOFREEZE,
> };
> MODULE_ALIAS_FS("ext4");
>
> --
> 2.39.2
>
--
Jan Kara <jack@suse.com>
SUSE Labs, CR
next prev parent reply other threads:[~2023-05-25 16:08 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-05-08 1:19 [PATCH 0/3] filesystems: start removal of the kthread freezer Luis Chamberlain
2023-05-08 1:19 ` [PATCH 1/3] ext4: replace kthread freezing with auto fs freezing Luis Chamberlain
2023-05-25 16:07 ` Jan Kara [this message]
2023-05-08 1:19 ` [PATCH 2/3] btrfs: " Luis Chamberlain
2023-05-08 1:19 ` [PATCH 3/3] xfs: " Luis Chamberlain
2023-05-12 7:31 ` [PATCH 0/3] filesystems: start removal of the kthread freezer David Sterba
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230525160724.aqpwh5bapsw57uwm@quack3 \
--to=jack@suse.cz \
--cc=bvanassche@acm.org \
--cc=da.gomez@samsung.com \
--cc=djwong@kernel.org \
--cc=ebiederm@xmission.com \
--cc=gregkh@linuxfoundation.org \
--cc=hch@infradead.org \
--cc=jikos@kernel.org \
--cc=keescook@chromium.org \
--cc=kernel@tuxforce.de \
--cc=kexec@lists.infradead.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mcgrof@kernel.org \
--cc=mchehab@kernel.org \
--cc=p.raghav@samsung.com \
--cc=rafael@kernel.org \
--cc=sandeen@sandeen.net \
--cc=song@kernel.org \
--cc=viro@zeniv.linux.org.uk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®