[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <20191202102409.3980-1-wings.wyang@gmail.com>
Date: Mon, 2 Dec 2019 18:24:09 +0800
From: kungf <wings.wyang@...il.com>
To: colyli@...e.de
Cc: kent.overstreet@...il.com, linux-bcache@...r.kernel.org,
linux-kernel@...r.kernel.org, kungf <wings.wyang@...il.com>
Subject: [PATCH] bcache: add REQ_FUA to avoid data lost in writeback mode
data may lost when in the follow scene of writeback mode:
1. client write data1 to bcache
2. client fdatasync
3. bcache flush cache set and backing device
if now data1 was not writed back to backing, it was only guaranteed safe in cache.
4.then cache writeback data1 to backing with only REQ_OP_WRITE
So data1 was not guaranteed in non-volatile storage, it may lost if power interruptionĀ
Signed-off-by: kungf <wings.wyang@...il.com>
---
drivers/md/bcache/writeback.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/md/bcache/writeback.c b/drivers/md/bcache/writeback.c
index 4a40f9eadeaf..e5cecb60569e 100644
--- a/drivers/md/bcache/writeback.c
+++ b/drivers/md/bcache/writeback.c
@@ -357,7 +357,7 @@ static void write_dirty(struct closure *cl)
*/
if (KEY_DIRTY(&w->key)) {
dirty_init(w);
- bio_set_op_attrs(&io->bio, REQ_OP_WRITE, 0);
+ bio_set_op_attrs(&io->bio, REQ_OP_WRITE | REQ_FUA, 0);
io->bio.bi_iter.bi_sector = KEY_START(&w->key);
bio_set_dev(&io->bio, io->dc->bdev);
io->bio.bi_end_io = dirty_endio;
--
2.17.1
Powered by blists - more mailing lists