mirror of https://gitee.com/openkylin/libvirt.git
utils: Add a helper to get the device name that sg device mapped to
E.g. % sg_map /dev/sg0 /dev/sda /dev/sg1 /dev/sr0 What the helper gets for /dev/sg0 is /dev/sda, it will be used by later patch.
This commit is contained in:
parent
539d0e19fd
commit
28d3ad952f
|
@ -1730,6 +1730,7 @@ virSCSIDeviceFileIterate;
|
||||||
virSCSIDeviceFree;
|
virSCSIDeviceFree;
|
||||||
virSCSIDeviceGetAdapter;
|
virSCSIDeviceGetAdapter;
|
||||||
virSCSIDeviceGetBus;
|
virSCSIDeviceGetBus;
|
||||||
|
virSCSIDeviceGetDevName;
|
||||||
virSCSIDeviceGetName;
|
virSCSIDeviceGetName;
|
||||||
virSCSIDeviceGetReadonly;
|
virSCSIDeviceGetReadonly;
|
||||||
virSCSIDeviceGetSgName;
|
virSCSIDeviceGetSgName;
|
||||||
|
|
|
@ -142,6 +142,53 @@ cleanup:
|
||||||
return sg;
|
return sg;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Returns device name (e.g. "sdc") on success, or NULL
|
||||||
|
* on failure.
|
||||||
|
*/
|
||||||
|
char *
|
||||||
|
virSCSIDeviceGetDevName(const char *adapter,
|
||||||
|
unsigned int bus,
|
||||||
|
unsigned int target,
|
||||||
|
unsigned int unit)
|
||||||
|
{
|
||||||
|
DIR *dir = NULL;
|
||||||
|
struct dirent *entry;
|
||||||
|
char *path = NULL;
|
||||||
|
char *name = NULL;
|
||||||
|
unsigned int adapter_id;
|
||||||
|
|
||||||
|
if (virSCSIDeviceGetAdapterId(adapter, &adapter_id) < 0)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
if (virAsprintf(&path,
|
||||||
|
SYSFS_SCSI_DEVICES "/%d:%d:%d:%d/block",
|
||||||
|
adapter_id, bus, target, unit) < 0) {
|
||||||
|
virReportOOMError();
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(dir = opendir(path))) {
|
||||||
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||||
|
_("Failed to open %s"), path);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
while ((entry = readdir(dir))) {
|
||||||
|
if (entry->d_name[0] == '.')
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (!(name = strdup(entry->d_name))) {
|
||||||
|
virReportOOMError();
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
cleanup:
|
||||||
|
closedir(dir);
|
||||||
|
VIR_FREE(path);
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
virSCSIDevicePtr
|
virSCSIDevicePtr
|
||||||
virSCSIDeviceNew(const char *adapter,
|
virSCSIDeviceNew(const char *adapter,
|
||||||
unsigned int bus,
|
unsigned int bus,
|
||||||
|
|
|
@ -37,6 +37,10 @@ char *virSCSIDeviceGetSgName(const char *adapter,
|
||||||
unsigned int bus,
|
unsigned int bus,
|
||||||
unsigned int target,
|
unsigned int target,
|
||||||
unsigned int unit);
|
unsigned int unit);
|
||||||
|
char *virSCSIDeviceGetDevName(const char *adapter,
|
||||||
|
unsigned int bus,
|
||||||
|
unsigned int target,
|
||||||
|
unsigned int unit);
|
||||||
|
|
||||||
virSCSIDevicePtr virSCSIDeviceNew(const char *adapter,
|
virSCSIDevicePtr virSCSIDeviceNew(const char *adapter,
|
||||||
unsigned int bus,
|
unsigned int bus,
|
||||||
|
|
Loading…
Reference in New Issue