From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sagi Grimberg Subject: Re: [PATCH v3 5/5] target/file: enable WRITE SAME when protection info is enabled Date: Sun, 26 Apr 2015 12:58:23 +0300 Message-ID: <553CB6BF.8090601@dev.mellanox.co.il> References: <1429972410-7146-1-git-send-email-akinobu.mita@gmail.com> <1429972410-7146-6-git-send-email-akinobu.mita@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1429972410-7146-6-git-send-email-akinobu.mita@gmail.com> Sender: target-devel-owner@vger.kernel.org To: Akinobu Mita , target-devel@vger.kernel.org Cc: Nicholas Bellinger , Sagi Grimberg , "Martin K. Petersen" , Christoph Hellwig , "James E.J. Bottomley" , linux-scsi@vger.kernel.org List-Id: linux-scsi@vger.kernel.org On 4/25/2015 5:33 PM, Akinobu Mita wrote: > Now we can generate correct PI for WRITE SAME command, so it is > unnecessary to disallow WRITE SAME when protection info is enabled. > > Signed-off-by: Akinobu Mita > Cc: Nicholas Bellinger > Cc: Sagi Grimberg > Cc: "Martin K. Petersen" > Cc: Christoph Hellwig > Cc: "James E.J. Bottomley" > Cc: target-devel@vger.kernel.org > Cc: linux-scsi@vger.kernel.org > --- > * No change from v2 > > drivers/target/target_core_file.c | 18 +++++++++++++----- > 1 file changed, 13 insertions(+), 5 deletions(-) > > diff --git a/drivers/target/target_core_file.c b/drivers/target/target_core_file.c > index 829817a..fe98f58 100644 > --- a/drivers/target/target_core_file.c > +++ b/drivers/target/target_core_file.c > @@ -376,16 +376,12 @@ fd_execute_write_same(struct se_cmd *cmd) > struct bio_vec *bvec; > unsigned int len = 0, i; > ssize_t ret; > + sense_reason_t rc; > > if (!nolb) { > target_complete_cmd(cmd, SAM_STAT_GOOD); > return 0; > } > - if (cmd->prot_op) { > - pr_err("WRITE_SAME: Protection information with FILEIO" > - " backends not supported\n"); > - return TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE; > - } > > if (cmd->t_data_nents > 1 || > cmd->t_data_sg[0].length != cmd->se_dev->dev_attrib.block_size) { > @@ -397,6 +393,10 @@ fd_execute_write_same(struct se_cmd *cmd) > return TCM_INVALID_CDB_FIELD; > } > > + rc = sbc_dif_verify(cmd, cmd->t_task_lba, nolb, 0, cmd->t_prot_sg, 0); > + if (rc) > + return rc; > + > bvec = kcalloc(nolb, sizeof(struct bio_vec), GFP_KERNEL); > if (!bvec) > return TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE; > @@ -418,6 +418,14 @@ fd_execute_write_same(struct se_cmd *cmd) > return TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE; > } > > + if (cmd->prot_op) { > + ret = fd_do_rw(cmd, fd_dev->fd_prot_file, se_dev->prot_length, > + cmd->t_prot_sg, cmd->t_prot_nents, > + cmd->prot_length, 1); > + if (ret < 0) > + return TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE; > + } > + > target_complete_cmd(cmd, SAM_STAT_GOOD); > return 0; > } > This looks good, iblock is needed too though. I think you just need a missing call to iblock_alloc_bip() and you're good to go (you can use scsi_debug with dif/dix to test it). I think it belongs in the same patch. Sagi.