svn commit: r326605 - head/sys/cam
Warner Losh
imp at FreeBSD.org
Wed Dec 6 00:29:44 UTC 2017
Author: imp
Date: Wed Dec 6 00:29:43 2017
New Revision: 326605
URL: https://svnweb.freebsd.org/changeset/base/326605
Log:
Add NVME as a known device type for devstat processing.
Also, reduce the amount of cut and pasted code a little since only two
args are different in the devstat_end_transaction calls.
Sponsored by: Netflix
Modified:
head/sys/cam/cam_periph.c
Modified: head/sys/cam/cam_periph.c
==============================================================================
--- head/sys/cam/cam_periph.c Wed Dec 6 00:00:37 2017 (r326604)
+++ head/sys/cam/cam_periph.c Wed Dec 6 00:29:43 2017 (r326605)
@@ -1171,8 +1171,10 @@ cam_periph_runccb(union ccb *ccb,
* If the user has supplied a stats structure, and if we understand
* this particular type of ccb, record the transaction start.
*/
- if ((ds != NULL) && (ccb->ccb_h.func_code == XPT_SCSI_IO ||
- ccb->ccb_h.func_code == XPT_ATA_IO)) {
+ if (ds != NULL &&
+ (ccb->ccb_h.func_code == XPT_SCSI_IO ||
+ ccb->ccb_h.func_code == XPT_ATA_IO ||
+ ccb->ccb_h.func_code == XPT_NVME_IO)) {
starttime = <ime;
binuptime(starttime);
devstat_start_transaction(ds, starttime);
@@ -1203,25 +1205,27 @@ cam_periph_runccb(union ccb *ccb,
}
if (ds != NULL) {
+ uint32_t bytes;
+ devstat_tag_type tag;
+ bool valid = true;
+
if (ccb->ccb_h.func_code == XPT_SCSI_IO) {
- devstat_end_transaction(ds,
- ccb->csio.dxfer_len - ccb->csio.resid,
- ccb->csio.tag_action & 0x3,
- ((ccb->ccb_h.flags & CAM_DIR_MASK) ==
- CAM_DIR_NONE) ? DEVSTAT_NO_DATA :
- (ccb->ccb_h.flags & CAM_DIR_OUT) ?
- DEVSTAT_WRITE :
- DEVSTAT_READ, NULL, starttime);
+ bytes = ccb->csio.dxfer_len - ccb->csio.resid;
+ tag = (devstat_tag_type)(ccb->csio.tag_action & 0x3);
} else if (ccb->ccb_h.func_code == XPT_ATA_IO) {
- devstat_end_transaction(ds,
- ccb->ataio.dxfer_len - ccb->ataio.resid,
- 0, /* Not used in ATA */
- ((ccb->ccb_h.flags & CAM_DIR_MASK) ==
- CAM_DIR_NONE) ? DEVSTAT_NO_DATA :
- (ccb->ccb_h.flags & CAM_DIR_OUT) ?
- DEVSTAT_WRITE :
- DEVSTAT_READ, NULL, starttime);
+ bytes = ccb->ataio.dxfer_len - ccb->ataio.resid;
+ tag = (devstat_tag_type)0;
+ } else if (ccb->ccb_h.func_code == XPT_NVME_IO) {
+ bytes = ccb->nvmeio.dxfer_len; /* NB: resid no possible */
+ tag = (devstat_tag_type)0;
+ } else {
+ valid = false;
}
+ if (valid)
+ devstat_end_transaction(ds, bytes, tag,
+ ((ccb->ccb_h.flags & CAM_DIR_MASK) == CAM_DIR_NONE) ?
+ DEVSTAT_NO_DATA : (ccb->ccb_h.flags & CAM_DIR_OUT) ?
+ DEVSTAT_WRITE : DEVSTAT_READ, NULL, starttime);
}
return(error);
More information about the svn-src-all
mailing list