Author: mav
Date: Fri Mar 10 13:39:16 2017
New Revision: 315002
URL: https://svnweb.freebsd.org/changeset/base/315002

Log:
  Improve residuals reporting in target mode.
  
  MFC after:    2 weeks

Modified:
  head/sys/dev/mpt/mpt.h
  head/sys/dev/mpt/mpt_cam.c

Modified: head/sys/dev/mpt/mpt.h
==============================================================================
--- head/sys/dev/mpt/mpt.h      Fri Mar 10 13:14:06 2017        (r315001)
+++ head/sys/dev/mpt/mpt.h      Fri Mar 10 13:39:16 2017        (r315002)
@@ -331,8 +331,8 @@ typedef struct mpt_config_params {
 /**************************** MPI Target State Info 
***************************/
 typedef struct {
        uint32_t reply_desc;    /* current reply descriptor */
-       uint32_t resid;         /* current data residual */
        uint32_t bytes_xfered;  /* current relative offset */
+       int resid;              /* current data residual */
        union ccb *ccb;         /* pointer to currently active ccb */
        request_t *req;         /* pointer to currently active assist request */
        uint32_t

Modified: head/sys/dev/mpt/mpt_cam.c
==============================================================================
--- head/sys/dev/mpt/mpt_cam.c  Fri Mar 10 13:14:06 2017        (r315001)
+++ head/sys/dev/mpt/mpt_cam.c  Fri Mar 10 13:39:16 2017        (r315002)
@@ -4430,6 +4430,7 @@ mpt_target_start_io(struct mpt_softc *mp
                /*
                 * XXX Should be done after data transfer completes?
                 */
+               csio->resid = csio->dxfer_len - ta->DataLength;
                tgt->resid -= csio->dxfer_len;
                tgt->bytes_xfered += csio->dxfer_len;
 
@@ -4732,7 +4733,11 @@ mpt_scsi_tgt_status(struct mpt_softc *mp
 #ifndef        WE_TRUST_AUTO_GOOD_STATUS
                resplen = MIN_FCP_RESPONSE_SIZE;
 #endif
-               if (tgt->resid) {
+               if (tgt->resid < 0) {
+                       rsp[2] |= htobe32(0x400); /* XXXX NEED MNEMONIC!!!! */
+                       rsp[3] = htobe32(-tgt->resid);
+                       resplen = MIN_FCP_RESPONSE_SIZE;
+               } else if (tgt->resid > 0) {
                        rsp[2] |= htobe32(0x800); /* XXXX NEED MNEMONIC!!!! */
                        rsp[3] = htobe32(tgt->resid);
                        resplen = MIN_FCP_RESPONSE_SIZE;
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to