svn commit: r315002 - head/sys/dev/mpt
Alexander Motin
mav at FreeBSD.org
Fri Mar 10 13:39:17 UTC 2017
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;
More information about the svn-src-all
mailing list