Hi Sergey,
Thank you for the patch! Yet something to improve:
[auto build test ERROR on mkp-scsi/for-next]
[also build test ERROR on v5.13-rc7 next-20210624]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]
url:
https://github.com/0day-ci/linux/commits/Sergey-Samoylenko/scsi-target-co...
base:
https://git.kernel.org/pub/scm/linux/kernel/git/mkp/scsi.git for-next
config: x86_64-randconfig-a001-20210622 (attached as .config)
compiler: clang version 13.0.0 (
https://github.com/llvm/llvm-project
7c8a507272587f181ec29401453949ebcd8fec65)
reproduce (this is a W=1 build):
wget
https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O
~/bin/make.cross
chmod +x ~/bin/make.cross
# install x86_64 cross compiling tool for clang build
# apt-get install binutils-x86-64-linux-gnu
#
https://github.com/0day-ci/linux/commit/2af81ab452a5bda2c33f25a230cda9f97...
git remote add linux-review
https://github.com/0day-ci/linux
git fetch --no-tags linux-review
Sergey-Samoylenko/scsi-target-core-Fix-sense-key-for-invalid-XCOPY-request/20210624-192229
git checkout 2af81ab452a5bda2c33f25a230cda9f97ebb0431
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=x86_64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
All errors (new ones prefixed by >>):
> drivers/target/target_core_xcopy.c:782:2: error: implicit
declaration of function 'target_complete_cmd_with_sense'
[-Werror,-Wimplicit-function-declaration]
target_complete_cmd_with_sense(ec_cmd, sense_rc);
^
drivers/target/target_core_xcopy.c:782:2: note: did you mean
'target_complete_cmd_with_length'?
include/target/target_core_backend.h:78:6: note:
'target_complete_cmd_with_length' declared here
void target_complete_cmd_with_length(struct se_cmd *, u8, int);
^
1 error generated.
vim +/target_complete_cmd_with_sense +782 drivers/target/target_core_xcopy.c
667
668 static void target_xcopy_do_work(struct work_struct *work)
669 {
670 struct xcopy_op *xop = container_of(work, struct xcopy_op, xop_work);
671 struct se_cmd *ec_cmd = xop->xop_se_cmd;
672 struct se_device *src_dev, *dst_dev;
673 sector_t src_lba, dst_lba, end_lba;
674 unsigned int max_sectors;
675 int rc = 0;
676 unsigned short nolb, max_nolb, copied_nolb = 0;
677 sense_reason_t sense_rc;
678
679 sense_rc = target_parse_xcopy_cmd(xop);
680 if (sense_rc != TCM_NO_SENSE)
681 goto err_free;
682
683 if (WARN_ON_ONCE(!xop->src_dev) || WARN_ON_ONCE(!xop->dst_dev)) {
684 sense_rc = TCM_INVALID_PARAMETER_LIST;
685 goto err_free;
686 }
687
688 src_dev = xop->src_dev;
689 dst_dev = xop->dst_dev;
690 src_lba = xop->src_lba;
691 dst_lba = xop->dst_lba;
692 nolb = xop->nolb;
693 end_lba = src_lba + nolb;
694 /*
695 * Break up XCOPY I/O into hw_max_sectors sized I/O based on the
696 * smallest max_sectors between src_dev + dev_dev, or
697 */
698 max_sectors = min(src_dev->dev_attrib.hw_max_sectors,
699 dst_dev->dev_attrib.hw_max_sectors);
700 max_sectors = min_t(u32, max_sectors, XCOPY_MAX_SECTORS);
701
702 max_nolb = min_t(u16, max_sectors, ((u16)(~0U)));
703
704 pr_debug("target_xcopy_do_work: nolb: %hu, max_nolb: %hu end_lba:
%llu\n",
705 nolb, max_nolb, (unsigned long long)end_lba);
706 pr_debug("target_xcopy_do_work: Starting src_lba: %llu, dst_lba:
%llu\n",
707 (unsigned long long)src_lba, (unsigned long long)dst_lba);
708
709 while (src_lba < end_lba) {
710 unsigned short cur_nolb = min(nolb, max_nolb);
711 u32 cur_bytes = cur_nolb * src_dev->dev_attrib.block_size;
712
713 if (cur_bytes != xop->xop_data_bytes) {
714 /*
715 * (Re)allocate a buffer large enough to hold the XCOPY
716 * I/O size, which can be reused each read / write loop.
717 */
718 target_free_sgl(xop->xop_data_sg, xop->xop_data_nents);
719 rc = target_alloc_sgl(&xop->xop_data_sg,
720 &xop->xop_data_nents,
721 cur_bytes,
722 false, false);
723 if (rc < 0)
724 goto out;
725 xop->xop_data_bytes = cur_bytes;
726 }
727
728 pr_debug("target_xcopy_do_work: Calling read src_dev: %p src_lba:
%llu,"
729 " cur_nolb: %hu\n", src_dev, (unsigned long long)src_lba, cur_nolb);
730
731 rc = target_xcopy_read_source(ec_cmd, xop, src_dev, src_lba, cur_nolb);
732 if (rc < 0)
733 goto out;
734
735 src_lba += cur_nolb;
736 pr_debug("target_xcopy_do_work: Incremented READ src_lba to %llu\n",
737 (unsigned long long)src_lba);
738
739 pr_debug("target_xcopy_do_work: Calling write dst_dev: %p dst_lba:
%llu,"
740 " cur_nolb: %hu\n", dst_dev, (unsigned long long)dst_lba, cur_nolb);
741
742 rc = target_xcopy_write_destination(ec_cmd, xop, dst_dev,
743 dst_lba, cur_nolb);
744 if (rc < 0)
745 goto out;
746
747 dst_lba += cur_nolb;
748 pr_debug("target_xcopy_do_work: Incremented WRITE dst_lba to %llu\n",
749 (unsigned long long)dst_lba);
750
751 copied_nolb += cur_nolb;
752 nolb -= cur_nolb;
753 }
754
755 xcopy_pt_undepend_remotedev(xop);
756 target_free_sgl(xop->xop_data_sg, xop->xop_data_nents);
757 kfree(xop);
758
759 pr_debug("target_xcopy_do_work: Final src_lba: %llu, dst_lba: %llu\n",
760 (unsigned long long)src_lba, (unsigned long long)dst_lba);
761 pr_debug("target_xcopy_do_work: Blocks copied: %hu, Bytes Copied:
%u\n",
762 copied_nolb, copied_nolb * dst_dev->dev_attrib.block_size);
763
764 pr_debug("target_xcopy_do_work: Setting X-COPY GOOD status -> sending
response\n");
765 target_complete_cmd(ec_cmd, SAM_STAT_GOOD);
766 return;
767
768 out:
769 /*
770 * The XCOPY command was aborted after some data was transferred.
771 * Terminate command with CHECK CONDITION status, with the sense key
772 * set to COPY ABORTED.
773 */
774 sense_rc = TCM_COPY_TARGET_DEVICE_NOT_REACHABLE;
775 xcopy_pt_undepend_remotedev(xop);
776 target_free_sgl(xop->xop_data_sg, xop->xop_data_nents);
777
778 err_free:
779 kfree(xop);
780 pr_warn_ratelimited("target_xcopy_do_work: rc: %d, sense: %u,"
781 " XCOPY operation failed\n", rc, sense_rc);
782 target_complete_cmd_with_sense(ec_cmd, sense_rc);
783 }
784
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org