mirror of
https://github.com/freebsd/freebsd-src
synced 2024-10-07 09:00:28 +00:00
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. MFC after: 2 weeks
This commit is contained in:
parent
57223e9994
commit
2ef6e7aea8
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=315082
|
@ -2724,36 +2724,25 @@ xpt_action_default(union ccb *start_ccb)
|
|||
}
|
||||
case XPT_GDEV_STATS:
|
||||
{
|
||||
struct cam_ed *dev;
|
||||
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;
|
||||
|
||||
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;
|
||||
|
||||
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:
|
||||
|
|
Loading…
Reference in a new issue