systemd/1008-udev-path_id-handle-Hyper-V-devices.patch
Stephan Kulow 48af67da26 Accepting request 147673 from Base:System
- udev: path_id - handle Hyper-V devices
  add: 1008-udev-path_id-handle-Hyper-V-devices.patch
- keymap: Update the list of Samsung Series 9 models
  add: 1009-keymap-Update-the-list-of-Samsung-Series-9-models.patch
- keymap: Add Samsung 700T
  add: 1010-keymap-Add-Samsung-700T.patch
- libudev: avoid leak during realloc failure
  add: 1011-libudev-avoid-leak-during-realloc-failure.patch
- libudev: do not resolve $attr{device} symlinks
  add: 1012-libudev-do-not-resolve-attr-device-symlinks.patch
- libudev: validate 'udev' argument to udev_enumerate_new()
  add: 1013-libudev-validate-udev-argument-to-udev_enumerate_new.patch
- udev: fix whitespace
  add: 1014-udev-fix-whitespace.patch
- udev: properly handle symlink removal by 'change' event
  add: 1015-udev-properly-handle-symlink-removal-by-change-event.patch
- udev: builtin - do not fail builtin initialization if one of 
  them returns an error
  add: 1016-udev-builtin-do-not-fail-builtin-initialization-if-o.patch
- udev: use usec_t and now()
  add: 1017-udev-use-usec_t-and-now.patch 

  closing an non-existent dbus connection and getting assertion 
  failures. 
- udev: path_id - handle Hyper-V devices
  add: 1008-udev-path_id-handle-Hyper-V-devices.patch
- keymap: Update the list of Samsung Series 9 models
  add: 1009-keymap-Update-the-list-of-Samsung-Series-9-models.patch
- keymap: Add Samsung 700T
  add: 1010-keymap-Add-Samsung-700T.patch

OBS-URL: https://build.opensuse.org/request/show/147673
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/systemd?expand=0&rev=120
2013-01-10 14:20:01 +00:00

73 lines
2.3 KiB
Diff

From a24d03b8ee2ca62cd1273e27cf4e79ddcc0fbb1c Mon Sep 17 00:00:00 2001
From: Hannes Reinecke <hare@suse.de>
Date: Fri, 23 Nov 2012 14:12:39 +0100
Subject: [PATCH] udev: path_id - handle Hyper-V devices
Hyper-V has an abstract bus, which gets renumbered on guest
startup. So instead of the bus numbers we should be using
the device GUIDs, which can be retrieved from the 'device_id'
sysfs attribute.
---
src/udev/udev-builtin-path_id.c | 41 +++++++++++++++++++++++++++++++++++++++
1 files changed, 41 insertions(+), 0 deletions(-)
Index: systemd-195/src/udev/udev-builtin-path_id.c
===================================================================
--- systemd-195.orig/src/udev/udev-builtin-path_id.c
+++ systemd-195/src/udev/udev-builtin-path_id.c
@@ -381,6 +381,42 @@ out:
return hostdev;
}
+static struct udev_device *handle_scsi_hyperv(struct udev_device *parent, char **path) {
+ struct udev_device *hostdev;
+ struct udev_device *vmbusdev;
+ const char *guid_str;
+ char *lun = NULL;
+ char guid[38];
+ size_t i, k;
+
+ hostdev = udev_device_get_parent_with_subsystem_devtype(parent, "scsi", "scsi_host");
+ if (!hostdev)
+ return NULL;
+
+ vmbusdev = udev_device_get_parent(hostdev);
+ if (!vmbusdev)
+ return NULL;
+
+ guid_str = udev_device_get_sysattr_value(vmbusdev, "device_id");
+ if (!guid_str)
+ return NULL;
+
+ if (strlen(guid_str) < 37 || guid_str[0] != '{' || guid_str[36] != '}')
+ return NULL;
+
+ for (i = 1, k = 0; i < 36; i++) {
+ if (guid_str[i] == '-')
+ continue;
+ guid[k++] = guid_str[i];
+ }
+ guid[k] = '\0';
+
+ format_lun_number(parent, &lun);
+ path_prepend(path, "vmbus-%s-%s", guid, lun);
+ free(lun);
+ return parent;
+}
+
static struct udev_device *handle_scsi(struct udev_device *parent, char **path)
{
const char *devtype;
@@ -422,6 +458,11 @@ static struct udev_device *handle_scsi(s
goto out;
}
+ if (strstr(name, "/vmbus_") != NULL) {
+ parent = handle_scsi_hyperv(parent, path);
+ goto out;
+ }
+
parent = handle_scsi_default(parent, path);
out:
return parent;