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:
Alexander Motin 2017-03-11 18:23:05 +00:00
parent 57223e9994
commit 2ef6e7aea8
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=315082

View file

@ -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: