diff options
Diffstat (limited to 'fs/ext4/super.c')
-rw-r--r-- | fs/ext4/super.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/fs/ext4/super.c b/fs/ext4/super.c index e14d22c170d5..fb1e191d0fa9 100644 --- a/fs/ext4/super.c +++ b/fs/ext4/super.c | |||
@@ -3574,6 +3574,7 @@ static int ext4_remount(struct super_block *sb, int *flags, char *data) | |||
3574 | ext4_fsblk_t n_blocks_count = 0; | 3574 | ext4_fsblk_t n_blocks_count = 0; |
3575 | unsigned long old_sb_flags; | 3575 | unsigned long old_sb_flags; |
3576 | struct ext4_mount_options old_opts; | 3576 | struct ext4_mount_options old_opts; |
3577 | int enable_quota = 0; | ||
3577 | ext4_group_t g; | 3578 | ext4_group_t g; |
3578 | unsigned int journal_ioprio = DEFAULT_JOURNAL_IOPRIO; | 3579 | unsigned int journal_ioprio = DEFAULT_JOURNAL_IOPRIO; |
3579 | int err; | 3580 | int err; |
@@ -3630,6 +3631,12 @@ static int ext4_remount(struct super_block *sb, int *flags, char *data) | |||
3630 | } | 3631 | } |
3631 | 3632 | ||
3632 | if (*flags & MS_RDONLY) { | 3633 | if (*flags & MS_RDONLY) { |
3634 | err = vfs_dq_off(sb, 1); | ||
3635 | if (err < 0 && err != -ENOSYS) { | ||
3636 | err = -EBUSY; | ||
3637 | goto restore_opts; | ||
3638 | } | ||
3639 | |||
3633 | /* | 3640 | /* |
3634 | * First of all, the unconditional stuff we have to do | 3641 | * First of all, the unconditional stuff we have to do |
3635 | * to disable replay of the journal when we next remount | 3642 | * to disable replay of the journal when we next remount |
@@ -3698,6 +3705,7 @@ static int ext4_remount(struct super_block *sb, int *flags, char *data) | |||
3698 | goto restore_opts; | 3705 | goto restore_opts; |
3699 | if (!ext4_setup_super(sb, es, 0)) | 3706 | if (!ext4_setup_super(sb, es, 0)) |
3700 | sb->s_flags &= ~MS_RDONLY; | 3707 | sb->s_flags &= ~MS_RDONLY; |
3708 | enable_quota = 1; | ||
3701 | } | 3709 | } |
3702 | } | 3710 | } |
3703 | ext4_setup_system_zone(sb); | 3711 | ext4_setup_system_zone(sb); |
@@ -3713,6 +3721,8 @@ static int ext4_remount(struct super_block *sb, int *flags, char *data) | |||
3713 | #endif | 3721 | #endif |
3714 | unlock_super(sb); | 3722 | unlock_super(sb); |
3715 | unlock_kernel(); | 3723 | unlock_kernel(); |
3724 | if (enable_quota) | ||
3725 | vfs_dq_quota_on_remount(sb); | ||
3716 | return 0; | 3726 | return 0; |
3717 | 3727 | ||
3718 | restore_opts: | 3728 | restore_opts: |