Author: mav
Date: Tue Nov 17 21:14:58 2009
New Revision: 199446
URL: http://svn.freebsd.org/changeset/base/199446

Log:
  MFC r198947:
  Implement device stats accounting for ATA commands.

Modified:
  stable/8/sys/cam/cam_periph.c
Directory Properties:
  stable/8/sys/   (props changed)
  stable/8/sys/amd64/include/xen/   (props changed)
  stable/8/sys/cddl/contrib/opensolaris/   (props changed)
  stable/8/sys/contrib/dev/acpica/   (props changed)
  stable/8/sys/contrib/pf/   (props changed)
  stable/8/sys/dev/xen/xenpci/   (props changed)

Modified: stable/8/sys/cam/cam_periph.c
==============================================================================
--- stable/8/sys/cam/cam_periph.c       Tue Nov 17 21:14:02 2009        
(r199445)
+++ stable/8/sys/cam/cam_periph.c       Tue Nov 17 21:14:58 2009        
(r199446)
@@ -898,7 +898,8 @@ 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))
+       if ((ds != NULL) && (ccb->ccb_h.func_code == XPT_SCSI_IO ||
+           ccb->ccb_h.func_code == XPT_ATA_IO))
                devstat_start_transaction(ds, NULL);
 
        xpt_action(ccb);
@@ -921,15 +922,27 @@ cam_periph_runccb(union ccb *ccb,
                                 /* timeout */0,
                                 /* getcount_only */ FALSE);
 
-       if ((ds != NULL) && (ccb->ccb_h.func_code == XPT_SCSI_IO))
-               devstat_end_transaction(ds,
+       if (ds != NULL) {
+               if (ccb->ccb_h.func_code == XPT_SCSI_IO) {
+                       devstat_end_transaction(ds,
                                        ccb->csio.dxfer_len,
-                                       ccb->csio.tag_action & 0xf,
+                                       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, NULL);
+               } else if (ccb->ccb_h.func_code == XPT_ATA_IO) {
+                       devstat_end_transaction(ds,
+                                       ccb->ataio.dxfer_len,
+                                       ccb->ataio.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, NULL);
+               }
+       }
 
        return(error);
 }
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to