There was a bug that if writecache_flush fails due to I/O error, the
error is not reported in the FUA bio. This commit fixes it.

Signed-off-by: Mikulas Patocka <[email protected]>
Assisted-by: opencode:big-pickle
Cc: [email protected]
Fixes: 48debafe4f2f ("dm: add writecache target")

---
 drivers/md/dm-writecache.c |    7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

Index: linux-2.6/drivers/md/dm-writecache.c
===================================================================
--- linux-2.6.orig/drivers/md/dm-writecache.c
+++ linux-2.6/drivers/md/dm-writecache.c
@@ -1493,10 +1493,13 @@ bio_copy:
                }
        } while (bio->bi_iter.bi_size);
 
-       if (unlikely(bio->bi_opf & REQ_FUA || wc->uncommitted_blocks >= 
wc->autocommit_blocks))
+       if (unlikely(bio->bi_opf & REQ_FUA || wc->uncommitted_blocks >= 
wc->autocommit_blocks)) {
                writecache_flush(wc);
-       else
+               if (writecache_has_error(wc))
+                       bio->bi_status = BLK_STS_IOERR;
+       } else {
                writecache_schedule_autocommit(wc);
+       }
 
        return WC_MAP_SUBMIT;
 }


Reply via email to