* Re: mounting with lazytime doesn't work on ext4
[not found] <20170918192644.GA232@x4>
@ 2017-09-19 8:35 ` Markus Trippelsdorf
2017-09-19 10:18 ` [PATCH] VFS: Handle lazytime in do_mount() Markus Trippelsdorf
2017-09-19 14:46 ` mounting with lazytime doesn't work on ext4 Lukas Czerner
0 siblings, 2 replies; 7+ messages in thread
From: Markus Trippelsdorf @ 2017-09-19 8:35 UTC (permalink / raw)
To: Theodore Ts'o
Cc: Andreas Dilger, linux-ext4, Alexander Viro, linux-fsdevel
On 2017.09.18 at 21:26 +0200, Markus Trippelsdorf wrote:
> I switched back to ext4 yesterday, because my btrfs fs got corrupted.
> However mounting with lazytime doesn't work, neither specifying it in
> /etc/fstab nor a manual remount. It looks like the option is simply
> ignored.
>
> Strace shows, e.g.:
>
> # mount -o lazytime /boot
> mount("/dev/sdc2", "/boot", "ext4", MS_LAZYTIME, NULL) = 0
> EXT4-fs (sdc2): mounted filesystem with ordered data mode. Opts: (null)
> /dev/sdc2 on /boot type ext4 (rw,relatime,data=ordered)
>
> # mount -o remount,lazytime /var
> mount("/dev/sdb2", "/var", 0x12c4460, MS_REMOUNT|MS_NOATIME|MS_LAZYTIME, NULL) = 0
> EXT4-fs (sdb2): re-mounted. Opts: (null)
> /dev/sdb2 on /var type ext4 (rw,noatime,data=ordered)
>
> When I set "sb->s_flags |= MS_LAZYTIME;" unconditionally in
> fs/ext4/super.c:5057 (just deleting the if statement), then lazytime
> gets used when I remount.
>
> I'm running the latest git tree (4.14.0-rc1).
The following patch seems to fix the issue for remounts:
diff --git a/fs/namespace.c b/fs/namespace.c
index 54059b142d6b..d0b386706c5b 100644
--- a/fs/namespace.c
+++ b/fs/namespace.c
@@ -2322,6 +2322,9 @@ static int do_remount(struct path *path, int ms_flags, int sb_flags,
if (err)
return err;
+ if (mnt_flags & MS_LAZYTIME)
+ sb_flags |= MS_LAZYTIME;
+
down_write(&sb->s_umount);
if (ms_flags & MS_BIND)
err = change_mount_flags(path->mnt, ms_flags);
@@ -2809,6 +2812,8 @@ long do_mount(const char *dev_name, const char __user *dir_name,
mnt_flags &= ~(MNT_RELATIME | MNT_NOATIME);
if (flags & SB_RDONLY)
mnt_flags |= MNT_READONLY;
+ if (flags & MS_LAZYTIME)
+ mnt_flags |= MS_LAZYTIME;
/* The default atime for remount is preservation */
if ((flags & MS_REMOUNT) &&
--
Markus
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH] VFS: Handle lazytime in do_mount()
2017-09-19 8:35 ` mounting with lazytime doesn't work on ext4 Markus Trippelsdorf
@ 2017-09-19 10:18 ` Markus Trippelsdorf
2017-09-19 10:37 ` [PATCH v2] " Markus Trippelsdorf
2017-09-19 14:46 ` mounting with lazytime doesn't work on ext4 Lukas Czerner
1 sibling, 1 reply; 7+ messages in thread
From: Markus Trippelsdorf @ 2017-09-19 10:18 UTC (permalink / raw)
To: Theodore Ts'o
Cc: Andreas Dilger, linux-ext4, Alexander Viro, linux-fsdevel,
linux-kernel
The lazytime option didn't get passed on when using current util-linux,
which passes MS_LAZYTIME in the mountflags directly.
Fix the issue by handling the option in do_mount().
Signed-off-by: Markus Trippelsdorf <markus@trippelsdorf.de>
---
fs/namespace.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/fs/namespace.c b/fs/namespace.c
index 54059b142d6b..b633838b8f02 100644
--- a/fs/namespace.c
+++ b/fs/namespace.c
@@ -2823,7 +2823,8 @@ long do_mount(const char *dev_name, const char __user *dir_name,
SB_MANDLOCK |
SB_DIRSYNC |
SB_SILENT |
- SB_POSIXACL);
+ SB_POSIXACL |
+ MS_LAZYTIME);
if (flags & MS_REMOUNT)
retval = do_remount(&path, flags, sb_flags, mnt_flags,
--
Markus
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v2] VFS: Handle lazytime in do_mount()
2017-09-19 10:18 ` [PATCH] VFS: Handle lazytime in do_mount() Markus Trippelsdorf
@ 2017-09-19 10:37 ` Markus Trippelsdorf
2017-09-19 15:25 ` Lukas Czerner
0 siblings, 1 reply; 7+ messages in thread
From: Markus Trippelsdorf @ 2017-09-19 10:37 UTC (permalink / raw)
To: Theodore Ts'o
Cc: Andreas Dilger, linux-ext4, Alexander Viro, linux-fsdevel,
linux-kernel, David Howells
Since commit e462ec50cb5fa ("VFS: Differentiate mount flags (MS_*) from
internal superblock flags") the lazytime mount option didn't get passed
on anymore.
Fix the issue by handling the option in do_mount().
Signed-off-by: Markus Trippelsdorf <markus@trippelsdorf.de>
---
fs/namespace.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/fs/namespace.c b/fs/namespace.c
index 54059b142d6b..b633838b8f02 100644
--- a/fs/namespace.c
+++ b/fs/namespace.c
@@ -2823,7 +2823,8 @@ long do_mount(const char *dev_name, const char __user *dir_name,
SB_MANDLOCK |
SB_DIRSYNC |
SB_SILENT |
- SB_POSIXACL);
+ SB_POSIXACL |
+ SB_LAZYTIME);
if (flags & MS_REMOUNT)
retval = do_remount(&path, flags, sb_flags, mnt_flags,
--
Markus
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: mounting with lazytime doesn't work on ext4
2017-09-19 8:35 ` mounting with lazytime doesn't work on ext4 Markus Trippelsdorf
2017-09-19 10:18 ` [PATCH] VFS: Handle lazytime in do_mount() Markus Trippelsdorf
@ 2017-09-19 14:46 ` Lukas Czerner
2017-09-19 14:55 ` Markus Trippelsdorf
1 sibling, 1 reply; 7+ messages in thread
From: Lukas Czerner @ 2017-09-19 14:46 UTC (permalink / raw)
To: Markus Trippelsdorf
Cc: Theodore Ts'o, Andreas Dilger, linux-ext4, Alexander Viro,
linux-fsdevel
On Tue, Sep 19, 2017 at 10:35:06AM +0200, Markus Trippelsdorf wrote:
> On 2017.09.18 at 21:26 +0200, Markus Trippelsdorf wrote:
> > I switched back to ext4 yesterday, because my btrfs fs got corrupted.
> > However mounting with lazytime doesn't work, neither specifying it in
> > /etc/fstab nor a manual remount. It looks like the option is simply
> > ignored.
> >
> > Strace shows, e.g.:
> >
> > # mount -o lazytime /boot
> > mount("/dev/sdc2", "/boot", "ext4", MS_LAZYTIME, NULL) = 0
> > EXT4-fs (sdc2): mounted filesystem with ordered data mode. Opts: (null)
> > /dev/sdc2 on /boot type ext4 (rw,relatime,data=ordered)
> >
> > # mount -o remount,lazytime /var
> > mount("/dev/sdb2", "/var", 0x12c4460, MS_REMOUNT|MS_NOATIME|MS_LAZYTIME, NULL) = 0
> > EXT4-fs (sdb2): re-mounted. Opts: (null)
> > /dev/sdb2 on /var type ext4 (rw,noatime,data=ordered)
> >
> > When I set "sb->s_flags |= MS_LAZYTIME;" unconditionally in
> > fs/ext4/super.c:5057 (just deleting the if statement), then lazytime
> > gets used when I remount.
> >
> > I'm running the latest git tree (4.14.0-rc1).
>
> The following patch seems to fix the issue for remounts:
>
> diff --git a/fs/namespace.c b/fs/namespace.c
> index 54059b142d6b..d0b386706c5b 100644
> --- a/fs/namespace.c
> +++ b/fs/namespace.c
> @@ -2322,6 +2322,9 @@ static int do_remount(struct path *path, int ms_flags, int sb_flags,
> if (err)
> return err;
>
> + if (mnt_flags & MS_LAZYTIME)
> + sb_flags |= MS_LAZYTIME;
> +
> down_write(&sb->s_umount);
> if (ms_flags & MS_BIND)
> err = change_mount_flags(path->mnt, ms_flags);
> @@ -2809,6 +2812,8 @@ long do_mount(const char *dev_name, const char __user *dir_name,
> mnt_flags &= ~(MNT_RELATIME | MNT_NOATIME);
> if (flags & SB_RDONLY)
> mnt_flags |= MNT_READONLY;
> + if (flags & MS_LAZYTIME)
> + mnt_flags |= MS_LAZYTIME;
Hi,
this is definitely not right. Currently it seems that MS_LAZYTIME is
supposed to be per sb option, even though I do not see a reason why it
should not be per mnt options, in fact I'd prefer that.
However the problem happened when
e462ec50cb5fad19f6003a3d8087f4a0945dd2b1 switched from masking out per
mnt flags to masking in per sb flags. However David missed SB_LAZYFLAG.
The fix should be easy like this:
diff --git a/fs/namespace.c b/fs/namespace.c
index 54059b1..3b48ef1 100644
--- a/fs/namespace.c
+++ b/fs/namespace.c
@@ -2823,7 +2823,8 @@ long do_mount(const char *dev_name, const char __user *dir_name,
SB_MANDLOCK |
SB_DIRSYNC |
SB_SILENT |
- SB_POSIXACL);
+ SB_POSIXACL |
+ SB_LAZYTIME);
if (flags & MS_REMOUNT)
retval = do_remount(&path, flags, sb_flags, mnt_flags,
I can send a proper patch, however maybe it would be better to convert
it to per-mountpoint flags instead ? Any thoughts Ted ?
-Lukas
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: mounting with lazytime doesn't work on ext4
2017-09-19 14:46 ` mounting with lazytime doesn't work on ext4 Lukas Czerner
@ 2017-09-19 14:55 ` Markus Trippelsdorf
0 siblings, 0 replies; 7+ messages in thread
From: Markus Trippelsdorf @ 2017-09-19 14:55 UTC (permalink / raw)
To: Lukas Czerner
Cc: Theodore Ts'o, Andreas Dilger, linux-ext4, Alexander Viro,
linux-fsdevel
On 2017.09.19 at 16:46 +0200, Lukas Czerner wrote:
> On Tue, Sep 19, 2017 at 10:35:06AM +0200, Markus Trippelsdorf wrote:
> > On 2017.09.18 at 21:26 +0200, Markus Trippelsdorf wrote:
> > > I switched back to ext4 yesterday, because my btrfs fs got corrupted.
> > > However mounting with lazytime doesn't work, neither specifying it in
> > > /etc/fstab nor a manual remount. It looks like the option is simply
> > > ignored.
> > >
> > > Strace shows, e.g.:
> > >
> > > # mount -o lazytime /boot
> > > mount("/dev/sdc2", "/boot", "ext4", MS_LAZYTIME, NULL) = 0
> > > EXT4-fs (sdc2): mounted filesystem with ordered data mode. Opts: (null)
> > > /dev/sdc2 on /boot type ext4 (rw,relatime,data=ordered)
> > >
> > > # mount -o remount,lazytime /var
> > > mount("/dev/sdb2", "/var", 0x12c4460, MS_REMOUNT|MS_NOATIME|MS_LAZYTIME, NULL) = 0
> > > EXT4-fs (sdb2): re-mounted. Opts: (null)
> > > /dev/sdb2 on /var type ext4 (rw,noatime,data=ordered)
> > >
> > > When I set "sb->s_flags |= MS_LAZYTIME;" unconditionally in
> > > fs/ext4/super.c:5057 (just deleting the if statement), then lazytime
> > > gets used when I remount.
> > >
> > > I'm running the latest git tree (4.14.0-rc1).
> >
> > The following patch seems to fix the issue for remounts:
> >
> > diff --git a/fs/namespace.c b/fs/namespace.c
> > index 54059b142d6b..d0b386706c5b 100644
> > --- a/fs/namespace.c
> > +++ b/fs/namespace.c
> > @@ -2322,6 +2322,9 @@ static int do_remount(struct path *path, int ms_flags, int sb_flags,
> > if (err)
> > return err;
> >
> > + if (mnt_flags & MS_LAZYTIME)
> > + sb_flags |= MS_LAZYTIME;
> > +
> > down_write(&sb->s_umount);
> > if (ms_flags & MS_BIND)
> > err = change_mount_flags(path->mnt, ms_flags);
> > @@ -2809,6 +2812,8 @@ long do_mount(const char *dev_name, const char __user *dir_name,
> > mnt_flags &= ~(MNT_RELATIME | MNT_NOATIME);
> > if (flags & SB_RDONLY)
> > mnt_flags |= MNT_READONLY;
> > + if (flags & MS_LAZYTIME)
> > + mnt_flags |= MS_LAZYTIME;
>
> Hi,
>
> this is definitely not right. Currently it seems that MS_LAZYTIME is
> supposed to be per sb option, even though I do not see a reason why it
> should not be per mnt options, in fact I'd prefer that.
>
> However the problem happened when
> e462ec50cb5fad19f6003a3d8087f4a0945dd2b1 switched from masking out per
> mnt flags to masking in per sb flags. However David missed SB_LAZYFLAG.
> The fix should be easy like this:
Yes. I already send the identical patch. Please see:
https://lkml.org/lkml/2017/9/19/186
--
Markus
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v2] VFS: Handle lazytime in do_mount()
2017-09-19 10:37 ` [PATCH v2] " Markus Trippelsdorf
@ 2017-09-19 15:25 ` Lukas Czerner
2017-09-30 7:10 ` Markus Trippelsdorf
0 siblings, 1 reply; 7+ messages in thread
From: Lukas Czerner @ 2017-09-19 15:25 UTC (permalink / raw)
To: Markus Trippelsdorf
Cc: Theodore Ts'o, Andreas Dilger, linux-ext4, Alexander Viro,
linux-fsdevel, linux-kernel, David Howells
On Tue, Sep 19, 2017 at 12:37:24PM +0200, Markus Trippelsdorf wrote:
> Since commit e462ec50cb5fa ("VFS: Differentiate mount flags (MS_*) from
> internal superblock flags") the lazytime mount option didn't get passed
> on anymore.
>
> Fix the issue by handling the option in do_mount().
>
> Signed-off-by: Markus Trippelsdorf <markus@trippelsdorf.de>
> ---
> fs/namespace.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/fs/namespace.c b/fs/namespace.c
> index 54059b142d6b..b633838b8f02 100644
> --- a/fs/namespace.c
> +++ b/fs/namespace.c
> @@ -2823,7 +2823,8 @@ long do_mount(const char *dev_name, const char __user *dir_name,
> SB_MANDLOCK |
> SB_DIRSYNC |
> SB_SILENT |
> - SB_POSIXACL);
> + SB_POSIXACL |
> + SB_LAZYTIME);
Looks good. Although I still think that this can be per mountpoint options.
Regardless of that, you can add
Reviewed-by: Lukas Czerner <lczerner@redhat.com>
>
> if (flags & MS_REMOUNT)
> retval = do_remount(&path, flags, sb_flags, mnt_flags,
> --
> Markus
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v2] VFS: Handle lazytime in do_mount()
2017-09-19 15:25 ` Lukas Czerner
@ 2017-09-30 7:10 ` Markus Trippelsdorf
0 siblings, 0 replies; 7+ messages in thread
From: Markus Trippelsdorf @ 2017-09-30 7:10 UTC (permalink / raw)
To: Lukas Czerner
Cc: Theodore Ts'o, Andreas Dilger, linux-ext4, Alexander Viro,
linux-fsdevel, linux-kernel, David Howells
On 2017.09.19 at 17:25 +0200, Lukas Czerner wrote:
> On Tue, Sep 19, 2017 at 12:37:24PM +0200, Markus Trippelsdorf wrote:
> > Since commit e462ec50cb5fa ("VFS: Differentiate mount flags (MS_*) from
> > internal superblock flags") the lazytime mount option didn't get passed
> > on anymore.
> >
> > Fix the issue by handling the option in do_mount().
> >
> > Signed-off-by: Markus Trippelsdorf <markus@trippelsdorf.de>
> > ---
> > fs/namespace.c | 3 ++-
> > 1 file changed, 2 insertions(+), 1 deletion(-)
> >
> > diff --git a/fs/namespace.c b/fs/namespace.c
> > index 54059b142d6b..b633838b8f02 100644
> > --- a/fs/namespace.c
> > +++ b/fs/namespace.c
> > @@ -2823,7 +2823,8 @@ long do_mount(const char *dev_name, const char __user *dir_name,
> > SB_MANDLOCK |
> > SB_DIRSYNC |
> > SB_SILENT |
> > - SB_POSIXACL);
> > + SB_POSIXACL |
> > + SB_LAZYTIME);
>
> Looks good. Although I still think that this can be per mountpoint options.
>
> Regardless of that, you can add
> Reviewed-by: Lukas Czerner <lczerner@redhat.com>
Ping?
Al could you please take look?
Thanks.
--
Markus
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2017-09-30 7:10 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20170918192644.GA232@x4>
2017-09-19 8:35 ` mounting with lazytime doesn't work on ext4 Markus Trippelsdorf
2017-09-19 10:18 ` [PATCH] VFS: Handle lazytime in do_mount() Markus Trippelsdorf
2017-09-19 10:37 ` [PATCH v2] " Markus Trippelsdorf
2017-09-19 15:25 ` Lukas Czerner
2017-09-30 7:10 ` Markus Trippelsdorf
2017-09-19 14:46 ` mounting with lazytime doesn't work on ext4 Lukas Czerner
2017-09-19 14:55 ` Markus Trippelsdorf
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).