On 9/29/23 03:27, John Garry wrote:
> +static blk_status_t sd_setup_atomic_cmnd(struct scsi_cmnd *cmd,
> + sector_t lba, unsigned int nr_blocks,
> + unsigned char flags)
> +{
> + cmd->cmd_len = 16;
> + cmd->cmnd[0] = WRITE_ATOMIC_16;
> + cmd->cmnd[1] = flags;
> + put_unaligned_be64(lba, &cmd->cmnd[2]);
> + cmd->cmnd[10] = 0;
> + cmd->cmnd[11] = 0;
> + put_unaligned_be16(nr_blocks, &cmd->cmnd[12]);
> + cmd->cmnd[14] = 0;
> + cmd->cmnd[15] = 0;
> +
> + return BLK_STS_OK;
> +}
Please store the 'dld' value in the GROUP NUMBER field. See e.g.
sd_setup_rw16_cmnd().
> @@ -1139,6 +1156,7 @@ static blk_status_t sd_setup_read_write_cmnd(struct scsi_cmnd *cmd)
> unsigned int nr_blocks = sectors_to_logical(sdp, blk_rq_sectors(rq));
> unsigned int mask = logical_to_sectors(sdp, 1) - 1;
> bool write = rq_data_dir(rq) == WRITE;
> + bool atomic_write = !!(rq->cmd_flags & REQ_ATOMIC) && write;
Please leave out the superfluous "!!".
Thanks,
Bart.
On 29/09/2023 18:59, Bart Van Assche wrote:
> On 9/29/23 03:27, John Garry wrote:
>> +static blk_status_t sd_setup_atomic_cmnd(struct scsi_cmnd *cmd,
>> + sector_t lba, unsigned int nr_blocks,
>> + unsigned char flags)
>> +{
>> + cmd->cmd_len = 16;
>> + cmd->cmnd[0] = WRITE_ATOMIC_16;
>> + cmd->cmnd[1] = flags;
>> + put_unaligned_be64(lba, &cmd->cmnd[2]);
>> + cmd->cmnd[10] = 0;
>> + cmd->cmnd[11] = 0;
>> + put_unaligned_be16(nr_blocks, &cmd->cmnd[12]);
>> + cmd->cmnd[14] = 0;
>> + cmd->cmnd[15] = 0;
>> +
>> + return BLK_STS_OK;
>> +}
>
> Please store the 'dld' value in the GROUP NUMBER field. See e.g.
> sd_setup_rw16_cmnd().
Are you sure that WRITE ATOMIC (16) supports dld?
>
>> @@ -1139,6 +1156,7 @@ static blk_status_t
>> sd_setup_read_write_cmnd(struct scsi_cmnd *cmd)
>> unsigned int nr_blocks = sectors_to_logical(sdp,
>> blk_rq_sectors(rq));
>> unsigned int mask = logical_to_sectors(sdp, 1) - 1;
>> bool write = rq_data_dir(rq) == WRITE;
>> + bool atomic_write = !!(rq->cmd_flags & REQ_ATOMIC) && write;
>
> Please leave out the superfluous "!!".
ok, fine.
Thanks,
John
On 10/2/23 04:36, John Garry wrote:
> On 29/09/2023 18:59, Bart Van Assche wrote:
>> On 9/29/23 03:27, John Garry wrote:
>>> +static blk_status_t sd_setup_atomic_cmnd(struct scsi_cmnd *cmd,
>>> + sector_t lba, unsigned int nr_blocks,
>>> + unsigned char flags)
>>> +{
>>> + cmd->cmd_len = 16;
>>> + cmd->cmnd[0] = WRITE_ATOMIC_16;
>>> + cmd->cmnd[1] = flags;
>>> + put_unaligned_be64(lba, &cmd->cmnd[2]);
>>> + cmd->cmnd[10] = 0;
>>> + cmd->cmnd[11] = 0;
>>> + put_unaligned_be16(nr_blocks, &cmd->cmnd[12]);
>>> + cmd->cmnd[14] = 0;
>>> + cmd->cmnd[15] = 0;
>>> +
>>> + return BLK_STS_OK;
>>> +}
>>
>> Please store the 'dld' value in the GROUP NUMBER field. See e.g.
>> sd_setup_rw16_cmnd().
>
> Are you sure that WRITE ATOMIC (16) supports dld?
Hi John,
I was assuming that DLD would be supported by the WRITE ATOMIC(16)
command. After having taken another look at the latest SBC-5 draft
I see that the DLD2/DLD1/DLD0 bits are not present in the WRITE
ATOMIC(16) command. So please ignore my comment above.
Thanks,
Bart.