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;
|
||||
virSCSIDeviceGetAdapter;
|
||||
virSCSIDeviceGetBus;
|
||||
virSCSIDeviceGetDevName;
|
||||
virSCSIDeviceGetName;
|
||||
virSCSIDeviceGetReadonly;
|
||||
virSCSIDeviceGetSgName;
|
||||
|
|
|
@ -142,6 +142,53 @@ cleanup:
|
|||
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
|
||||
virSCSIDeviceNew(const char *adapter,
|
||||
unsigned int bus,
|
||||
|
|
|
@ -37,6 +37,10 @@ char *virSCSIDeviceGetSgName(const char *adapter,
|
|||
unsigned int bus,
|
||||
unsigned int target,
|
||||
unsigned int unit);
|
||||
char *virSCSIDeviceGetDevName(const char *adapter,
|
||||
unsigned int bus,
|
||||
unsigned int target,
|
||||
unsigned int unit);
|
||||
|
||||
virSCSIDevicePtr virSCSIDeviceNew(const char *adapter,
|
||||
unsigned int bus,
|
||||
|
|
Loading…
Reference in New Issue