lkml.org 
[lkml]   [2021]   [Nov]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.14 107/849] md/raid1: only allocate write behind bio for WriteMostly device
    Date
    From: Guoqing Jiang <guoqing.jiang@linux.dev>

    commit fd3b6975e9c11c4fa00965f82a0bfbb3b7b44101 upstream.

    Commit 6607cd319b6b91bff94e90f798a61c031650b514 ("raid1: ensure write
    behind bio has less than BIO_MAX_VECS sectors") tried to guarantee the
    size of behind bio is not bigger than BIO_MAX_VECS sectors.

    Unfortunately the same calltrace still could happen since an array could
    enable write-behind without write mostly device.

    To match the manpage of mdadm (which says "write-behind is only attempted
    on drives marked as write-mostly"), we need to check WriteMostly flag to
    avoid such unexpected behavior.

    [1]. https://bugzilla.kernel.org/show_bug.cgi?id=213181#c25

    Cc: stable@vger.kernel.org # v5.12+
    Cc: Jens Stutte <jens@chianterastutte.eu>
    Reported-by: Jens Stutte <jens@chianterastutte.eu>
    Signed-off-by: Guoqing Jiang <guoqing.jiang@linux.dev>
    Signed-off-by: Song Liu <songliubraving@fb.com>
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/md/raid1.c | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    --- a/drivers/md/raid1.c
    +++ b/drivers/md/raid1.c
    @@ -1496,7 +1496,7 @@ static void raid1_write_request(struct m
    if (!r1_bio->bios[i])
    continue;

    - if (first_clone) {
    + if (first_clone && test_bit(WriteMostly, &rdev->flags)) {
    /* do behind I/O ?
    * Not if there are too many, or cannot
    * allocate memory, or a reader on WriteMostly

    \
     
     \ /
      Last update: 2021-11-16 02:45    [W:2.451 / U:0.356 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site