Users may want to prioritise USB-attached storage devices differently to
other devices. Detect if a device is USB-attached and add a new device
type to identify it.
Signed-off-by: Samuel Mendoza-Jonas <sam.mj@au1.ibm.com>
} device_type_map[] = {
{ IPMI_BOOTDEV_NETWORK, DEVICE_TYPE_NETWORK },
{ IPMI_BOOTDEV_DISK, DEVICE_TYPE_DISK },
} device_type_map[] = {
{ IPMI_BOOTDEV_NETWORK, DEVICE_TYPE_NETWORK },
{ IPMI_BOOTDEV_DISK, DEVICE_TYPE_DISK },
+ { IPMI_BOOTDEV_DISK, DEVICE_TYPE_USB },
{ IPMI_BOOTDEV_CDROM, DEVICE_TYPE_OPTICAL },
};
{ IPMI_BOOTDEV_CDROM, DEVICE_TYPE_OPTICAL },
};
typestr = udev_device_get_devtype(dev);
if (!typestr) {
typestr = udev_device_get_devtype(dev);
if (!typestr) {
prop = udev_device_get_property_value(dev, "ID_FS_LABEL");
if (prop)
ddev->label = talloc_strdup(ddev, prop);
prop = udev_device_get_property_value(dev, "ID_FS_LABEL");
if (prop)
ddev->label = talloc_strdup(ddev, prop);
- ddev->device->type = cdrom ? DEVICE_TYPE_OPTICAL : DEVICE_TYPE_DISK;
+
+ usb = !!udev_device_get_property_value(dev, "ID_USB_DRIVER");
+ if (cdrom)
+ ddev->device->type = DEVICE_TYPE_OPTICAL;
+ else
+ ddev->device->type = usb ? DEVICE_TYPE_USB : DEVICE_TYPE_DISK;
udev_setup_device_params(dev, ddev);
/* Create a snapshot for all disks, unless it is an assembled RAID array */
udev_setup_device_params(dev, ddev);
/* Create a snapshot for all disks, unless it is an assembled RAID array */
- if (ddev->device->type == DEVICE_TYPE_DISK &&
+ if ((ddev->device->type == DEVICE_TYPE_DISK ||
+ ddev->device->type == DEVICE_TYPE_USB) &&
!udev_device_get_property_value(dev, "MD_LEVEL"))
devmapper_init_snapshot(udev->handler, ddev);
!udev_device_get_property_value(dev, "MD_LEVEL"))
devmapper_init_snapshot(udev->handler, ddev);
switch (type) {
case DEVICE_TYPE_DISK:
return _("Disk");
switch (type) {
case DEVICE_TYPE_DISK:
return _("Disk");
+ case DEVICE_TYPE_USB:
+ return _("USB");
case DEVICE_TYPE_OPTICAL:
return _("Optical");
case DEVICE_TYPE_NETWORK:
case DEVICE_TYPE_OPTICAL:
return _("Optical");
case DEVICE_TYPE_NETWORK:
switch (type) {
case DEVICE_TYPE_DISK:
return "disk";
switch (type) {
case DEVICE_TYPE_DISK:
return "disk";
+ case DEVICE_TYPE_USB:
+ return "usb";
case DEVICE_TYPE_OPTICAL:
return "optical";
case DEVICE_TYPE_NETWORK:
case DEVICE_TYPE_OPTICAL:
return "optical";
case DEVICE_TYPE_NETWORK:
{
if (!strncmp(str, "disk", strlen("disk")))
return DEVICE_TYPE_DISK;
{
if (!strncmp(str, "disk", strlen("disk")))
return DEVICE_TYPE_DISK;
+ if (!strncmp(str, "usb", strlen("usb")))
+ return DEVICE_TYPE_USB;
if (!strncmp(str, "optical", strlen("optical")))
return DEVICE_TYPE_OPTICAL;
if (!strncmp(str, "network", strlen("network")))
if (!strncmp(str, "optical", strlen("optical")))
return DEVICE_TYPE_OPTICAL;
if (!strncmp(str, "network", strlen("network")))
enum device_type {
DEVICE_TYPE_NETWORK,
DEVICE_TYPE_DISK,
enum device_type {
DEVICE_TYPE_NETWORK,
DEVICE_TYPE_DISK,
DEVICE_TYPE_OPTICAL,
DEVICE_TYPE_ANY,
DEVICE_TYPE_UNKNOWN,
DEVICE_TYPE_OPTICAL,
DEVICE_TYPE_ANY,
DEVICE_TYPE_UNKNOWN,
widget_subset_add_option(screen->widgets.boot_order_f, label);
}
widget_subset_add_option(screen->widgets.boot_order_f, label);
}
- for (i = DEVICE_TYPE_NETWORK; i < DEVICE_TYPE_NETWORK + 4; i++) {
+ for (i = DEVICE_TYPE_NETWORK; i < DEVICE_TYPE_UNKNOWN; i++) {
char *label;
if (i == DEVICE_TYPE_ANY)
char *label;
if (i == DEVICE_TYPE_ANY)
switch (dev->type) {
case DEVICE_TYPE_OPTICAL:
case DEVICE_TYPE_DISK:
switch (dev->type) {
case DEVICE_TYPE_OPTICAL:
case DEVICE_TYPE_DISK:
/* Find block info */
for (i = 0; sys && i < sys->n_blockdevs; i++) {
bd = sys->blockdevs[i];
/* Find block info */
for (i = 0; sys && i < sys->n_blockdevs; i++) {
bd = sys->blockdevs[i];
}
if (matched) {
snprintf(buf,sizeof(buf),"[%s: %s / %s]",
}
if (matched) {
snprintf(buf,sizeof(buf),"[%s: %s / %s]",
- dev->type == DEVICE_TYPE_DISK ?
- _("Disk") : _("CD/DVD"),
+ dev->type == DEVICE_TYPE_OPTICAL ?
+ _("CD/DVD") :
+ device_type_display_name(dev->type),
bd->name, bd->uuid);
}
break;
bd->name, bd->uuid);
}
break;
switch (type) {
case DEVICE_TYPE_DISK:
return "disk";
switch (type) {
case DEVICE_TYPE_DISK:
return "disk";
+ case DEVICE_TYPE_USB:
+ return "usb";
case DEVICE_TYPE_NETWORK:
return "network";
case DEVICE_TYPE_OPTICAL:
case DEVICE_TYPE_NETWORK:
return "network";
case DEVICE_TYPE_OPTICAL: