| From d2bdbee0d91a5d3ba2e439ce889e20bfe6fd4f1b Mon Sep 17 00:00:00 2001 |
| From: Nicholas Bellinger <nab@linux-iscsi.org> |
| Date: Tue, 14 May 2013 23:41:04 -0700 |
| Subject: target/iblock: Fix WCE=1 + DPOFUA=1 backend WRITE regression |
| |
| From: Nicholas Bellinger <nab@linux-iscsi.org> |
| |
| commit d2bdbee0d91a5d3ba2e439ce889e20bfe6fd4f1b upstream. |
| |
| This patch fixes a regression bug introduced in v3.9-rc1 where if the |
| underlying struct block_device for a IBLOCK backend is configured with |
| WCE=1 + DPOFUA=1 settings, the rw = WRITE assignment no longer occurs |
| in iblock_execute_rw(), and rw = 0 is passed to iblock_submit_bios() |
| in effect causing a READ bio operation to occur. |
| |
| The offending commit is: |
| |
| commit d0c8b259f8970d39354c1966853363345d401330 |
| Author: Nicholas Bellinger <nab@linux-iscsi.org> |
| Date: Tue Jan 29 22:10:06 2013 -0800 |
| |
| target/iblock: Use backend REQ_FLUSH hint for WriteCacheEnabled status |
| |
| Note the WCE=1 + DPOFUA=0, WCE=0 + DPOFUA=1, and WCE=0 + DPOFUA=0 cases |
| are not affected by this regression bug. |
| |
| Reported-by: Chris Boot <bootc@bootc.net> |
| Tested-by: Chris Boot <bootc@bootc.net> |
| Reported-by: Hannes Reinecke <hare@suse.de> |
| Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/target/target_core_iblock.c | 2 ++ |
| 1 file changed, 2 insertions(+) |
| |
| --- a/drivers/target/target_core_iblock.c |
| +++ b/drivers/target/target_core_iblock.c |
| @@ -679,6 +679,8 @@ iblock_execute_rw(struct se_cmd *cmd) |
| rw = WRITE_FUA; |
| else if (!(q->flush_flags & REQ_FLUSH)) |
| rw = WRITE_FUA; |
| + else |
| + rw = WRITE; |
| } else { |
| rw = WRITE; |
| } |