target: do not reject FUA CDBs when write cache is enabled but emulate_write_cache...
authorChristophe Vu-Brugier <cvubrugier@fastmail.fm>
Thu, 19 Mar 2015 13:30:13 +0000 (14:30 +0100)
committerNicholas Bellinger <nab@linux-iscsi.org>
Fri, 20 Mar 2015 06:26:46 +0000 (23:26 -0700)
commit9bc6548f372d8c829235095d91de99d8df79db6e
tree012b832b58932d5966c17ca9b8998f1550152c8d
parent5f7da044f8bc1cfb21c962edf34bd5699a76e7ae
target: do not reject FUA CDBs when write cache is enabled but emulate_write_cache is 0

A check that rejects a CDB with FUA bit set if no write cache is
emulated was added by the following commit:

  fde9f50 target: Add sanity checks for DPO/FUA bit usage

The condition is as follows:

  if (!dev->dev_attrib.emulate_fua_write ||
      !dev->dev_attrib.emulate_write_cache)

However, this check is wrong if the backend device supports WCE but
"emulate_write_cache" is disabled.

This patch uses se_dev_check_wce() (previously named
spc_check_dev_wce) to invoke transport->get_write_cache() if the
device has a write cache or check the "emulate_write_cache" attribute
otherwise.

Reported-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Christophe Vu-Brugier <cvubrugier@fastmail.fm>
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
drivers/target/target_core_device.c
drivers/target/target_core_sbc.c
drivers/target/target_core_spc.c
include/target/target_core_backend.h