public inbox for linux-scsi@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/5] block/scsi/lio support for COMPARE_AND_WRITE
@ 2014-10-16  5:37 michaelc
  2014-10-16  5:37 ` [PATCH 1/5] block: set the nr of sectors a dev can compare and write atomically michaelc
                   ` (6 more replies)
  0 siblings, 7 replies; 17+ messages in thread
From: michaelc @ 2014-10-16  5:37 UTC (permalink / raw)
  To: linux-scsi, target-devel, ceph-devel, axboe

The following patches implement the SCSI command COMPARE_AND_WRITE as a new
bio/request type REQ_CMP_AND_WRITE. COMPARE_AND_WRITE is defined in the
SCSI SBC (SCSI block command) specs as:

The COMPARE AND WRITE command requests that the device server perform the
following as an uninterrupted series of actions:

1) perform the following operations:
        A) read the specified logical blocks; and
        B) transfer the specified number of logical blocks from the Data-Out
        Buffer (i.e., the verify instance of the data is transferred from the
        Data-Out Buffer);

2) compare the data read from the specified logical blocks with the verify
instance of the data; and
3) If the compared data matches, then perform the following operations:
        1) transfer the specified number of logical blocks from the Data-Out
        Buffer (i.e., the write instance of the data transferred from the
        Data-Out Buffer); and
        2) write those logical blocks.

The most command use of this command today is in VMware ESX where it is used
for locking. See
http://blogs.vmware.com/vsphere/2012/05/vmfs-locking-uncovered.html
[in ESX is it is called ATS (atomic test and set)] for more VMware info.
Linux fits into this use, because its SCSI target layer (LIO) is commonly
used as storage for ESX VMs.

Currently, to support this command in LIO we emulate it by taking a lock,
doing a read, comparing it, then doing a write. The problem this patchset
tries to solve is that in many cases it is more efficient to pass the one
COMPARE_AND_REQUEST request directly to the device where it might have
optimized locking and also will require fewer requests to/from the target
and backing storage device.

I am also bugging the ceph-devel list, because I am working on LIO + ceph
support. I am interested in using ceph's rbd device for the backing
storage for LIO, and I was thinking this request could be implemented similar
to how REQ_DISCARD (unmap/trim) is going to be, and I wanted to get some early
feedback. I know the scsi layer better, so I have only added support in sd in
this patchset.

The following patches were made over the target-pending for-next branch but
also apply to Linus's tree.




^ permalink raw reply	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2014-12-18  0:23 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-10-16  5:37 [PATCH 0/5] block/scsi/lio support for COMPARE_AND_WRITE michaelc
2014-10-16  5:37 ` [PATCH 1/5] block: set the nr of sectors a dev can compare and write atomically michaelc
2014-10-16  5:37 ` [PATCH 2/5] block: add function to issue compare and write michaelc
2014-10-17  9:55   ` Christoph Hellwig
2014-10-17 23:38     ` Martin K. Petersen
2014-10-18 15:16       ` Christoph Hellwig
2014-10-16  5:37 ` [PATCH 3/5] scsi: add support for COMPARE_AND_WRITE michaelc
2014-12-18  0:23   ` Elliott, Robert (Server Storage)
2014-10-16  5:37 ` [PATCH 4/5] lio: use REQ_COMPARE_AND_WRITE if supported michaelc
2014-10-16  5:37 ` [PATCH 5/5] lio iblock: add support for REQ_CMP_AND_WRITE michaelc
2014-10-16 10:39 ` [PATCH 0/5] block/scsi/lio support for COMPARE_AND_WRITE Douglas Gilbert
2014-10-16 20:01   ` Douglas Gilbert
2014-10-16 20:12     ` Elliott, Robert (Server Storage)
2014-10-17  6:02     ` Hannes Reinecke
2014-10-18  8:11 ` Bart Van Assche
2014-10-18 20:32   ` Mike Christie
2014-10-20  7:18     ` Sagi Grimberg

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox