Print this page
4846 HAL partition names don't match real partition names

*** 2,11 **** --- 2,12 ---- * * devinfo_storage.c : storage devices * * Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved. * Copyright 2013 Garrett D'Amore <garrett@damore.org> + * Copyright 2014 Andrew Stormont. * * Licensed under the Academic Free License version 2.1 * **************************************************************************/
*** 79,90 **** const gchar *devinfo_volume_get_prober (HalDevice *d, int *timeout); const gchar *devinfo_storage_get_prober (HalDevice *d, int *timeout); static char *devinfo_scsi_dtype2str(int dtype); static char *devinfo_volume_get_slice_name (char *devlink); ! static gboolean dos_to_dev(char *path, char **devpath, int *partnum); ! static gboolean is_dos_path(char *path, int *partnum); static void devinfo_storage_set_nicknames (HalDevice *d); DevinfoDevHandler devinfo_ide_handler = { devinfo_ide_add, --- 80,90 ---- const gchar *devinfo_volume_get_prober (HalDevice *d, int *timeout); const gchar *devinfo_storage_get_prober (HalDevice *d, int *timeout); static char *devinfo_scsi_dtype2str(int dtype); static char *devinfo_volume_get_slice_name (char *devlink); ! static boolean_t is_dos_slice(const char *slice, int *partnum); static void devinfo_storage_set_nicknames (HalDevice *d); DevinfoDevHandler devinfo_ide_handler = { devinfo_ide_add,
*** 857,874 **** free (devlink); di_devfs_path_free (minor_path); continue; } - /* ignore p1..N - we'll use p0:N instead */ - if ((strlen (slice) > 1) && (slice[0] == 'p') && isdigit(slice[1]) && - ((atol(&slice[1])) > 0)) { - free (devlink); - di_devfs_path_free (minor_path); - continue; - } - m = devinfo_storage_new_minor(minor_path, slice, devlink, dev, -1); if (m == NULL) { free (devlink); di_devfs_path_free (minor_path); continue; --- 857,866 ----
*** 911,934 **** hal_device_property_set_bool (parent, "block.is_volume", FALSE); hal_device_property_set_string (parent, "solaris.devfs_path", maindev_path); devinfo_add_enqueue (parent, maindev_path, &devinfo_storage_handler); } - /* add virtual dos volumes to enable pcfs probing */ - if (!is_cdrom) { - doslink_len = strlen (maindev->devlink) + sizeof (":NNN") + 1; - if ((doslink = (char *)calloc (1, doslink_len)) != NULL) { - for (i = 1; i < 16; i++) { - snprintf(dospath, sizeof (dospath), "%s:%d", maindev->slice, i); - snprintf(doslink, doslink_len, "%s:%d", maindev->devlink, i); - m = devinfo_storage_new_minor(maindev_path, dospath, doslink, maindev->dev, i); - g_queue_push_tail (mq, m); - } - free (doslink); - } - } - maindev_is_d0 = (strcmp (maindev->slice, "d0") == 0); /* enqueue all volumes */ while (!g_queue_is_empty (mq)) { m = g_queue_pop_head (mq); --- 903,912 ----
*** 1075,1085 **** } whole_disk = hal_device_has_capability (storage_d, "storage.cdrom") ? "s2" : WHOLE_DISK; ! if (is_dos_path(block_device, &dos_num)) { /* don't probe more dos volumes than probe-storage found */ if ((hal_device_property_get_bool (storage_d, "storage.no_partitions_hint") || (dos_num > hal_device_property_get_int (storage_d, "storage.solaris.num_dos_partitions")))) { HAL_INFO (("%d > %d %s", dos_num, hal_device_property_get_int (storage_d, "storage.solaris.num_dos_partitions"), hal_device_get_udi (storage_d))); --- 1053,1063 ---- } whole_disk = hal_device_has_capability (storage_d, "storage.cdrom") ? "s2" : WHOLE_DISK; ! if (is_dos_slice(slice, &dos_num)) { /* don't probe more dos volumes than probe-storage found */ if ((hal_device_property_get_bool (storage_d, "storage.no_partitions_hint") || (dos_num > hal_device_property_get_int (storage_d, "storage.solaris.num_dos_partitions")))) { HAL_INFO (("%d > %d %s", dos_num, hal_device_property_get_int (storage_d, "storage.solaris.num_dos_partitions"), hal_device_get_udi (storage_d)));
*** 1396,1431 **** } else { return (""); } } ! static gboolean ! is_dos_path(char *path, int *partnum) { char *p; ! if ((p = strrchr (path, ':')) == NULL) { ! return (FALSE); } - return ((*partnum = atoi(p + 1)) != 0); - } - - static gboolean - dos_to_dev(char *path, char **devpath, int *partnum) - { - char *p; ! if ((p = strrchr (path, ':')) == NULL) { ! return (FALSE); ! } ! if ((*partnum = atoi(p + 1)) == 0) { ! return (FALSE); ! } ! p[0] = '\0'; ! *devpath = strdup(path); ! p[0] = ':'; ! return (*devpath != NULL); } static void devinfo_storage_cleanup_mountpoint_cb (HalDevice *d, guint32 exit_type, gint return_code, gchar **error, --- 1374,1394 ---- } else { return (""); } } ! static boolean_t ! is_dos_slice(const char *slice, int *partnum) { char *p; ! if ((p = strrchr(slice, 'p')) == NULL && ! (p = strrchr(slice, ':')) == NULL) { ! return (B_FALSE); } ! return ((*partnum = atoi(p + 1)) != 0); } static void devinfo_storage_cleanup_mountpoint_cb (HalDevice *d, guint32 exit_type, gint return_code, gchar **error,