#0 virDomainBlockStats (dom=0x7ffff00026c0, disk=0x69e080 "xvda", stats=0x7fffffffe300, size=40) at libvirt.c:7513
#1 0x000000000042cdfb in cmdDomblkstat (ctl=0x7fffffffe450, cmd=0x672240) at virsh.c:1392
#2 0x0000000000427604 in vshCommandRun (ctl=0x7fffffffe450, cmd=0x672240) at virsh.c:17763
#3 0x000000000042f3e1 in main (argc=4, argv=0x7fffffffe5d8) at virsh.c:19340
int
main(int argc, char **argv)
{
if (!ctl->imode) {
ret = vshCommandRun(ctl, ctl->cmd);
static bool
vshCommandRun(vshControl *ctl, const vshCmd *cmd)
{
ret = cmd->def->handler(ctl, cmd);
static bool
cmdDomblkstat (vshControl *ctl, const vshCmd *cmd)
{
if (virDomainBlockStats(dom, device, &stats,
sizeof stats) == -1) {
vshError(ctl, _("Failed to get block stats %s %s"),
name, device);
goto cleanup;
}
int
virDomainBlockStats(virDomainPtr dom, const char *disk,
virDomainBlockStatsPtr stats, size_t size)
{
if (conn->driver->domainBlockStats) {
if (conn->driver->domainBlockStats (dom, disk, &stats2) == -1)
static int
xenUnifiedDomainBlockStats (virDomainPtr dom, const char *path,
struct _virDomainBlockStats *stats)
{
GET_PRIVATE (dom->conn);
if (priv->opened[XEN_UNIFIED_HYPERVISOR_OFFSET])
return xenHypervisorDomainBlockStats (dom, path, stats);
xenUnifiedError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
return -1;
}
int
xenHypervisorDomainBlockStats (virDomainPtr dom,
const char *path,
struct _virDomainBlockStats *stats)
{
#ifdef __linux__
xenUnifiedPrivatePtr priv;
int ret;
priv = (xenUnifiedPrivatePtr) dom->conn->privateData;
xenUnifiedLock(priv);
/* Need to lock because it hits the xenstore handle :-( */
ret = xenLinuxDomainBlockStats (priv, dom, path, stats);
int
xenLinuxDomainBlockStats (xenUnifiedPrivatePtr priv,
virDomainPtr dom,
const char *path,
struct _virDomainBlockStats *stats)
{
int device = xenLinuxDomainDeviceID(dom->id, path);
if (device < 0)
return -1;
return read_bd_stats(priv, device, dom->id, stats);
}
2013年5月23日上传