From: Jaegeuk Kim via Linux-f2fs-devel <linux-f2fs-devel@lists.sourceforge.net>
To: Eric Sandeen <sandeen@redhat.com>
Cc: Daniel Rosenberg <drosen@google.com>,
linux-kernel@vger.kernel.org, stable@vger.kernel.org,
linux-f2fs-devel@lists.sourceforge.net
Subject: Re: [f2fs-dev] [PATCH] Revert "f2fs: remove unreachable lazytime mount option parsing"
Date: Wed, 20 Nov 2024 20:38:49 +0000 [thread overview]
Message-ID: <Zz5I2cdFn331_0ud@google.com> (raw)
In-Reply-To: <ee341ea4-904c-4885-bf8d-8111f9e416b5@redhat.com>
On 11/20, Eric Sandeen wrote:
> On 11/20/24 8:27 AM, Eric Sandeen wrote:
> > On 11/12/24 3:39 PM, Jaegeuk Kim wrote:
> >> Hi Eric,
> >>
> >> Could you please check this revert as it breaks the mount()?
> >> It seems F2FS needs to implement new mount support.
> >>
> >> Thanks,
> >
> > I'm sorry, I missed this email. I will look into it more today.
>
> Ok, I see that I had not considered a direct mount call passing
> the lazytime option strings. :(
>
> Using mount(8), "lazytime" is never passed as an option all the way to f2fs,
> nor is "nolazytime" -
>
> # mount -o loop,nolazytime f2fsfile.img mnt
> # mount | grep lazytime
> /root/f2fs-test/f2fsfile.img on /root/f2fs-test/mnt type f2fs (rw,relatime,lazytime,seclabel,background_gc=on,nogc_merge,discard,discard_unit=block,user_xattr,inline_xattr,acl,inline_data,inline_dentry,flush_merge,barrier,extent_cache,mode=adaptive,active_logs=6,alloc_mode=reuse,checkpoint_merge,fsync_mode=posix,memory=normal,errors=continue)
>
> (note that lazytime is still set despite -o nolazytime)
>
> when mount(8) is using the new mount API, it does do fsconfig for (no)lazytime:
>
> fsconfig(3, FSCONFIG_SET_FLAG, "nolazytime", NULL, 0) = 0
>
> but that is consumed by the VFS and never sent into f2fs for parsing.
>
> And because default_options() does:
>
> sbi->sb->s_flags |= SB_LAZYTIME;
>
> by default, it overrides the "nolazytime" that the vfs had previously handled.
>
> I'm fairly sure that when mount(8) was using the old mount API (long ago) it also
> did not send in the lazytime option string - it sent it as a flag instead.
>
> However - a direct call to mount(2) /will/ pass those options all the way
> to f2fs, and parse_options() does need to handle them there or it will be rejected
> as an invalid option.
>
> (Note that f2fs is the only filesystem that attempts to handle lazytime within
> the filesystem itself):
>
> [linux]# grep -r \"lazytime\" fs/*/
> fs/f2fs/super.c: {Opt_lazytime, "lazytime"},
> [linux]#
>
> I'm not entirely sure how to untangle all this, but regressions are not acceptable,
> so please revert my commit for now.
Thanks for the explanation. At a glance, I thought it's caused that f2fs doesn't
implement fs_context_operations. We'll take a look at how to support it.
>
> Thanks,
> -Eric
>
>
> > As for f2fs new mount API support, I have been struggling with it for a
> > long time, f2fs has been uniquely complex. The assumption that the superblock
> > and on-disk features are known at option parsing time makes it much more
> > difficult than most other filesystems.
> >
> > But if there's a problem/regression with this commit, I have no objection to
> > reverting the commit for now, and I'm sorry for the error.
> >
> > -Eric
> >
> >> On 11/12, Jaegeuk Kim wrote:
> >>> This reverts commit 54f43a10fa257ad4af02a1d157fefef6ebcfa7dc.
> >>>
> >>> The above commit broke the lazytime mount, given
> >>>
> >>> mount("/dev/vdb", "/mnt/test", "f2fs", 0, "lazytime");
> >>>
> >>> CC: stable@vger.kernel.org # 6.11+
> >>> Signed-off-by: Daniel Rosenberg <drosen@google.com>
> >>> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
> >>> ---
> >>> fs/f2fs/super.c | 10 ++++++++++
> >>> 1 file changed, 10 insertions(+)
> >>>
> >>> diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
> >>> index 49519439b770..35c4394e4fc6 100644
> >>> --- a/fs/f2fs/super.c
> >>> +++ b/fs/f2fs/super.c
> >>> @@ -150,6 +150,8 @@ enum {
> >>> Opt_mode,
> >>> Opt_fault_injection,
> >>> Opt_fault_type,
> >>> + Opt_lazytime,
> >>> + Opt_nolazytime,
> >>> Opt_quota,
> >>> Opt_noquota,
> >>> Opt_usrquota,
> >>> @@ -226,6 +228,8 @@ static match_table_t f2fs_tokens = {
> >>> {Opt_mode, "mode=%s"},
> >>> {Opt_fault_injection, "fault_injection=%u"},
> >>> {Opt_fault_type, "fault_type=%u"},
> >>> + {Opt_lazytime, "lazytime"},
> >>> + {Opt_nolazytime, "nolazytime"},
> >>> {Opt_quota, "quota"},
> >>> {Opt_noquota, "noquota"},
> >>> {Opt_usrquota, "usrquota"},
> >>> @@ -922,6 +926,12 @@ static int parse_options(struct super_block *sb, char *options, bool is_remount)
> >>> f2fs_info(sbi, "fault_type options not supported");
> >>> break;
> >>> #endif
> >>> + case Opt_lazytime:
> >>> + sb->s_flags |= SB_LAZYTIME;
> >>> + break;
> >>> + case Opt_nolazytime:
> >>> + sb->s_flags &= ~SB_LAZYTIME;
> >>> + break;
> >>> #ifdef CONFIG_QUOTA
> >>> case Opt_quota:
> >>> case Opt_usrquota:
> >>> --
> >>> 2.47.0.277.g8800431eea-goog
> >>
> >
_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
WARNING: multiple messages have this Message-ID (diff)
From: Jaegeuk Kim <jaegeuk@kernel.org>
To: Eric Sandeen <sandeen@redhat.com>
Cc: linux-kernel@vger.kernel.org,
linux-f2fs-devel@lists.sourceforge.net, stable@vger.kernel.org,
Daniel Rosenberg <drosen@google.com>
Subject: Re: [PATCH] Revert "f2fs: remove unreachable lazytime mount option parsing"
Date: Wed, 20 Nov 2024 20:38:49 +0000 [thread overview]
Message-ID: <Zz5I2cdFn331_0ud@google.com> (raw)
In-Reply-To: <ee341ea4-904c-4885-bf8d-8111f9e416b5@redhat.com>
On 11/20, Eric Sandeen wrote:
> On 11/20/24 8:27 AM, Eric Sandeen wrote:
> > On 11/12/24 3:39 PM, Jaegeuk Kim wrote:
> >> Hi Eric,
> >>
> >> Could you please check this revert as it breaks the mount()?
> >> It seems F2FS needs to implement new mount support.
> >>
> >> Thanks,
> >
> > I'm sorry, I missed this email. I will look into it more today.
>
> Ok, I see that I had not considered a direct mount call passing
> the lazytime option strings. :(
>
> Using mount(8), "lazytime" is never passed as an option all the way to f2fs,
> nor is "nolazytime" -
>
> # mount -o loop,nolazytime f2fsfile.img mnt
> # mount | grep lazytime
> /root/f2fs-test/f2fsfile.img on /root/f2fs-test/mnt type f2fs (rw,relatime,lazytime,seclabel,background_gc=on,nogc_merge,discard,discard_unit=block,user_xattr,inline_xattr,acl,inline_data,inline_dentry,flush_merge,barrier,extent_cache,mode=adaptive,active_logs=6,alloc_mode=reuse,checkpoint_merge,fsync_mode=posix,memory=normal,errors=continue)
>
> (note that lazytime is still set despite -o nolazytime)
>
> when mount(8) is using the new mount API, it does do fsconfig for (no)lazytime:
>
> fsconfig(3, FSCONFIG_SET_FLAG, "nolazytime", NULL, 0) = 0
>
> but that is consumed by the VFS and never sent into f2fs for parsing.
>
> And because default_options() does:
>
> sbi->sb->s_flags |= SB_LAZYTIME;
>
> by default, it overrides the "nolazytime" that the vfs had previously handled.
>
> I'm fairly sure that when mount(8) was using the old mount API (long ago) it also
> did not send in the lazytime option string - it sent it as a flag instead.
>
> However - a direct call to mount(2) /will/ pass those options all the way
> to f2fs, and parse_options() does need to handle them there or it will be rejected
> as an invalid option.
>
> (Note that f2fs is the only filesystem that attempts to handle lazytime within
> the filesystem itself):
>
> [linux]# grep -r \"lazytime\" fs/*/
> fs/f2fs/super.c: {Opt_lazytime, "lazytime"},
> [linux]#
>
> I'm not entirely sure how to untangle all this, but regressions are not acceptable,
> so please revert my commit for now.
Thanks for the explanation. At a glance, I thought it's caused that f2fs doesn't
implement fs_context_operations. We'll take a look at how to support it.
>
> Thanks,
> -Eric
>
>
> > As for f2fs new mount API support, I have been struggling with it for a
> > long time, f2fs has been uniquely complex. The assumption that the superblock
> > and on-disk features are known at option parsing time makes it much more
> > difficult than most other filesystems.
> >
> > But if there's a problem/regression with this commit, I have no objection to
> > reverting the commit for now, and I'm sorry for the error.
> >
> > -Eric
> >
> >> On 11/12, Jaegeuk Kim wrote:
> >>> This reverts commit 54f43a10fa257ad4af02a1d157fefef6ebcfa7dc.
> >>>
> >>> The above commit broke the lazytime mount, given
> >>>
> >>> mount("/dev/vdb", "/mnt/test", "f2fs", 0, "lazytime");
> >>>
> >>> CC: stable@vger.kernel.org # 6.11+
> >>> Signed-off-by: Daniel Rosenberg <drosen@google.com>
> >>> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
> >>> ---
> >>> fs/f2fs/super.c | 10 ++++++++++
> >>> 1 file changed, 10 insertions(+)
> >>>
> >>> diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
> >>> index 49519439b770..35c4394e4fc6 100644
> >>> --- a/fs/f2fs/super.c
> >>> +++ b/fs/f2fs/super.c
> >>> @@ -150,6 +150,8 @@ enum {
> >>> Opt_mode,
> >>> Opt_fault_injection,
> >>> Opt_fault_type,
> >>> + Opt_lazytime,
> >>> + Opt_nolazytime,
> >>> Opt_quota,
> >>> Opt_noquota,
> >>> Opt_usrquota,
> >>> @@ -226,6 +228,8 @@ static match_table_t f2fs_tokens = {
> >>> {Opt_mode, "mode=%s"},
> >>> {Opt_fault_injection, "fault_injection=%u"},
> >>> {Opt_fault_type, "fault_type=%u"},
> >>> + {Opt_lazytime, "lazytime"},
> >>> + {Opt_nolazytime, "nolazytime"},
> >>> {Opt_quota, "quota"},
> >>> {Opt_noquota, "noquota"},
> >>> {Opt_usrquota, "usrquota"},
> >>> @@ -922,6 +926,12 @@ static int parse_options(struct super_block *sb, char *options, bool is_remount)
> >>> f2fs_info(sbi, "fault_type options not supported");
> >>> break;
> >>> #endif
> >>> + case Opt_lazytime:
> >>> + sb->s_flags |= SB_LAZYTIME;
> >>> + break;
> >>> + case Opt_nolazytime:
> >>> + sb->s_flags &= ~SB_LAZYTIME;
> >>> + break;
> >>> #ifdef CONFIG_QUOTA
> >>> case Opt_quota:
> >>> case Opt_usrquota:
> >>> --
> >>> 2.47.0.277.g8800431eea-goog
> >>
> >
next prev parent reply other threads:[~2024-11-20 20:39 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-11-12 1:08 [f2fs-dev] [PATCH] Revert "f2fs: remove unreachable lazytime mount option parsing" Jaegeuk Kim via Linux-f2fs-devel
2024-11-12 1:08 ` Jaegeuk Kim
2024-11-12 21:39 ` [f2fs-dev] " Jaegeuk Kim via Linux-f2fs-devel
2024-11-12 21:39 ` Jaegeuk Kim
2024-11-19 2:18 ` [f2fs-dev] " Chao Yu via Linux-f2fs-devel
2024-11-19 2:18 ` Chao Yu
2024-11-19 20:48 ` Jaegeuk Kim via Linux-f2fs-devel
2024-11-19 20:48 ` Jaegeuk Kim
2024-11-20 2:57 ` Chao Yu via Linux-f2fs-devel
2024-11-20 2:57 ` Chao Yu
2024-11-20 20:35 ` Jaegeuk Kim via Linux-f2fs-devel
2024-11-20 20:35 ` Jaegeuk Kim
2024-11-20 14:27 ` Eric Sandeen
2024-11-20 14:27 ` Eric Sandeen
2024-11-20 14:52 ` [f2fs-dev] " Eric Sandeen
2024-11-20 14:52 ` Eric Sandeen
2024-11-20 20:38 ` Jaegeuk Kim via Linux-f2fs-devel [this message]
2024-11-20 20:38 ` Jaegeuk Kim
2024-11-21 15:11 ` [f2fs-dev] " Eric Sandeen
2024-11-21 18:37 ` Jaegeuk Kim via Linux-f2fs-devel
2024-11-18 17:00 ` patchwork-bot+f2fs--- via Linux-f2fs-devel
2024-11-18 17:00 ` patchwork-bot+f2fs
2024-11-21 1:15 ` Chao Yu via Linux-f2fs-devel
2024-11-21 1:15 ` Chao Yu
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=Zz5I2cdFn331_0ud@google.com \
--to=linux-f2fs-devel@lists.sourceforge.net \
--cc=drosen@google.com \
--cc=jaegeuk@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=sandeen@redhat.com \
--cc=stable@vger.kernel.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.