FAILED: patch "[PATCH] dm: make flush bios explicitly sync" failed to apply to 4.11-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 4.11-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
Quoted 1 line
From
ff0361b34ac63ef80c785c32d62e0e9d89a2cf89Mon Sep 17 00:00:00 2001
From: Jan Kara <[email protected]>
Date: Wed, 31 May 2017 09:44:32 +0200
Subject: [PATCH] dm: make flush bios explicitly sync
Commit b685d3d65ac7 ("block: treat REQ_FUA and REQ_PREFLUSH as synchronous") removed REQ_SYNC flag from WRITE_{FUA|PREFLUSH|...} definitions. generic_make_request_checks() however strips REQ_FUA and REQ_PREFLUSH flags from a bio when the storage doesn't report volatile write cache and thus write effectively becomes asynchronous which can lead to performance regressions.
Fix the problem by making sure all bios which are synchronous are properly marked with REQ_SYNC.
drivers/md/dm-bufio.c +1 -1
@@ -1334,7 +1334,7 @@ int dm_bufio_issue_flush(struct dm_bufio_client *c) {struct dm_io_request io_req = { .bi_op =REQ_OP_WRITE , - .bi_op_flags =REQ_PREFLUSH , + .bi_op_flags =REQ_PREFLUSH |REQ_SYNC , .mem.type =DM_IO_KMEM , .mem.ptr.addr =NULL , .client = c->dm_io,
drivers/md/dm-integrity.c +2 -1
@@ -783,7 +783,8 @@ static void write_journal(struct dm_integrity_c *ic, unsigned commit_start, unsifor (i =0 ; i < commit_sections; i++)rw_section_mac (ic, commit_start + i, true); } -rw_journal (ic,REQ_OP_WRITE ,REQ_FUA , commit_start, commit_sections, &io_comp); +rw_journal (ic,REQ_OP_WRITE ,REQ_FUA |REQ_SYNC , commit_start, + commit_sections, &io_comp); }else {unsigned to_end; io_comp.in_flight = (atomic_t )ATOMIC_INIT (2 );
drivers/md/dm-raid1.c +1 -1
@@ -260,7 +260,7 @@ static int mirror_flush(struct dm_target *ti)struct mirror *m;struct dm_io_request io_req = { .bi_op =REQ_OP_WRITE , - .bi_op_flags =REQ_PREFLUSH , + .bi_op_flags =REQ_PREFLUSH |REQ_SYNC , .mem.type =DM_IO_KMEM , .mem.ptr.addr =NULL , .client = ms->io_client,
drivers/md/dm-snap-persistent.c +2 -1
@@ -741,7 +741,8 @@ static void persistent_commit_exception(struct dm_exception_store *store,/* * Commit exceptions to disk. */ -if (ps->valid &&area_io (ps,REQ_OP_WRITE ,REQ_PREFLUSH |REQ_FUA )) +if (ps->valid &&area_io (ps,REQ_OP_WRITE , +REQ_PREFLUSH |REQ_FUA |REQ_SYNC )) ps->valid =0 ;/*
drivers/md/dm.c +1 -1
@@ -1657,7 +1657,7 @@ static struct mapped_device *alloc_dev(int minor)bio_init (&md->flush_bio,NULL ,0 ); md->flush_bio.bi_bdev = md->bdev; - md->flush_bio.bi_opf =REQ_OP_WRITE |REQ_PREFLUSH ; + md->flush_bio.bi_opf =REQ_OP_WRITE |REQ_PREFLUSH |REQ_SYNC ;dm_stats_init (&md->stats);