linux_dsm_epyc7002/drivers
Nicholas Bellinger 68ff9b9b27 target: Add support for COMPARE_AND_WRITE emulation
This patch adds support for COMPARE_AND_WRITE emulation on a per block
basis.  This logic is used as an atomic test and set primative currently
used by VMWare ESX VAAI for performing array side locking of individual
VMFS extent ownership.

This includes the COMPARE_AND_WRITE CDB parsing within sbc_parse_cdb(),
and does the majority of the work within the compare_and_write_callback()
to perform the verify instance user data comparision, and subsequent
write instance user data I/O submission upon a successfull comparision.

The synchronization is enforced by se_device->caw_sem, that is obtained
before the initial READ I/O submission in sbc_compare_and_write().  The
mutex is then released upon MISCOMPARE in compare_and_write_callback(),
or upon WRITE instance user-data completion in compare_and_write_post().

The implementation currently assumes a single logical block (NoLB=1).

v4 changes:
 - Explicitly clear cmd->transport_complete_callback for two failure
   cases in sbc_compare_and_write() in order to avoid double unlock
   of ->caw_sem in compare_and_write_callback() (Dan Carpenter)

v3 changes:
 - Convert se_device->caw_mutex to ->caw_sem

v2 changes:
 - Set SCF_COMPARE_AND_WRITE and cmd->execute_cmd() to
   sbc_compare_and_write() during setup in sbc_parse_cdb()
 - Use sbc_compare_and_write() for initial READ submission with
   DMA_FROM_DEVICE
 - Reset cmd->execute_cmd() to sbc_execute_rw() for write instance
   user-data in compare_and_write_callback()
 - Drop SCF_BIDI command flag usage
 - Set TRANSPORT_PROCESSING + transport_state flags before write
   instance submission, and convert to __target_execute_cmd()
 - Prevent sbc_get_size() from being being called twice to
   generate incorrect size in sbc_parse_cdb()
 - Enforce se_device->caw_mutex synchronization between initial
   READ I/O submission, and final WRITE I/O completion.

