lkml.org 
[lkml]   [2022]   [Jun]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.17 638/772] ext4: fix journal_ioprio mount option handling
    Date
    From: Ojaswin Mujoo <ojaswin@linux.ibm.com>

    commit e4e58e5df309d695799c494958962100a4c25039 upstream.

    In __ext4_super() we always overwrote the user specified journal_ioprio
    value with a default value, expecting parse_apply_sb_mount_options() to
    later correctly set ctx->journal_ioprio to the user specified value.
    However, if parse_apply_sb_mount_options() returned early because of
    empty sbi->es_s->s_mount_opts, the correct journal_ioprio value was
    never set.

    This patch fixes __ext4_super() to only use the default value if the
    user has not specified any value for journal_ioprio.

    Similarly, the remount behavior was to either use journal_ioprio
    value specified during initial mount, or use the default value
    irrespective of the journal_ioprio value specified during remount.
    This patch modifies this to first check if a new value for ioprio
    has been passed during remount and apply it. If no new value is
    passed, use the value specified during initial mount.

    Signed-off-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>
    Reviewed-by: Ritesh Harjani <riteshh@linux.ibm.com>
    Tested-by: Ritesh Harjani <riteshh@linux.ibm.com>
    Link: https://lore.kernel.org/r/20220418083545.45778-1-ojaswin@linux.ibm.com
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Cc: stable@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    fs/ext4/super.c | 15 ++++++++++-----
    1 file changed, 10 insertions(+), 5 deletions(-)

    --- a/fs/ext4/super.c
    +++ b/fs/ext4/super.c
    @@ -4394,7 +4394,8 @@ static int __ext4_fill_super(struct fs_c
    int silent = fc->sb_flags & SB_SILENT;

    /* Set defaults for the variables that will be set during parsing */
    - ctx->journal_ioprio = DEFAULT_JOURNAL_IOPRIO;
    + if (!(ctx->spec & EXT4_SPEC_JOURNAL_IOPRIO))
    + ctx->journal_ioprio = DEFAULT_JOURNAL_IOPRIO;

    sbi->s_inode_readahead_blks = EXT4_DEF_INODE_READAHEAD_BLKS;
    sbi->s_sectors_written_start =
    @@ -6261,7 +6262,6 @@ static int __ext4_remount(struct fs_cont
    char *to_free[EXT4_MAXQUOTAS];
    #endif

    - ctx->journal_ioprio = DEFAULT_JOURNAL_IOPRIO;

    /* Store the original options */
    old_sb_flags = sb->s_flags;
    @@ -6287,9 +6287,14 @@ static int __ext4_remount(struct fs_cont
    } else
    old_opts.s_qf_names[i] = NULL;
    #endif
    - if (sbi->s_journal && sbi->s_journal->j_task->io_context)
    - ctx->journal_ioprio =
    - sbi->s_journal->j_task->io_context->ioprio;
    + if (!(ctx->spec & EXT4_SPEC_JOURNAL_IOPRIO)) {
    + if (sbi->s_journal && sbi->s_journal->j_task->io_context)
    + ctx->journal_ioprio =
    + sbi->s_journal->j_task->io_context->ioprio;
    + else
    + ctx->journal_ioprio = DEFAULT_JOURNAL_IOPRIO;
    +
    + }

    ext4_apply_options(fc, sb);


    \
     
     \ /
      Last update: 2022-06-07 23:40    [W:4.027 / U:0.080 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site