Re: [PATCH 0/5] block/scsi/lio support for COMPARE_AND_WRITE

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 10/18/2014 11:32 PM, Mike Christie wrote:
On 10/18/2014 03:11 AM, Bart Van Assche wrote:
On 10/16/14 07:37, michaelc@xxxxxxxxxxx wrote:
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.

Hello Mike,

Just below the above text one can find the following additional
requirement in SBC-4:
<quote>
4) if the compare operation does not indicate a match, then terminate
    the command with CHECK CONDITION status with the sense key set to
    MISCOMPARE and the additional sense code set to MISCOMPARE DURING
    VERIFY OPERATION. In the sense data (see 4.18 and SPC-4) the offset
    from the start of the Data-Out Buffer to the first byte of data that
    was not equal shall be reported in the INFORMATION field.
</quote>

What I'm wondering now is how requirement (4) can be supported if
REQ_CMP_AND_WRITE doesn't return the offset of the first byte that
didn't match ? Additionally, shouldn't compare_and_write_callback() be
fixed such that it returns the miscompare offset to its caller ?


Yeah, Hannes pointed out that the original LIO code did not support
this. For the original code, I will fix that in another patchset to keep
this one smaller and focused. For what I need, I have been trying to
think of a nice way to pass additional info around. I think the options are:


Thanks Bart for bringing this up,

Actually Mike the lio code does support providing information field with
offset sector in sense data. I added it for PI but it can be used for
other errors such as miscompare (checkout
transport_send_check_condition_and_sense for
TCM_LOGICAL_BLOCK_[GUARD|APP_TAG|REF_TAG]_CHECK_FAILED error codes).

1. Instead of making it bio/request based, make it a
request_queue->compare_and_write function. We then just stack them and
can add whatever arguments/return values are necessary and do not have
to mess with the bio/request structs and function chains.

2. Add another argument to the end io functions that can be used to pass
back bio/request type specific info.

I'm for (2), can we standardize the way to provide the extra info?
so target iblock code can do the same thing for all?

Sagi.
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]
  Powered by Linux