Cc: Christoph Hellwig <hch@lst.de>
Cc: Hannes Reinecke <hare@suse.de>
Cc: Martin Petersen <martin.petersen@oracle.com>
Cc: Chris Mason <chris.mason@fusionio.com>
Cc: James Bottomley <JBottomley@Parallels.com>
Cc: Nicholas Bellinger <nab@linux-iscsi.org>
Signed-off-by: Nicholas Bellinger <nab@daterainc.com>
2013-09-10 16:41:59 -07:00
..
accessibility printk: move braille console support into separate braille.[ch] files 2013-07-31 14:41:03 -07:00
acpi ACPI: Try harder to resolve _ADR collisions for bridges 2013-08-07 22:55:00 +02:00
amba
ata pata_imx: expose module alias for loading from device-tree 2013-07-29 12:13:08 -04:00
atm
auxdisplay
base regmap: cache: Make sure to sync the last register in a block 2013-08-05 15:51:09 +01:00
bcma
block Merge branch 'for-3.11/drivers' of git://git.kernel.dk/linux-block 2013-07-22 19:02:52 -07:00
bluetooth Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth 2013-07-31 15:11:50 -04:00
bus
cdrom
char More virtio console fixes than I'm happy with, but all real issues, 2013-08-08 09:32:20 -07:00
clk
clocksource clocksource+irqchip: delete __cpuinit usage from all related files 2013-07-14 19:36:57 -04:00
connector
cpufreq cpufreq: rename ignore_nice as ignore_nice_load 2013-08-07 22:25:06 +02:00
cpuidle Revert "cpuidle: Quickly notice prediction failure for repeat mode" 2013-07-29 13:32:29 +02:00
crypto Merge git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6 2013-07-24 11:05:18 -07:00
dca
devfreq
dio
dma ARM: SoC fixes for v3.11-rc 2013-08-08 09:28:08 -07:00
edac EDAC: Fix lockdep splat 2013-07-23 16:01:28 -07:00
eisa
extcon
firewire firewire: fix libdc1394/FlyCap2 iso event regression 2013-07-27 20:24:36 +02:00
firmware dmi_scan: add comments on dmi_present() and the loop in dmi_scan_machine() 2013-07-31 14:41:02 -07:00
fmc
gpio gpio_msm: Fix build error due to missing err.h 2013-07-31 00:34:31 +02:00
gpu Merge tag 'drm-intel-fixes-2013-08-08' of git://people.freedesktop.org/~danvet/drm-intel into drm-fixes 2013-08-09 09:09:37 +10:00
hid Revert "HID: hid-logitech-dj: querying_devices was never set" 2013-08-09 11:34:19 +02:00
hsi
hv Drivers: hv: balloon: Do not post pressure status if interrupted 2013-07-16 23:19:19 -07:00
hwmon hwmon: (adt7470) Fix incorrect return code check 2013-08-08 12:43:07 -07:00
hwspinlock
i2c i2c: Fix Kontron PLD prescaler calculation 2013-08-05 10:31:18 +02:00
ide Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/ide 2013-07-10 18:15:41 -07:00
idle
iio iio: ti_am335x_adc: Fix wrong samples received on 1st read 2013-07-21 18:27:35 +01:00
infiniband iscsi/iser-target: Convert to command priv_size usage 2013-09-09 14:29:21 -07:00
input Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input 2013-07-13 18:05:13 -07:00
iommu IOMMU Updates for Linux 3.11 2013-07-10 14:46:40 -07:00
ipack
irqchip clocksource+irqchip: delete __cpuinit usage from all related files 2013-07-14 19:36:57 -04:00
isdn Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next 2013-07-09 18:24:39 -07:00
leds
lguest
macintosh powerpc/windfarm: Fix noisy slots-fan on Xserve (rm31) 2013-08-01 13:11:47 +10:00
mailbox
md 2 more bugfixes for md in 3.11 2013-07-26 11:20:10 -07:00
media Merge branch 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media 2013-08-09 15:04:09 -07:00
memory
memstick
message
mfd For the 3.11 merge we only have one new MFD driver for the Kontron PLD. 2013-07-10 11:10:27 -07:00
misc Char/Misc patches for 3.11-rc3 2013-07-26 11:36:12 -07:00
mmc ARM: pxa: propagate errors from regulator_enable() to pxamci 2013-07-23 12:15:15 -07:00
mtd A couple of fixes and clean-ups, allow for assigning user-defined 2013-07-05 12:09:48 -07:00
net Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2013-08-03 15:00:23 -07:00
nfc Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next 2013-07-09 18:24:39 -07:00
ntb
nubus
of of/irq: init struct resource to 0 in of_irq_to_resource() 2013-07-22 19:40:38 +01:00
oprofile drivers: delete __cpuinit usage from all remaining drivers files 2013-07-14 19:36:59 -04:00
parisc parisc: Fix interrupt routing for C8000 serial ports 2013-07-31 23:42:32 +02:00
parport
pci ACPI: Try harder to resolve _ADR collisions for bridges 2013-08-07 22:55:00 +02:00
pcmcia
pinctrl pinctrl: fix a memleak when freeing maps 2013-07-25 17:18:36 +02:00
platform x86 platform drivers: fix gpio leak 2013-07-10 15:42:51 -04:00
pnp PNP / ACPI: avoid garbage in resource name 2013-07-18 01:38:59 +02:00
power Nothing exciting this time, just assorted fixes and cleanups. 2013-07-10 11:13:00 -07:00
pps
ps3
ptp
pwm
rapidio rapidio: fix use after free in rio_unregister_scan() 2013-07-31 14:41:02 -07:00
regulator For the 3.11 merge we only have one new MFD driver for the Kontron PLD. 2013-07-10 11:10:27 -07:00
remoteproc Trivial remoteproc fixes by Suman Anna, Wei Yongjun and Thomas Meyer. 2013-07-11 12:35:09 -07:00
reset
rpmsg
rtc drivers/rtc/rtc-twl.c: fix: rtcX/wakealarm attribute isn't created 2013-07-31 14:41:03 -07:00
s390 s390/dasd: fix hanging devices after path events 2013-07-30 16:17:25 +02:00
sbus
scsi target/qla2xxx: Make demo_mode_login_only modifiable 2013-08-12 20:31:52 -07:00
sfi
sh
sn
spi spi: spi-davinci: Fix direction in dma_map_single() 2013-07-29 20:27:54 +01:00
ssb Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus 2013-07-13 14:52:21 -07:00
staging staging: zcache: fix "zcache=" kernel parameter 2013-07-29 11:45:09 -07:00
target target: Add support for COMPARE_AND_WRITE emulation 2013-09-10 16:41:59 -07:00
tc
thermal Thermal: Fix lockup of cpu_down() 2013-07-22 09:34:46 +08:00
tty parisc: Fix interrupt routing for C8000 serial ports 2013-07-31 23:42:32 +02:00
uio
usb usb: xhci: add missing dma-mapping.h includes 2013-07-31 11:27:18 -07:00
uwb
vfio vfio-pci: Avoid deadlock on remove 2013-07-24 16:36:41 -06:00
vhost vhost/scsi: Add pre-allocation for tv_cmd SGL + upages memory 2013-09-09 14:29:19 -07:00
video fbdev fixes: 2013-08-09 11:52:34 -07:00
virt
virtio No real surprises. 2013-07-10 14:50:58 -07:00
vlynq
vme
w1
watchdog Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus 2013-07-13 14:52:21 -07:00
xen Fixes: 2013-07-31 11:37:43 -07:00
zorro
Kconfig For the 3.11 merge we only have one new MFD driver for the Kontron PLD. 2013-07-10 11:10:27 -07:00
Makefile For the 3.11 merge we only have one new MFD driver for the Kontron PLD. 2013-07-10 11:10:27 -07:00