diff mbox

Make statfs properly return read-only state after emergency remount

Message ID 20170629092540.7813-1-cmaiolino@redhat.com (mailing list archive)
State New, archived
Headers show

Commit Message

Carlos Maiolino June 29, 2017, 9:25 a.m. UTC
Emergency remount (sysrq-u) sets MS_RDONLY to the superblock but doesn't set
MNT_READONLY to the mount point.

Once calculate_f_flags() only check for the mount point read only state,
when setting kstatfs flags, after an emergency remount, statfs does not
report the filesystem as read-only, even though it is.

Enable flags_by_sb() to also check for superblock read only state, so the
kstatfs and consequently statfs can properly show the read-only state of
the filesystem.

Signed-off-by: Carlos Maiolino <cmaiolino@redhat.com>
---
 fs/statfs.c | 2 ++
 1 file changed, 2 insertions(+)

Comments

Jeff Layton June 29, 2017, 3:56 p.m. UTC | #1
On Thu, 2017-06-29 at 11:25 +0200, Carlos Maiolino wrote:
> Emergency remount (sysrq-u) sets MS_RDONLY to the superblock but doesn't set
> MNT_READONLY to the mount point.
> 
> Once calculate_f_flags() only check for the mount point read only state,
> when setting kstatfs flags, after an emergency remount, statfs does not
> report the filesystem as read-only, even though it is.
> 
> Enable flags_by_sb() to also check for superblock read only state, so the
> kstatfs and consequently statfs can properly show the read-only state of
> the filesystem.
> 
> Signed-off-by: Carlos Maiolino <cmaiolino@redhat.com>
> ---
>  fs/statfs.c | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/fs/statfs.c b/fs/statfs.c
> index 4e4623c..c1dfc37 100644
> --- a/fs/statfs.c
> +++ b/fs/statfs.c
> @@ -38,6 +38,8 @@ static int flags_by_sb(int s_flags)
>  		flags |= ST_SYNCHRONOUS;
>  	if (s_flags & MS_MANDLOCK)
>  		flags |= ST_MANDLOCK;
> +	if (s_flags & MS_RDONLY)
> +		flags |= ST_RDONLY;
>  	return flags;
>  }
>  



IIUC, the superblock won't be writeable once MS_RDONLY is set, so every
mount that uses it also becomes readonly regardless of how MNT_READONLY
is set. LGTM:

Reviewed-by: Jeff Layton <jlayton@redhat.com>
diff mbox

Patch

diff --git a/fs/statfs.c b/fs/statfs.c
index 4e4623c..c1dfc37 100644
--- a/fs/statfs.c
+++ b/fs/statfs.c
@@ -38,6 +38,8 @@  static int flags_by_sb(int s_flags)
 		flags |= ST_SYNCHRONOUS;
 	if (s_flags & MS_MANDLOCK)
 		flags |= ST_MANDLOCK;
+	if (s_flags & MS_RDONLY)
+		flags |= ST_RDONLY;
 	return flags;
 }