summaryrefslogtreecommitdiffstats
path: root/sys/cam
diff options
context:
space:
mode:
authormav <mav@FreeBSD.org>2017-03-25 11:35:31 +0000
committermav <mav@FreeBSD.org>2017-03-25 11:35:31 +0000
commitc3e84c14c1a886f8b4880e7343c03095cc2fe2ce (patch)
tree699711055d5ec67bd0d45b417098b3926362df0c /sys/cam
parentfb062fb4b81b4fa78036315f4668abe210a3d248 (diff)
downloadFreeBSD-src-c3e84c14c1a886f8b4880e7343c03095cc2fe2ce.zip
FreeBSD-src-c3e84c14c1a886f8b4880e7343c03095cc2fe2ce.tar.gz
MFC r315082: Allow XPT_GDEV_STATS for UNCONFIGURED devices.
Queue statistics has nothing to do with presence or absence of INQUIRY data, etc. Target mode devices are never configured, but have queues.
Diffstat (limited to 'sys/cam')
-rw-r--r--sys/cam/cam_xpt.c47
1 files changed, 18 insertions, 29 deletions
diff --git a/sys/cam/cam_xpt.c b/sys/cam/cam_xpt.c
index 27f3bc0..628a128 100644
--- a/sys/cam/cam_xpt.c
+++ b/sys/cam/cam_xpt.c
@@ -2688,36 +2688,25 @@ call_sim:
}
case XPT_GDEV_STATS:
{
- struct cam_ed *dev;
-
- dev = path->device;
- if ((dev->flags & CAM_DEV_UNCONFIGURED) != 0) {
- start_ccb->ccb_h.status = CAM_DEV_NOT_THERE;
- } else {
- struct ccb_getdevstats *cgds;
- struct cam_eb *bus;
- struct cam_et *tar;
- struct cam_devq *devq;
+ struct ccb_getdevstats *cgds = &start_ccb->cgds;
+ struct cam_ed *dev = path->device;
+ struct cam_eb *bus = path->bus;
+ struct cam_et *tar = path->target;
+ struct cam_devq *devq = bus->sim->devq;
- cgds = &start_ccb->cgds;
- bus = path->bus;
- tar = path->target;
- devq = bus->sim->devq;
- mtx_lock(&devq->send_mtx);
- cgds->dev_openings = dev->ccbq.dev_openings;
- cgds->dev_active = dev->ccbq.dev_active;
- cgds->allocated = dev->ccbq.allocated;
- cgds->queued = cam_ccbq_pending_ccb_count(&dev->ccbq);
- cgds->held = cgds->allocated - cgds->dev_active -
- cgds->queued;
- cgds->last_reset = tar->last_reset;
- cgds->maxtags = dev->maxtags;
- cgds->mintags = dev->mintags;
- if (timevalcmp(&tar->last_reset, &bus->last_reset, <))
- cgds->last_reset = bus->last_reset;
- mtx_unlock(&devq->send_mtx);
- cgds->ccb_h.status = CAM_REQ_CMP;
- }
+ mtx_lock(&devq->send_mtx);
+ cgds->dev_openings = dev->ccbq.dev_openings;
+ cgds->dev_active = dev->ccbq.dev_active;
+ cgds->allocated = dev->ccbq.allocated;
+ cgds->queued = cam_ccbq_pending_ccb_count(&dev->ccbq);
+ cgds->held = cgds->allocated - cgds->dev_active - cgds->queued;
+ cgds->last_reset = tar->last_reset;
+ cgds->maxtags = dev->maxtags;
+ cgds->mintags = dev->mintags;
+ if (timevalcmp(&tar->last_reset, &bus->last_reset, <))
+ cgds->last_reset = bus->last_reset;
+ mtx_unlock(&devq->send_mtx);
+ cgds->ccb_h.status = CAM_REQ_CMP;
break;
}
case XPT_GDEVLIST:
OpenPOWER on IntegriCloud