lkml.org 
[lkml]   [2013]   [Jan]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[ 110/221] ext4: check dioread_nolock on remount
    Date
    3.7-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Jan Kara <jack@suse.cz>

    commit 261cb20cb2f0737a247aaf08dff7eb065e3e5b66 upstream.

    Currently we allow enabling dioread_nolock mount option on remount for
    filesystems where blocksize < PAGE_CACHE_SIZE. This isn't really
    supported so fix the bug by moving the check for blocksize !=
    PAGE_CACHE_SIZE into parse_options(). Change the original PAGE_SIZE to
    PAGE_CACHE_SIZE along the way because that's what we are really
    interested in.

    Signed-off-by: Jan Kara <jack@suse.cz>
    Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
    Reviewed-by: Eric Sandeen <sandeen@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    fs/ext4/super.c | 22 +++++++++++-----------
    1 file changed, 11 insertions(+), 11 deletions(-)

    --- a/fs/ext4/super.c
    +++ b/fs/ext4/super.c
    @@ -1650,9 +1650,7 @@ static int parse_options(char *options,
    unsigned int *journal_ioprio,
    int is_remount)
    {
    -#ifdef CONFIG_QUOTA
    struct ext4_sb_info *sbi = EXT4_SB(sb);
    -#endif
    char *p;
    substring_t args[MAX_OPT_ARGS];
    int token;
    @@ -1701,6 +1699,16 @@ static int parse_options(char *options,
    }
    }
    #endif
    + if (test_opt(sb, DIOREAD_NOLOCK)) {
    + int blocksize =
    + BLOCK_SIZE << le32_to_cpu(sbi->s_es->s_log_block_size);
    +
    + if (blocksize < PAGE_CACHE_SIZE) {
    + ext4_msg(sb, KERN_ERR, "can't mount with "
    + "dioread_nolock if block size != PAGE_SIZE");
    + return 0;
    + }
    + }
    return 1;
    }

    @@ -3446,15 +3454,6 @@ static int ext4_fill_super(struct super_
    clear_opt(sb, DELALLOC);
    }

    - blocksize = BLOCK_SIZE << le32_to_cpu(es->s_log_block_size);
    - if (test_opt(sb, DIOREAD_NOLOCK)) {
    - if (blocksize < PAGE_SIZE) {
    - ext4_msg(sb, KERN_ERR, "can't mount with "
    - "dioread_nolock if block size != PAGE_SIZE");
    - goto failed_mount;
    - }
    - }
    -
    sb->s_flags = (sb->s_flags & ~MS_POSIXACL) |
    (test_opt(sb, POSIX_ACL) ? MS_POSIXACL : 0);

    @@ -3496,6 +3495,7 @@ static int ext4_fill_super(struct super_
    if (!ext4_feature_set_ok(sb, (sb->s_flags & MS_RDONLY)))
    goto failed_mount;

    + blocksize = BLOCK_SIZE << le32_to_cpu(es->s_log_block_size);
    if (blocksize < EXT4_MIN_BLOCK_SIZE ||
    blocksize > EXT4_MAX_BLOCK_SIZE) {
    ext4_msg(sb, KERN_ERR,



    \
     
     \ /
      Last update: 2013-01-16 02:21    [W:4.092 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site