rpms/udev/devel 0008-libudev-export-udev_monitor_set_receive_buffer_size.patch, NONE, 1.1 0009-udevadm-monitor-increase-netlink-buffer-size.patch, NONE, 1.1 0010-libudev-bump-minor-version.patch, NONE, 1.1 0011-udevadm-fix-untested-and-broken-commit-to-set-buffer.patch, NONE, 1.1 0012-configure.ac-version-bump.patch, NONE, 1.1 0020-udev-acl-no-not-encourage-use-of-ACL_MANAGE-outside-.patch, NONE, 1.1 0023-libbudev-private-rename-udev_list_entry_get_flag.patch, NONE, 1.1 0024-udevadm-monitor-use-as-separator-in-subsystem-match-.patch, NONE, 1.1 0025-use-major-minor-as-entries-in-symlink-stack-instead-.patch, NONE, 1.1 0026-use-major-minor-as-entries-in-watch-directory.patch, NONE, 1.1 0028-udev-needs-automake-1.10.patch, NONE, 1.1 0033-libudev-add-udev_device_new_from_environment.patch, NONE, 1.1 0037-rules-virtio-fix-is-to-check-if-the-name-attribute-i.patch, NONE, 1.1 0038-keymap-Add-Acer-TravelMate-6593G-and-Acer-Aspire-164.patch, NONE, 1.1 0039-keymap-Fix-another-key-for-Acer-TravelMate-6593.patch, NONE, 1.1 0040-libudev-update-documentation.patch, NONE, 1.1 0041-Fix-Keymapping-for-upcoming-Dell-Laptops.patch, NONE, 1.1 0042-Add-new-Dell-touchpad-keycode.patch, NONE, 1.1 0043-Revert-special-casing-0xD8-to-latitude-XT-only.patch, NONE, 1.1 0044-Fix-Dell-Studio-1558-volume-keys-not-releasing.patch, NONE, 1.1 0045-Add-support-for-another-Dell-touchpad-toggle-key.patch, NONE, 1.1 0047-scsi_id-add-rand-in-retry-loop.patch, NONE, 1.1 0048-cdrom_id-remove-debugging-code.patch, NONE, 1.1 0049-cdrom_id-retry-to-open-the-device-if-EBUSY.patch, NONE, 1.1 0050-cdrom_id-check-mount-state-in-retry-loop.patch, NONE, 1.1 0051-cdrom_id-always-set-ID_CDROM-regardless-if-we-can-ru.patch, NONE, 1.1 0052-rules-delete-outdated-packagees-rules.patch, NONE, 1.1 0053-rules-we-do-not-have-static-devices-which-are-rename.patch, NONE, 1.1 0054-unify-cleanup-event-handling.patch, NONE, 1.1 0055-allow-IMPORT-db-KEY.patch, NONE, 1.1 0056-usb-db-remove-double.patch, NONE, 1.1 0057-replace-add-change-with-remove.patch, NONE, 1.1 0058-update-NEWS.patch, NONE, 1.1 0059-log-info-only-if-we-actually-delete-the-node.patch, NONE, 1.1 0060-udevadm-trigger-switch-default-action-from-add-to-ch.patch, NONE, 1.1 0061-remove-all_partitions-option.patch, NONE, 1.1 0062-cdrom_id-Fix-uninitialized-variables.patch, NONE, 1.1 0063-rules-call-modprobe-on-all-events-but-remove.patch, NONE, 1.1 0064-remove-ignore_remove-option.patch, NONE, 1.1 0065-cdrom_id-Fix-uninitialized-buffers.patch, NONE, 1.1 0001-firmware-fix-error-reporting-on-missing-firmware-fil.patch, 1.1, 1.2 0002-keymap-Add-Dell-Inspiron-1011-Mini-10.patch, 1.1, 1.2 0003-Fix-brightness-keys-on-MSI-Wind-U-100.patch, 1.1, 1.2 0004-keymap-Add-support-for-Gateway-AOA110-AOA150-clones.patch, 1.1, 1.2 0005-keymap-Fix-LG-X110.patch, 1.1, 1.2 0006-Force-key-release-for-volume-keys-on-Dell-Studio-155.patch, 1.1, 1.2 0007-keymap-Add-Toshiba-Satellite-M30X.patch, 1.1, 1.2 0013-keymap-Add-Samsung-Q210-P210-force-release-quirk.patch, 1.1, 1.2 0014-keymap-Add-Fujitsu-Amilo-1848-u-force-release-quirk.patch, 1.1, 1.2 0015-Decrease-buffer-size-when-advancing-past-NUL-byte.patch, 1.1, 1.2 0016-Use-UTIL_LINE_SIZE-not-UTIL_PATH_SIZE-to-truncate-pr.patch, 1.1, 1.2 0017-Increase-UTIL_LINE_SIZE-from-2048-to-16384.patch, 1.1, 1.2 0018-Fix-virtio-ports-rule-to-use-attr-instead-of-ATTR.patch, 1.1, 1.2 0019-udev-acl-Correctly-handle-ENV-ACL_MANAGE-0.patch, 1.1, 1.2 0021-input_id-Fix-linking.patch, 1.1, 1.2 0022-replace-utimes-with-utimensat.patch, 1.1, 1.2 0029-firmware-fix-possible-segfault-when-firmware-device-.patch, 1.1, 1.2 0030-rules-input-create-by-path-links-for-pci-devices.patch, 1.1, 1.2 0031-Fix-switching-Logitech-bluetooth-adapters-into-hci-m.patch, 1.1, 1.2 0032-do-not-reset-SELinux-context-when-the-node-was-not-t.patch, 1.1, 1.2 0034-add-LGPL-COPYING-to-libudev-and-GUdev.patch, 1.1, 1.2 0035-cdrom_id-open-non-mounted-optical-media-with-O_EXCL.patch, 1.1, 1.2 0036-modeswitch-morph-into-tool-that-only-switches-Mobile.patch, 1.1, 1.2 udev.spec, 1.307, 1.308

Harald Hoyer harald at fedoraproject.org
Tue Apr 13 15:09:41 UTC 2010


Author: harald

Update of /cvs/pkgs/rpms/udev/devel
In directory cvs01.phx2.fedoraproject.org:/tmp/cvs-serv6812

Modified Files:
	0001-firmware-fix-error-reporting-on-missing-firmware-fil.patch 
	0002-keymap-Add-Dell-Inspiron-1011-Mini-10.patch 
	0003-Fix-brightness-keys-on-MSI-Wind-U-100.patch 
	0004-keymap-Add-support-for-Gateway-AOA110-AOA150-clones.patch 
	0005-keymap-Fix-LG-X110.patch 
	0006-Force-key-release-for-volume-keys-on-Dell-Studio-155.patch 
	0007-keymap-Add-Toshiba-Satellite-M30X.patch 
	0013-keymap-Add-Samsung-Q210-P210-force-release-quirk.patch 
	0014-keymap-Add-Fujitsu-Amilo-1848-u-force-release-quirk.patch 
	0015-Decrease-buffer-size-when-advancing-past-NUL-byte.patch 
	0016-Use-UTIL_LINE_SIZE-not-UTIL_PATH_SIZE-to-truncate-pr.patch 
	0017-Increase-UTIL_LINE_SIZE-from-2048-to-16384.patch 
	0018-Fix-virtio-ports-rule-to-use-attr-instead-of-ATTR.patch 
	0019-udev-acl-Correctly-handle-ENV-ACL_MANAGE-0.patch 
	0021-input_id-Fix-linking.patch 
	0022-replace-utimes-with-utimensat.patch 
	0029-firmware-fix-possible-segfault-when-firmware-device-.patch 
	0030-rules-input-create-by-path-links-for-pci-devices.patch 
	0031-Fix-switching-Logitech-bluetooth-adapters-into-hci-m.patch 
	0032-do-not-reset-SELinux-context-when-the-node-was-not-t.patch 
	0034-add-LGPL-COPYING-to-libudev-and-GUdev.patch 
	0035-cdrom_id-open-non-mounted-optical-media-with-O_EXCL.patch 
	0036-modeswitch-morph-into-tool-that-only-switches-Mobile.patch 
	udev.spec 
Added Files:
	0008-libudev-export-udev_monitor_set_receive_buffer_size.patch 
	0009-udevadm-monitor-increase-netlink-buffer-size.patch 
	0010-libudev-bump-minor-version.patch 
	0011-udevadm-fix-untested-and-broken-commit-to-set-buffer.patch 
	0012-configure.ac-version-bump.patch 
	0020-udev-acl-no-not-encourage-use-of-ACL_MANAGE-outside-.patch 
	0023-libbudev-private-rename-udev_list_entry_get_flag.patch 
	0024-udevadm-monitor-use-as-separator-in-subsystem-match-.patch 
	0025-use-major-minor-as-entries-in-symlink-stack-instead-.patch 
	0026-use-major-minor-as-entries-in-watch-directory.patch 
	0028-udev-needs-automake-1.10.patch 
	0033-libudev-add-udev_device_new_from_environment.patch 
	0037-rules-virtio-fix-is-to-check-if-the-name-attribute-i.patch 
	0038-keymap-Add-Acer-TravelMate-6593G-and-Acer-Aspire-164.patch 
	0039-keymap-Fix-another-key-for-Acer-TravelMate-6593.patch 
	0040-libudev-update-documentation.patch 
	0041-Fix-Keymapping-for-upcoming-Dell-Laptops.patch 
	0042-Add-new-Dell-touchpad-keycode.patch 
	0043-Revert-special-casing-0xD8-to-latitude-XT-only.patch 
	0044-Fix-Dell-Studio-1558-volume-keys-not-releasing.patch 
	0045-Add-support-for-another-Dell-touchpad-toggle-key.patch 
	0047-scsi_id-add-rand-in-retry-loop.patch 
	0048-cdrom_id-remove-debugging-code.patch 
	0049-cdrom_id-retry-to-open-the-device-if-EBUSY.patch 
	0050-cdrom_id-check-mount-state-in-retry-loop.patch 
	0051-cdrom_id-always-set-ID_CDROM-regardless-if-we-can-ru.patch 
	0052-rules-delete-outdated-packagees-rules.patch 
	0053-rules-we-do-not-have-static-devices-which-are-rename.patch 
	0054-unify-cleanup-event-handling.patch 
	0055-allow-IMPORT-db-KEY.patch 0056-usb-db-remove-double.patch 
	0057-replace-add-change-with-remove.patch 
	0058-update-NEWS.patch 
	0059-log-info-only-if-we-actually-delete-the-node.patch 
	0060-udevadm-trigger-switch-default-action-from-add-to-ch.patch 
	0061-remove-all_partitions-option.patch 
	0062-cdrom_id-Fix-uninitialized-variables.patch 
	0063-rules-call-modprobe-on-all-events-but-remove.patch 
	0064-remove-ignore_remove-option.patch 
	0065-cdrom_id-Fix-uninitialized-buffers.patch 
Log Message:
* Tue Apr 13 2010 Harald Hoyer <harald at redhat.com> 152-0.1.20100413git
- pre release of version 152


0008-libudev-export-udev_monitor_set_receive_buffer_size.patch:
 exported_symbols  |    1 +
 libudev-private.h |    1 -
 libudev.h         |    2 +-
 3 files changed, 2 insertions(+), 2 deletions(-)

--- NEW FILE 0008-libudev-export-udev_monitor_set_receive_buffer_size.patch ---
>From a571c23e954cb88cdd5faa28593b19bd7c340130 Mon Sep 17 00:00:00 2001
From: Scott James Remnant <scott at ubuntu.com>
Date: Wed, 17 Feb 2010 15:26:00 +0000
Subject: [PATCH 08/65] libudev: export udev_monitor_set_receive_buffer_size()

This function is useful for anything that's likely to be running
alongside udevd during cold-plugging, and is using libudev to
receive the events.

It makes little sense for it to be private, or to require other
software to relearn how to adjust the buffer size.

Signed-off-by: Scott James Remnant <scott at ubuntu.com>
---
 libudev/exported_symbols  |    1 +
 libudev/libudev-private.h |    1 -
 libudev/libudev.h         |    1 +
 3 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/libudev/exported_symbols b/libudev/exported_symbols
index 018463d..f48025a 100644
--- a/libudev/exported_symbols
+++ b/libudev/exported_symbols
@@ -51,6 +51,7 @@ udev_enumerate_scan_subsystems
 udev_enumerate_add_syspath
 udev_monitor_new_from_socket
 udev_monitor_new_from_netlink
+udev_monitor_set_receive_buffer_size
 udev_monitor_enable_receiving
 udev_monitor_ref
 udev_monitor_unref
diff --git a/libudev/libudev-private.h b/libudev/libudev-private.h
index c2fff00..0d28b80 100644
--- a/libudev/libudev-private.h
+++ b/libudev/libudev-private.h
@@ -109,7 +109,6 @@ int udev_monitor_disconnect(struct udev_monitor *udev_monitor);
 int udev_monitor_allow_unicast_sender(struct udev_monitor *udev_monitor, struct udev_monitor *sender);
 int udev_monitor_send_device(struct udev_monitor *udev_monitor,
 			     struct udev_monitor *destination, struct udev_device *udev_device);
-int udev_monitor_set_receive_buffer_size(struct udev_monitor *udev_monitor, int size);
 
 /* libudev-ctrl.c - daemon runtime setup */
 struct udev_ctrl;
diff --git a/libudev/libudev.h b/libudev/libudev.h
index ad11059..9576ad4 100644
--- a/libudev/libudev.h
+++ b/libudev/libudev.h
@@ -111,6 +111,7 @@ struct udev_monitor *udev_monitor_new_from_netlink(struct udev *udev, const char
 struct udev_monitor *udev_monitor_new_from_socket(struct udev *udev, const char *socket_path);
 /* bind socket */
 int udev_monitor_enable_receiving(struct udev_monitor *udev_monitor);
+int udev_monitor_set_receive_buffer_size(struct udev_monitor *udev_monitor, int size);
 int udev_monitor_get_fd(struct udev_monitor *udev_monitor);
 struct udev_device *udev_monitor_receive_device(struct udev_monitor *udev_monitor);
 /* in-kernel socket filters to select messages that get delivered to a listener */
-- 
1.6.6


0009-udevadm-monitor-increase-netlink-buffer-size.patch:
 udevadm-monitor.c |    3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

--- NEW FILE 0009-udevadm-monitor-increase-netlink-buffer-size.patch ---
>From 0fe3c26eab97c4ee381918e6925a6cd798be5f39 Mon Sep 17 00:00:00 2001
From: Scott James Remnant <scott at ubuntu.com>
Date: Wed, 17 Feb 2010 15:27:36 +0000
Subject: [PATCH 09/65] udevadm monitor: increase netlink buffer size

A common use (e.g. in Ubuntu) for udevadm monitor is to log the events
received by udev during boot; events can be lost of the buffer size isn't
increased as udevd does.

Signed-off-by: Scott James Remnant <scott at ubuntu.com>
---
 udev/udevadm-monitor.c |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/udev/udevadm-monitor.c b/udev/udevadm-monitor.c
index 00b130d..ea4b7dc 100644
--- a/udev/udevadm-monitor.c
+++ b/udev/udevadm-monitor.c
@@ -158,6 +158,7 @@ int udevadm_monitor(struct udev *udev, int argc, char *argv[])
 			rc = 1;
 			goto out;
 		}
+		udev_monitor_set_receive_buffer_size(udev_monitor, 128*1024*1024);
 
 		udev_list_entry_foreach(entry, udev_list_get_entry(&subsystem_match_list)) {
 			const char *subsys = udev_list_entry_get_name(entry);
@@ -183,6 +184,7 @@ int udevadm_monitor(struct udev *udev, int argc, char *argv[])
 			rc = 3;
 			goto out;
 		}
+		udev_monitor_set_receive_buffer_size(udev, 128*1024*1024);
 
 		udev_list_entry_foreach(entry, udev_list_get_entry(&subsystem_match_list)) {
 			const char *subsys = udev_list_entry_get_name(entry);
-- 
1.6.6


0010-libudev-bump-minor-version.patch:
 Makefile.am |    7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

--- NEW FILE 0010-libudev-bump-minor-version.patch ---
>From e0fcf21c030027101338c7673c5cb814b82261d1 Mon Sep 17 00:00:00 2001
From: Kay Sievers <kay.sievers at vrfy.org>
Date: Thu, 18 Feb 2010 11:03:09 +0100
Subject: [PATCH 10/65] libudev: bump minor version

---
 Makefile.am |    6 +++---
 1 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/Makefile.am b/Makefile.am
index db23f16..3780f50 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -28,9 +28,9 @@ CLEANFILES =
 # ------------------------------------------------------------------------------
 # libudev
 # ------------------------------------------------------------------------------
-LIBUDEV_CURRENT=6
-LIBUDEV_REVISION=1
-LIBUDEV_AGE=6
+LIBUDEV_CURRENT=7
+LIBUDEV_REVISION=0
+LIBUDEV_AGE=7
 
 SUBDIRS += libudev/docs
 
-- 
1.6.6


0011-udevadm-fix-untested-and-broken-commit-to-set-buffer.patch:
 udevadm-monitor.c |    3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

--- NEW FILE 0011-udevadm-fix-untested-and-broken-commit-to-set-buffer.patch ---
>From 044bd2bcc7a160c97f7dd052d6de50d35186df13 Mon Sep 17 00:00:00 2001
From: Kay Sievers <kay.sievers at vrfy.org>
Date: Thu, 18 Feb 2010 11:03:28 +0100
Subject: [PATCH 11/65] udevadm: fix untested and broken commit to set buffer size

---
 udev/udevadm-monitor.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/udev/udevadm-monitor.c b/udev/udevadm-monitor.c
index ea4b7dc..4063c48 100644
--- a/udev/udevadm-monitor.c
+++ b/udev/udevadm-monitor.c
@@ -184,7 +184,7 @@ int udevadm_monitor(struct udev *udev, int argc, char *argv[])
 			rc = 3;
 			goto out;
 		}
-		udev_monitor_set_receive_buffer_size(udev, 128*1024*1024);
+		udev_monitor_set_receive_buffer_size(kernel_monitor, 128*1024*1024);
 
 		udev_list_entry_foreach(entry, udev_list_get_entry(&subsystem_match_list)) {
 			const char *subsys = udev_list_entry_get_name(entry);
-- 
1.6.6


0012-configure.ac-version-bump.patch:
 NEWS         |    6 ++++++
 configure.ac |    3 +--
 2 files changed, 7 insertions(+), 2 deletions(-)

--- NEW FILE 0012-configure.ac-version-bump.patch ---
>From fff82e9d77415111193d9547bbe3618892147b39 Mon Sep 17 00:00:00 2001
From: Kay Sievers <kay.sievers at vrfy.org>
Date: Thu, 18 Feb 2010 11:09:25 +0100
Subject: [PATCH 12/65] configure.ac: version bump

---
 NEWS         |    6 ++++++
 configure.ac |    2 +-
 2 files changed, 7 insertions(+), 1 deletions(-)

diff --git a/NEWS b/NEWS
index 5b23a8b..a4d46d7 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,9 @@
+udev 152
+========
+Bugfixes.
+
+New and fixed keymaps.
+
 udev 151
 ========
 Bugfixes.
diff --git a/configure.ac b/configure.ac
index 4cecb86..88824b6 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,4 +1,4 @@
-AC_INIT([udev], [151], [linux-hotplug at vger.kernel.org])
+AC_INIT([udev], [152], [linux-hotplug at vger.kernel.org])
 AC_PREREQ(2.60)
 AM_INIT_AUTOMAKE([check-news foreign 1.9 dist-bzip2 subdir-objects])
 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
-- 
1.6.6


0020-udev-acl-no-not-encourage-use-of-ACL_MANAGE-outside-.patch:
 70-acl.rules |    5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

--- NEW FILE 0020-udev-acl-no-not-encourage-use-of-ACL_MANAGE-outside-.patch ---
>From 9a87132677191e49c3d464c91aac7fc218e1eb18 Mon Sep 17 00:00:00 2001
From: Kay Sievers <kay.sievers at vrfy.org>
Date: Sun, 7 Mar 2010 13:47:34 +0100
Subject: [PATCH 20/65] udev-acl: no not encourage use of ACL_MANAGE outside of rules file

---
 extras/udev-acl/70-acl.rules |    4 +++-
 1 files changed, 3 insertions(+), 1 deletions(-)

diff --git a/extras/udev-acl/70-acl.rules b/extras/udev-acl/70-acl.rules
index 874667c..fde2656 100644
--- a/extras/udev-acl/70-acl.rules
+++ b/extras/udev-acl/70-acl.rules
@@ -1,7 +1,9 @@
 # do not edit this file, it will be overwritten on update
 
+# Do not use ACL_MANAGE outside of this file. This variable is private to
+# udev-acl of this udev release and may be replaced at any time.
+
 ENV{MAJOR}=="", GOTO="acl_end"
-ENV{ACL_MANAGE}=="0", GOTO="acl_end"
 ACTION!="add|change", GOTO="acl_apply"
 
 # PTP/MTP protocol devices, cameras, portable media players
-- 
1.6.6


0023-libbudev-private-rename-udev_list_entry_get_flag.patch:
 libudev/libudev-device-private.c |    4 ++--
 libudev/libudev-device.c         |    4 ++--
 libudev/libudev-list.c           |   10 +++++-----
 libudev/libudev-private.h        |    9 ++++++---
 udev/udev-event.c                |    2 +-
 udev/udev-node.c                 |    2 +-
 udev/udev-rules.c                |   13 ++++++-------
 7 files changed, 23 insertions(+), 21 deletions(-)

--- NEW FILE 0023-libbudev-private-rename-udev_list_entry_get_flag.patch ---
>From fbb31cd6e10fe66d2da781db0ba9a8d671a4c6aa Mon Sep 17 00:00:00 2001
From: Kay Sievers <kay.sievers at vrfy.org>
Date: Wed, 10 Mar 2010 14:52:42 +0100
Subject: [PATCH 23/65] libbudev-private: rename udev_list_entry_get_flag()

---
 libudev/libudev-device-private.c |    4 ++--
 libudev/libudev-device.c         |    4 ++--
 libudev/libudev-list.c           |   10 +++++-----
 libudev/libudev-private.h        |    9 ++++++---
 udev/udev-event.c                |    2 +-
 udev/udev-node.c                 |    2 +-
 udev/udev-rules.c                |   12 ++++++------
 7 files changed, 23 insertions(+), 20 deletions(-)

diff --git a/libudev/libudev-device-private.c b/libudev/libudev-device-private.c
index 07249c3..1bcf441 100644
--- a/libudev/libudev-device-private.c
+++ b/libudev/libudev-device-private.c
@@ -39,7 +39,7 @@ int udev_device_update_db(struct udev_device *udev_device)
 	util_strscpyl(filename_tmp, sizeof(filename_tmp), filename, ".tmp", NULL);
 
 	udev_list_entry_foreach(list_entry, udev_device_get_properties_list_entry(udev_device))
-		if (udev_list_entry_get_flag(list_entry))
+		if (udev_list_entry_get_flags(list_entry))
 			goto file;
 	if (udev_device_get_num_fake_partitions(udev_device) != 0)
 		goto file;
@@ -102,7 +102,7 @@ file:
 	if (udev_device_get_watch_handle(udev_device) >= 0)
 		fprintf(f, "W:%i\n", udev_device_get_watch_handle(udev_device));
 	udev_list_entry_foreach(list_entry, udev_device_get_properties_list_entry(udev_device)) {
-		if (!udev_list_entry_get_flag(list_entry))
+		if (!udev_list_entry_get_flags(list_entry))
 			continue;
 		fprintf(f, "E:%s=%s\n",
 			udev_list_entry_get_name(list_entry),
diff --git a/libudev/libudev-device.c b/libudev/libudev-device.c
index b841745..aec5fb5 100644
--- a/libudev/libudev-device.c
+++ b/libudev/libudev-device.c
@@ -1,7 +1,7 @@
 /*
  * libudev - interface to udev device information
  *
- * Copyright (C) 2008-2009 Kay Sievers <kay.sievers at vrfy.org>
+ * Copyright (C) 2008-2010 Kay Sievers <kay.sievers at vrfy.org>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -1068,7 +1068,7 @@ int udev_device_add_devlink(struct udev_device *udev_device, const char *devlink
 	if (list_entry == NULL)
 		return -ENOMEM;
 	if (unique)
-		udev_list_entry_set_flag(list_entry, 1);
+		udev_list_entry_set_flags(list_entry, 1);
 	return 0;
 }
 
diff --git a/libudev/libudev-list.c b/libudev/libudev-list.c
index f6637fc..b5e9645 100644
--- a/libudev/libudev-list.c
+++ b/libudev/libudev-list.c
@@ -38,7 +38,7 @@ struct udev_list_entry {
 	struct udev_list_node *list;
 	char *name;
 	char *value;
-	int flag;
+	unsigned int flags;
 };
 
 /* list head point to itself if empty */
@@ -258,16 +258,16 @@ const char *udev_list_entry_get_value(struct udev_list_entry *list_entry)
 	return list_entry->value;
 }
 
-int udev_list_entry_get_flag(struct udev_list_entry *list_entry)
+unsigned int udev_list_entry_get_flags(struct udev_list_entry *list_entry)
 {
 	if (list_entry == NULL)
 		return -EINVAL;
-	return list_entry->flag;
+	return list_entry->flags;
 }
 
-void udev_list_entry_set_flag(struct udev_list_entry *list_entry, int flag)
+void udev_list_entry_set_flags(struct udev_list_entry *list_entry, unsigned int flags)
 {
 	if (list_entry == NULL)
 		return;
-	list_entry->flag = flag;
+	list_entry->flags = flags;
 }
diff --git a/libudev/libudev-private.h b/libudev/libudev-private.h
index e0c51dc..5ee0c58 100644
--- a/libudev/libudev-private.h
+++ b/libudev/libudev-private.h
@@ -1,7 +1,7 @@
 /*
  * libudev - interface to udev device information
  *
- * Copyright (C) 2008-2009 Kay Sievers <kay.sievers at vrfy.org>
+ * Copyright (C) 2008-2010 Kay Sievers <kay.sievers at vrfy.org>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -82,6 +82,9 @@ const char *udev_device_get_devpath_old(struct udev_device *udev_device);
 const char *udev_device_get_sysname_old(struct udev_device *udev_device);
 int udev_device_set_devpath_old(struct udev_device *udev_device, const char *devpath_old);
 const char *udev_device_get_knodename(struct udev_device *udev_device);
+int udev_device_add_tag(struct udev_device *udev_device, const char *tag);
+struct udev_list_entry *udev_device_get_tag_list_entry(struct udev_device *udev_device);
+int udev_device_has_tag(struct udev_device *udev_device, const char *tag);
 int udev_device_set_knodename(struct udev_device *udev_device, const char *knodename);
 int udev_device_get_timeout(struct udev_device *udev_device);
 int udev_device_set_timeout(struct udev_device *udev_device, int timeout);
@@ -163,8 +166,8 @@ void udev_list_entry_insert_before(struct udev_list_entry *new, struct udev_list
 void udev_list_entry_append(struct udev_list_entry *new, struct udev_list_node *list);
 void udev_list_cleanup_entries(struct udev *udev, struct udev_list_node *name_list);
 struct udev_list_entry *udev_list_get_entry(struct udev_list_node *list);
-int udev_list_entry_get_flag(struct udev_list_entry *list_entry);
-void udev_list_entry_set_flag(struct udev_list_entry *list_entry, int flag);
+unsigned int udev_list_entry_get_flags(struct udev_list_entry *list_entry);
+void udev_list_entry_set_flags(struct udev_list_entry *list_entry, unsigned int flags);
 #define udev_list_entry_foreach_safe(entry, tmp, first) \
 	for (entry = first, tmp = udev_list_entry_get_next(entry); \
 	     entry != NULL; \
diff --git a/udev/udev-event.c b/udev/udev-event.c
index 4e1773f..986c119 100644
--- a/udev/udev-event.c
+++ b/udev/udev-event.c
@@ -729,7 +729,7 @@ int udev_event_execute_run(struct udev_event *event, const sigset_t *sigmask)
 			udev_event_apply_format(event, cmd, program, sizeof(program));
 			envp = udev_device_get_properties_envp(event->dev);
 			if (util_run_program(event->udev, program, envp, NULL, 0, NULL, sigmask) != 0) {
-				if (udev_list_entry_get_flag(list_entry))
+				if (udev_list_entry_get_flags(list_entry))
 					err = -1;
 			}
 		}
diff --git a/udev/udev-node.c b/udev/udev-node.c
index 307a76b..23bfade 100644
--- a/udev/udev-node.c
+++ b/udev/udev-node.c
@@ -405,7 +405,7 @@ int udev_node_add(struct udev_device *dev, mode_t mode, uid_t uid, gid_t gid)
 
 	/* create/update symlinks, add symlinks to name index */
 	udev_list_entry_foreach(list_entry, udev_device_get_devlinks_list_entry(dev)) {
-		if (udev_list_entry_get_flag(list_entry))
+		if (udev_list_entry_get_flags(list_entry))
 			/* simple unmanaged link name */
 			node_symlink(udev, udev_device_get_devnode(dev), udev_list_entry_get_name(list_entry));
 		else
diff --git a/udev/udev-rules.c b/udev/udev-rules.c
index 3da2033..60daad5 100644
--- a/udev/udev-rules.c
+++ b/udev/udev-rules.c
@@ -717,7 +717,7 @@ static int import_property_from_string(struct udev_device *dev, char *line)
 		entry = udev_device_add_property(dev, key, val);
 		/* store in db, skip private keys */
 		if (key[0] != '.')
-			udev_list_entry_set_flag(entry, 1);
+			udev_list_entry_set_flags(entry, 1);
 	}
 	return 0;
 }
@@ -785,7 +785,7 @@ static int import_parent_into_properties(struct udev_device *dev, const char *fi
 			entry = udev_device_add_property(dev, key, val);
 			/* store in db, skip private keys */
 			if (key[0] != '.')
-				udev_list_entry_set_flag(entry, 1);
+				udev_list_entry_set_flags(entry, 1);
 		}
 	}
 	return 0;
@@ -1831,13 +1831,13 @@ struct udev_rules *udev_rules_new(struct udev *udev, int resolve_names)
 		filename_off = add_string(rules, filename);
 		/* the offset in the rule is limited to unsigned short */
 		if (filename_off < USHRT_MAX)
-			udev_list_entry_set_flag(file_loop, filename_off);
+			udev_list_entry_set_flags(file_loop, filename_off);
 	}
 
 	/* parse list of files */
 	udev_list_entry_foreach_safe(file_loop, file_tmp, udev_list_get_entry(&file_list)) {
 		const char *filename = udev_list_entry_get_name(file_loop);
-		unsigned int filename_off = udev_list_entry_get_flag(file_loop);
+		unsigned int filename_off = udev_list_entry_get_flags(file_loop);
 
 		if (stat(filename, &statbuf) == 0 && statbuf.st_size > 0)
 			parse_file(rules, filename, filename_off);
@@ -2420,7 +2420,7 @@ int udev_rules_apply_to_event(struct udev_rules *rules, struct udev_event *event
 					entry = udev_device_add_property(event->dev, name, temp_value);
 					/* store in db, skip private keys */
 					if (name[0] != '.')
-						udev_list_entry_set_flag(entry, 1);
+						udev_list_entry_set_flags(entry, 1);
 				} else {
 					udev_device_add_property(event->dev, name, NULL);
 				}
@@ -2542,7 +2542,7 @@ int udev_rules_apply_to_event(struct udev_rules *rules, struct udev_event *event
 				list_entry = udev_list_entry_add(event->udev, &event->run_list,
 								 &rules->buf[cur->key.value_off], NULL, 1, 0);
 				if (cur->key.fail_on_error)
-					udev_list_entry_set_flag(list_entry, 1);
+					udev_list_entry_set_flags(list_entry, 1);
 				break;
 			}
 		case TK_A_GOTO:
-- 
1.6.6


0024-udevadm-monitor-use-as-separator-in-subsystem-match-.patch:
 udevadm-monitor.c |   12 ++++++------
 udevadm.xml       |    7 ++++++-
 2 files changed, 12 insertions(+), 7 deletions(-)

--- NEW FILE 0024-udevadm-monitor-use-as-separator-in-subsystem-match-.patch ---
>From a00ff5db021b50864ba50cce15865bca2d52f91f Mon Sep 17 00:00:00 2001
From: Kay Sievers <kay.sievers at vrfy.org>
Date: Wed, 10 Mar 2010 15:00:00 +0100
Subject: [PATCH 24/65] udevadm: monitor - use / as separator in --subsystem-match=subsystem[/devtype]

---
 udev/udevadm-monitor.c |   12 ++++++------
 udev/udevadm.xml       |    6 ++++++
 2 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/udev/udevadm-monitor.c b/udev/udevadm-monitor.c
index 4063c48..d136c60 100644
--- a/udev/udevadm-monitor.c
+++ b/udev/udevadm-monitor.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2004-2009 Kay Sievers <kay.sievers at vrfy.org>
+ * Copyright (C) 2004-2010 Kay Sievers <kay.sievers at vrfy.org>
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -111,7 +111,7 @@ int udevadm_monitor(struct udev *udev, int argc, char *argv[])
 				char *devtype;
 
 				util_strscpy(subsys, sizeof(subsys), optarg);
-				devtype = strchr(subsys, ':');
+				devtype = strchr(subsys, '/');
 				if (devtype != NULL) {
 					devtype[0] = '\0';
 					devtype++;
@@ -121,10 +121,10 @@ int udevadm_monitor(struct udev *udev, int argc, char *argv[])
 			}
 		case 'h':
 			printf("Usage: udevadm monitor [--property] [--kernel] [--udev] [--help]\n"
-			       "  --property                    print the event properties\n"
-			       "  --kernel                      print kernel uevents\n"
-			       "  --udev                        print udev events\n"
-			       "  --subsystem-match=<subsystem> filter events\n"
+			       "  --property                              print the event properties\n"
+			       "  --kernel                                print kernel uevents\n"
+			       "  --udev                                  print udev events\n"
+			       "  --subsystem-match=<subsystem[/devtype]> filter events by subsystem\n"
 			       "  --help\n\n");
 		default:
 			goto out;
diff --git a/udev/udevadm.xml b/udev/udevadm.xml
index ad49249..fa1742b 100644
--- a/udev/udevadm.xml
+++ b/udev/udevadm.xml
@@ -350,6 +350,12 @@
               </listitem>
             </varlistentry>
             <varlistentry>
+              <term><option>--subsystem-match=<replaceable>string[/string]</replaceable></option></term>
+              <listitem>
+                <para>Filter events by subsystem[/devtype]. Only udev events with a matching subsystem value will pass.</para>
+              </listitem>
+            </varlistentry>
+            <varlistentry>
               <term><option>--help</option></term>
               <listitem>
                 <para>Print help text.</para>
-- 
1.6.6


0025-use-major-minor-as-entries-in-symlink-stack-instead-.patch:
 udev-node.c |   31 ++++++++++++++++---------------
 1 file changed, 16 insertions(+), 15 deletions(-)

--- NEW FILE 0025-use-major-minor-as-entries-in-symlink-stack-instead-.patch ---
>From af24bb178eec6adcf4f04d3b183cd50a831c8b7e Mon Sep 17 00:00:00 2001
From: Kay Sievers <kay.sievers at vrfy.org>
Date: Wed, 10 Mar 2010 17:29:27 +0100
Subject: [PATCH 25/65] use major:minor as entries in symlink stack instead of devpath

---
 udev/udev-node.c |   30 ++++++++++++++++--------------
 1 files changed, 16 insertions(+), 14 deletions(-)

diff --git a/udev/udev-node.c b/udev/udev-node.c
index 23bfade..4314cce 100644
--- a/udev/udev-node.c
+++ b/udev/udev-node.c
@@ -245,28 +245,26 @@ static const char *link_find_prioritized(struct udev_device *dev, bool add, cons
 	for (;;) {
 		struct udev_device *dev_db;
 		struct dirent *dent;
-		char devpath[UTIL_PATH_SIZE];
-		char syspath[UTIL_PATH_SIZE];
-		ssize_t len;
+		int maj, min;
+		char type, type2;
+		dev_t devnum;
 
 		dent = readdir(dir);
 		if (dent == NULL || dent->d_name[0] == '\0')
 			break;
 		if (dent->d_name[0] == '.')
 			continue;
-		dbg(udev, "found '%s/%s'\n", stackdir, dent->d_name);
-		len = readlinkat(dirfd(dir), dent->d_name, devpath, sizeof(devpath));
-		if (len <= 0 || len == (ssize_t)sizeof(devpath))
+		if (sscanf(dent->d_name, "%c%i:%i", &type, &maj, &min) != 3)
 			continue;
-		devpath[len] = '\0';
-		util_strscpyl(syspath, sizeof(syspath), udev_get_sys_path(udev), devpath, NULL);
-		info(udev, "found '%s' claiming '%s'\n", syspath, stackdir);
+		info(udev, "found '%c%i:%i' claiming '%s'\n", type, maj, min, stackdir);
+		devnum = makedev(maj, min);
 
 		/* did we find ourself? */
-		if (strcmp(udev_device_get_syspath(dev), syspath) == 0)
+		type2 = strcmp(udev_device_get_subsystem(dev), "block") == 0 ? 'b' : 'c';
+		if (udev_device_get_devnum(dev) == devnum && type == type2)
 			continue;
 
-		dev_db = udev_device_new_from_syspath(udev, syspath);
+		dev_db = udev_device_new_from_devnum(udev, type, devnum);
 		if (dev_db != NULL) {
 			const char *devnode;
 
@@ -276,7 +274,7 @@ static const char *link_find_prioritized(struct udev_device *dev, bool add, cons
 				    udev_device_get_devnode(dev_db), udev_device_get_devlink_priority(dev_db));
 				if (target == NULL || udev_device_get_devlink_priority(dev_db) > priority) {
 					info(udev, "'%s' claims priority %i for '%s'\n",
-					     syspath, udev_device_get_devlink_priority(dev_db), stackdir);
+					     udev_device_get_syspath(dev_db), udev_device_get_devlink_priority(dev_db), stackdir);
 					priority = udev_device_get_devlink_priority(dev_db);
 					util_strscpy(buf, bufsize, devnode);
 					target = buf;
@@ -328,11 +326,15 @@ static void link_update(struct udev_device *dev, const char *slink, bool add)
 
 		dbg(udev, "creating index: '%s'\n", filename);
 		do {
+			int fd;
+
 			err = util_create_path(udev, filename);
 			if (err != 0 && err != -ENOENT)
 				break;
-			err = symlink(udev_device_get_devpath(dev), filename);
-			if (err != 0)
+			fd = open(filename, O_WRONLY|O_CREAT, 0444);
+			if (fd >= 0)
+				close(fd);
+			else
 				err = -errno;
 		} while (err == -ENOENT);
 	}
-- 
1.6.6


0026-use-major-minor-as-entries-in-watch-directory.patch:
 udev-watch.c |   48 +++++++++++++++++++++++++++++-------------------
 1 file changed, 29 insertions(+), 19 deletions(-)

--- NEW FILE 0026-use-major-minor-as-entries-in-watch-directory.patch ---
>From 777239cb211ade308abb0a2b57d055614061f417 Mon Sep 17 00:00:00 2001
From: Kay Sievers <kay.sievers at vrfy.org>
Date: Wed, 10 Mar 2010 18:54:35 +0100
Subject: [PATCH 26/65] use major:minor as entries in watch directory

---
 udev/udev-watch.c |   47 +++++++++++++++++++++++++++++------------------
 1 files changed, 29 insertions(+), 18 deletions(-)

diff --git a/udev/udev-watch.c b/udev/udev-watch.c
index d67083b..7135d9f 100644
--- a/udev/udev-watch.c
+++ b/udev/udev-watch.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2004-2008 Kay Sievers <kay.sievers at vrfy.org>
+ * Copyright (C) 2004-2010 Kay Sievers <kay.sievers at vrfy.org>
  * Copyright (C) 2009 Canonical Ltd.
  * Copyright (C) 2009 Scott James Remnant <scott at netsplit.com>
  *
@@ -72,29 +72,29 @@ void udev_watch_restore(struct udev *udev)
 			size_t l;
 			ssize_t len;
 			struct udev_device *dev;
+			int maj, min;
+			char type;
 
-			if (ent->d_name[0] < '0' || ent->d_name[0] > '9')
+			if (ent->d_name[0] == '.')
 				continue;
 
 			s = device;
 			l = util_strpcpy(&s, sizeof(device), udev_get_sys_path(udev));
 			len = readlinkat(dirfd(dir), ent->d_name, s, l);
-			if (len <= 0 || len >= (ssize_t)l) {
-				unlinkat(dirfd(dir), ent->d_name, 0);
-				continue;
-			}
+			if (len <= 0 || len >= (ssize_t)l)
+				goto unlink;
 			s[len] = '\0';
-			dbg(udev, "old watch to '%s' found\n", device);
-			dev = udev_device_new_from_syspath(udev, device);
-			if (dev == NULL) {
-				unlinkat(dirfd(dir), ent->d_name, 0);
-				continue;
-			}
+
+			if (sscanf(s, "%c%i:%i", &type, &maj, &min) != 3)
+				goto unlink;
+			dev = udev_device_new_from_devnum(udev, type, makedev(maj, min));
+			if (dev == NULL)
+				goto unlink;
 
 			info(udev, "restoring old watch on '%s'\n", udev_device_get_devnode(dev));
 			udev_watch_begin(udev, dev);
-
 			udev_device_unref(dev);
+unlink:
 			unlinkat(dirfd(dir), ent->d_name, 0);
 		}
 
@@ -109,6 +109,7 @@ void udev_watch_restore(struct udev *udev)
 void udev_watch_begin(struct udev *udev, struct udev_device *dev)
 {
 	char filename[UTIL_PATH_SIZE];
+	char majmin[UTIL_PATH_SIZE];
 	int wd;
 
 	if (inotify_fd < 0)
@@ -122,10 +123,13 @@ void udev_watch_begin(struct udev *udev, struct udev_device *dev)
 		return;
 	}
 
+	snprintf(majmin, sizeof(majmin), "%c%i:%i",
+		 strcmp(udev_device_get_subsystem(dev), "block") == 0 ? 'b' : 'c',
+		 major(udev_device_get_devnum(dev)), minor(udev_device_get_devnum(dev)));
 	snprintf(filename, sizeof(filename), "%s/.udev/watch/%d", udev_get_dev_path(udev), wd);
 	util_create_path(udev, filename);
 	unlink(filename);
-	symlink(udev_device_get_devpath(dev), filename);
+	symlink(majmin, filename);
 
 	udev_device_set_watch_handle(dev, wd);
 }
@@ -154,20 +158,27 @@ void udev_watch_end(struct udev *udev, struct udev_device *dev)
 struct udev_device *udev_watch_lookup(struct udev *udev, int wd)
 {
 	char filename[UTIL_PATH_SIZE];
-	char syspath[UTIL_PATH_SIZE];
+	char majmin[UTIL_PATH_SIZE];
 	char *s;
 	size_t l;
 	ssize_t len;
+	int maj, min;
+	char type;
+	dev_t devnum;
 
 	if (inotify_fd < 0 || wd < 0)
 		return NULL;
 
 	snprintf(filename, sizeof(filename), "%s/.udev/watch/%d", udev_get_dev_path(udev), wd);
-	s = syspath;
-	l = util_strpcpy(&s, sizeof(syspath), udev_get_sys_path(udev));
+	s = majmin;
+	l = util_strpcpy(&s, sizeof(majmin), udev_get_sys_path(udev));
 	len = readlink(filename, s, l);
 	if (len < 0 || (size_t)len >= l)
 		return NULL;
 	s[len] = '\0';
-	return udev_device_new_from_syspath(udev, syspath);
+
+	if (sscanf(s, "%c%i:%i", &type, &maj, &min) != 3)
+		return NULL;
+	devnum = makedev(maj, min);
+	return udev_device_new_from_devnum(udev, type, devnum);
 }
-- 
1.6.6


0028-udev-needs-automake-1.10.patch:
 configure.ac |    3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

--- NEW FILE 0028-udev-needs-automake-1.10.patch ---
>From b41102757d9d1f71aa04f3d264d57d573360d957 Mon Sep 17 00:00:00 2001
From: Adrian Bunk <adrian.bunk at movial.com>
Date: Thu, 11 Mar 2010 15:05:42 +0200
Subject: [PATCH 28/65] udev needs automake 1.10

extras/gudev/docs/Makefile.am:4: require Automake 1.10, but have 1.9.6
libudev/docs/Makefile.am:4: require Automake 1.10, but have 1.9.6

Signed-off-by: Martin Pitt <martin.pitt at ubuntu.com>
---
 configure.ac |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/configure.ac b/configure.ac
index 88824b6..d53dd12 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,6 +1,6 @@
 AC_INIT([udev], [152], [linux-hotplug at vger.kernel.org])
 AC_PREREQ(2.60)
-AM_INIT_AUTOMAKE([check-news foreign 1.9 dist-bzip2 subdir-objects])
+AM_INIT_AUTOMAKE([check-news foreign 1.10 dist-bzip2 subdir-objects])
 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
 AC_DISABLE_STATIC
 AC_USE_SYSTEM_EXTENSIONS
-- 
1.6.6


0033-libudev-add-udev_device_new_from_environment.patch:
 extras/usb_id/usb_id.c            |   34 +++---
 libudev/docs/libudev-sections.txt |    1 
 libudev/exported_symbols          |    1 
 libudev/libudev-device.c          |  214 ++++++++++++++++++++++++++++----------
 libudev/libudev-monitor.c         |   66 -----------
 libudev/libudev-private.h         |    3 
 libudev/libudev.h                 |    2 
 7 files changed, 192 insertions(+), 129 deletions(-)

--- NEW FILE 0033-libudev-add-udev_device_new_from_environment.patch ---
>From fc8d61c53d6c181dc1e9f5a23c0f805c32a392af Mon Sep 17 00:00:00 2001
From: Kay Sievers <kay.sievers at vrfy.org>
Date: Wed, 17 Mar 2010 17:42:35 +0100
Subject: [PATCH 33/65] libudev: add udev_device_new_from_environment()

---
 extras/usb_id/usb_id.c            |   34 ++++---
 libudev/docs/libudev-sections.txt |    1 +
 libudev/exported_symbols          |    1 +
 libudev/libudev-device.c          |  214 ++++++++++++++++++++++++++++---------
 libudev/libudev-monitor.c         |   66 +-----------
 libudev/libudev-private.h         |    3 +-
 libudev/libudev.h                 |    1 +
 7 files changed, 192 insertions(+), 128 deletions(-)

diff --git a/extras/usb_id/usb_id.c b/extras/usb_id/usb_id.c
index b412598..42ccddf 100644
--- a/extras/usb_id/usb_id.c
+++ b/extras/usb_id/usb_id.c
@@ -456,8 +456,6 @@ int main(int argc, char **argv)
 	};
 	struct udev *udev;
 	struct udev_device *dev = NULL;
-	char syspath[UTIL_PATH_SIZE];
-	const char *devpath;
 	static int export;
 	int retval = 0;
 
@@ -492,7 +490,7 @@ int main(int argc, char **argv)
 			export = 1;
 			break;
 		case 'h':
-			printf("Usage: usb_id [--usb-info] [--num-info] [--export] [--help] <devpath>\n"
+			printf("Usage: usb_id [--usb-info] [--num-info] [--export] [--help] [<devpath>]\n"
 			       "  --usb-info  use usb strings instead\n"
 			       "  --num-info  use numerical values\n"
 			       "  --export    print values as environment keys\n"
@@ -503,18 +501,26 @@ int main(int argc, char **argv)
 		}
 	}
 
-	devpath = argv[optind];
-	if (devpath == NULL) {
-		fprintf(stderr, "No device specified\n");
-		retval = 1;
-		goto exit;
-	}
-
-	util_strscpyl(syspath, sizeof(syspath), udev_get_sys_path(udev), devpath, NULL);
-	dev = udev_device_new_from_syspath(udev, syspath);
+	dev = udev_device_new_from_environment(udev);
 	if (dev == NULL) {
-		err(udev, "unable to access '%s'\n", devpath);
-		return 1;
+		char syspath[UTIL_PATH_SIZE];
+		const char *devpath;
+
+		devpath = argv[optind];
+		if (devpath == NULL) {
+			fprintf(stderr, "missing device\n");
+			retval = 1;
+			goto exit;
+		}
+
+		util_strscpyl(syspath, sizeof(syspath), udev_get_sys_path(udev), devpath, NULL);
+		dev = udev_device_new_from_syspath(udev, syspath);
+		if (dev == NULL) {
+			err(udev, "unable to access '%s'\n", devpath);
+			retval = 1;
+			goto exit;
+			return 1;
+		}
 	}
 
 	retval = usb_id(dev);
diff --git a/libudev/docs/libudev-sections.txt b/libudev/docs/libudev-sections.txt
index c11a273..ca781ff 100644
--- a/libudev/docs/libudev-sections.txt
+++ b/libudev/docs/libudev-sections.txt
@@ -35,6 +35,7 @@ udev_device_get_udev
 udev_device_new_from_syspath
 udev_device_new_from_devnum
 udev_device_new_from_subsystem_sysname
+udev_device_new_from_environment
 udev_device_get_parent
 udev_device_get_parent_with_subsystem_devtype
 udev_device_get_devpath
diff --git a/libudev/exported_symbols b/libudev/exported_symbols
index f48025a..61486c6 100644
--- a/libudev/exported_symbols
+++ b/libudev/exported_symbols
@@ -15,6 +15,7 @@ udev_list_entry_get_value
 udev_device_new_from_syspath
 udev_device_new_from_devnum
 udev_device_new_from_subsystem_sysname
+udev_device_new_from_environment
 udev_device_get_parent
 udev_device_get_parent_with_subsystem_devtype
 udev_device_ref
diff --git a/libudev/libudev-device.c b/libudev/libudev-device.c
index aec5fb5..fe45880 100644
--- a/libudev/libudev-device.c
+++ b/libudev/libudev-device.c
@@ -13,6 +13,7 @@
 #include <stdlib.h>
 #include <stddef.h>
 #include <unistd.h>
+#include <stdbool.h>
 #include <errno.h>
 #include <string.h>
 #include <dirent.h>
@@ -67,6 +68,7 @@ struct udev_device {
 	int refcount;
 	dev_t devnum;
 	int watch_handle;
+	int maj, min;
 	unsigned int parent_set:1;
 	unsigned int subsystem_set:1;
 	unsigned int devtype_set:1;
@@ -77,6 +79,130 @@ struct udev_device {
 	unsigned int ignore_remove:1;
 };
 
+struct udev_list_entry *udev_device_add_property(struct udev_device *udev_device, const char *key, const char *value)
+{
+	udev_device->envp_uptodate = 0;
+	if (value == NULL) {
+		struct udev_list_entry *list_entry;
+
+		list_entry = udev_device_get_properties_list_entry(udev_device);
+		list_entry = udev_list_entry_get_by_name(list_entry, key);
+		if (list_entry != NULL)
+			udev_list_entry_delete(list_entry);
+		return NULL;
+	}
+	return udev_list_entry_add(udev_device->udev, &udev_device->properties_list, key, value, 1, 0);
+}
+
+static struct udev_list_entry *udev_device_add_property_from_string(struct udev_device *udev_device, const char *property)
+{
+	char name[UTIL_LINE_SIZE];
+	char *val;
+
+	util_strscpy(name, sizeof(name), property);
+	val = strchr(name, '=');
+	if (val == NULL)
+		return NULL;
+	val[0] = '\0';
+	val = &val[1];
+	if (val[0] == '\0')
+		val = NULL;
+	return udev_device_add_property(udev_device, name, val);
+}
+
+/*
+ * parse property string, and if needed, update internal values accordingly
+ *
+ * udev_device_add_property_from_string_parse_finish() needs to be
+ * called after adding properties, and its return value checked
+ *
+ * udev_device_set_info_loaded() needs to be set, to avoid trying
+ * to use a device without a DEVPATH set
+ */
+void udev_device_add_property_from_string_parse(struct udev_device *udev_device, const char *property)
+{
+	if (strncmp(property, "DEVPATH=", 8) == 0) {
+		char path[UTIL_PATH_SIZE];
+
+		util_strscpyl(path, sizeof(path), udev_get_sys_path(udev_device->udev), &property[8], NULL);
+		udev_device_set_syspath(udev_device, path);
+	} else if (strncmp(property, "SUBSYSTEM=", 10) == 0) {
+		udev_device_set_subsystem(udev_device, &property[10]);
+	} else if (strncmp(property, "DEVTYPE=", 8) == 0) {
+		udev_device_set_devtype(udev_device, &property[8]);
+	} else if (strncmp(property, "DEVNAME=", 8) == 0) {
+		if (property[8] == '/')
+			udev_device_set_devnode(udev_device, &property[8]);
+		else
+			udev_device_set_knodename(udev_device, &property[8]);
+	} else if (strncmp(property, "DEVLINKS=", 9) == 0) {
+		char devlinks[UTIL_PATH_SIZE];
+		char *slink;
+		char *next;
+
+		util_strscpy(devlinks, sizeof(devlinks), &property[9]);
+		slink = devlinks;
+		next = strchr(slink, ' ');
+		while (next != NULL) {
+			next[0] = '\0';
+			udev_device_add_devlink(udev_device, slink, 0);
+			slink = &next[1];
+			next = strchr(slink, ' ');
+		}
+		if (slink[0] != '\0')
+			udev_device_add_devlink(udev_device, slink, 0);
+	} else if (strncmp(property, "DRIVER=", 7) == 0) {
+		udev_device_set_driver(udev_device, &property[7]);
+	} else if (strncmp(property, "ACTION=", 7) == 0) {
+		udev_device_set_action(udev_device, &property[7]);
+	} else if (strncmp(property, "MAJOR=", 6) == 0) {
+		udev_device->maj = strtoull(&property[6], NULL, 10);
+	} else if (strncmp(property, "MINOR=", 6) == 0) {
+		udev_device->min = strtoull(&property[6], NULL, 10);
+	} else if (strncmp(property, "DEVPATH_OLD=", 12) == 0) {
+		udev_device_set_devpath_old(udev_device, &property[12]);
+	} else if (strncmp(property, "SEQNUM=", 7) == 0) {
+		udev_device_set_seqnum(udev_device, strtoull(&property[7], NULL, 10));
+	} else if (strncmp(property, "TIMEOUT=", 8) == 0) {
+		udev_device_set_timeout(udev_device, strtoull(&property[8], NULL, 10));
+	} else {
+		udev_device_add_property_from_string(udev_device, property);
+	}
+}
+
+int udev_device_add_property_from_string_parse_finish(struct udev_device *udev_device)
+{
+	if (udev_device->maj > 0)
+		udev_device_set_devnum(udev_device, makedev(udev_device->maj, udev_device->min));
+	udev_device->maj = 0;
+	udev_device->min = 0;
+
+	if (udev_device->devpath == NULL || udev_device->subsystem == NULL)
+		return -EINVAL;
+	return 0;
+}
+
+/**
+ * udev_device_get_property_value:
+ * @udev_device: udev device
+ * @key: property name
+ *
+ * Returns: the value of a device property, or #NULL if there is no such property.
+ **/
+const char *udev_device_get_property_value(struct udev_device *udev_device, const char *key)
+{
+	struct udev_list_entry *list_entry;
+
+	if (udev_device == NULL)
+		return NULL;
+	if (key == NULL)
+		return NULL;
+
+	list_entry = udev_device_get_properties_list_entry(udev_device);
+	list_entry =  udev_list_entry_get_by_name(list_entry, key);
+	return udev_list_entry_get_value(list_entry);
+}
+
 int udev_device_read_db(struct udev_device *udev_device)
 {
 	struct stat stats;
@@ -451,6 +577,42 @@ found:
 	return udev_device_new_from_syspath(udev, path_full);
 }
 
+/**
+ * udev_device_new_from_environment
+ * @udev: udev library context
+ *
+ * Create new udev device, and fill in information from the
+ * current process environment. This only works reliable if
+ * the process is called from a udev rule. It is usually used
+ * for tools executed from IMPORT= rules.
+ *
+ * The initial refcount is 1, and needs to be decremented to
+ * release the resources of the udev device.
+ *
+ * Returns: a new udev device, or #NULL, if it does not exist
+ **/
+struct udev_device *udev_device_new_from_environment(struct udev *udev)
+{
+	int i;
+	struct udev_device *udev_device;
+
+	udev_device = udev_device_new(udev);
+	if (udev_device == NULL)
+		return NULL;
+	udev_device_set_info_loaded(udev_device);
+
+	for (i = 0; environ[i] != NULL; i++)
+		udev_device_add_property_from_string_parse(udev_device, environ[i]);
+
+	if (udev_device_add_property_from_string_parse_finish(udev_device) < 0) {
+		info(udev, "missing values, invalid device\n");
+		udev_device_unref(udev_device);
+		udev_device = NULL;
+	}
+
+	return udev_device;
+}
+
 static struct udev_device *device_new_from_parent(struct udev_device *udev_device)
 {
 	struct udev_device *udev_device_parent = NULL;
@@ -1072,58 +1234,6 @@ int udev_device_add_devlink(struct udev_device *udev_device, const char *devlink
 	return 0;
 }
 
-struct udev_list_entry *udev_device_add_property(struct udev_device *udev_device, const char *key, const char *value)
-{
-	udev_device->envp_uptodate = 0;
-	if (value == NULL) {
-		struct udev_list_entry *list_entry;
-
-		list_entry = udev_device_get_properties_list_entry(udev_device);
-		list_entry = udev_list_entry_get_by_name(list_entry, key);
-		if (list_entry != NULL)
-			udev_list_entry_delete(list_entry);
-		return NULL;
-	}
-	return udev_list_entry_add(udev_device->udev, &udev_device->properties_list, key, value, 1, 0);
-}
-
-struct udev_list_entry *udev_device_add_property_from_string(struct udev_device *udev_device, const char *property)
-{
-	char name[UTIL_LINE_SIZE];
-	char *val;
-
-	util_strscpy(name, sizeof(name), property);
-	val = strchr(name, '=');
-	if (val == NULL)
-		return NULL;
-	val[0] = '\0';
-	val = &val[1];
-	if (val[0] == '\0')
-		val = NULL;
-	return udev_device_add_property(udev_device, name, val);
-}
-
-/**
- * udev_device_get_property_value:
- * @udev_device: udev device
- * @key: property name
- *
- * Returns: the value of a device property, or #NULL if there is no such property.
- **/
-const char *udev_device_get_property_value(struct udev_device *udev_device, const char *key)
-{
-	struct udev_list_entry *list_entry;
-
-	if (udev_device == NULL)
-		return NULL;
-	if (key == NULL)
-		return NULL;
-
-	list_entry = udev_device_get_properties_list_entry(udev_device);
-	list_entry =  udev_list_entry_get_by_name(list_entry, key);
-	return udev_list_entry_get_value(list_entry);
-}
-
 #define ENVP_SIZE			128
 #define MONITOR_BUF_SIZE		4096
 static int update_envp_monitor_buf(struct udev_device *udev_device)
diff --git a/libudev/libudev-monitor.c b/libudev/libudev-monitor.c
index 96c153f..97e52c4 100644
--- a/libudev/libudev-monitor.c
+++ b/libudev/libudev-monitor.c
@@ -497,11 +497,6 @@ struct udev_device *udev_monitor_receive_device(struct udev_monitor *udev_monito
 	ssize_t buflen;
 	ssize_t bufpos;
 	struct udev_monitor_netlink_header *nlh;
-	int devpath_set = 0;
-	int subsystem_set = 0;
-	int action_set = 0;
-	int maj = 0;
-	int min = 0;
 
 retry:
 	if (udev_monitor == NULL)
@@ -589,6 +584,7 @@ retry:
 	udev_device = udev_device_new(udev_monitor->udev);
 	if (udev_device == NULL)
 		return NULL;
+	udev_device_set_info_loaded(udev_device);
 
 	while (bufpos < buflen) {
 		char *key;
@@ -599,60 +595,11 @@ retry:
 		if (keylen == 0)
 			break;
 		bufpos += keylen + 1;
-
-		if (strncmp(key, "DEVPATH=", 8) == 0) {
-			char path[UTIL_PATH_SIZE];
-
-			util_strscpyl(path, sizeof(path), udev_get_sys_path(udev_monitor->udev), &key[8], NULL);
-			udev_device_set_syspath(udev_device, path);
-			devpath_set = 1;
-		} else if (strncmp(key, "SUBSYSTEM=", 10) == 0) {
-			udev_device_set_subsystem(udev_device, &key[10]);
-			subsystem_set = 1;
-		} else if (strncmp(key, "DEVTYPE=", 8) == 0) {
-			udev_device_set_devtype(udev_device, &key[8]);
-		} else if (strncmp(key, "DEVNAME=", 8) == 0) {
-			if (key[8] == '/')
-				udev_device_set_devnode(udev_device, &key[8]);
-			else
-				udev_device_set_knodename(udev_device, &key[8]);
-		} else if (strncmp(key, "DEVLINKS=", 9) == 0) {
-			char devlinks[UTIL_PATH_SIZE];
-			char *slink;
-			char *next;
-
-			util_strscpy(devlinks, sizeof(devlinks), &key[9]);
-			slink = devlinks;
-			next = strchr(slink, ' ');
-			while (next != NULL) {
-				next[0] = '\0';
-				udev_device_add_devlink(udev_device, slink, 0);
-				slink = &next[1];
-				next = strchr(slink, ' ');
-			}
-			if (slink[0] != '\0')
-				udev_device_add_devlink(udev_device, slink, 0);
-		} else if (strncmp(key, "DRIVER=", 7) == 0) {
-			udev_device_set_driver(udev_device, &key[7]);
-		} else if (strncmp(key, "ACTION=", 7) == 0) {
-			udev_device_set_action(udev_device, &key[7]);
-			action_set = 1;
-		} else if (strncmp(key, "MAJOR=", 6) == 0) {
-			maj = strtoull(&key[6], NULL, 10);
-		} else if (strncmp(key, "MINOR=", 6) == 0) {
-			min = strtoull(&key[6], NULL, 10);
-		} else if (strncmp(key, "DEVPATH_OLD=", 12) == 0) {
-			udev_device_set_devpath_old(udev_device, &key[12]);
-		} else if (strncmp(key, "SEQNUM=", 7) == 0) {
-			udev_device_set_seqnum(udev_device, strtoull(&key[7], NULL, 10));
-		} else if (strncmp(key, "TIMEOUT=", 8) == 0) {
-			udev_device_set_timeout(udev_device, strtoull(&key[8], NULL, 10));
-		} else {
-			udev_device_add_property_from_string(udev_device, key);
-		}
+		udev_device_add_property_from_string_parse(udev_device, key);
 	}
-	if (!devpath_set || !subsystem_set || !action_set) {
-		info(udev_monitor->udev, "missing values, skip\n");
+
+	if (udev_device_add_property_from_string_parse_finish(udev_device) < 0) {
+		info(udev_monitor->udev, "missing values, invalid device\n");
 		udev_device_unref(udev_device);
 		return NULL;
 	}
@@ -673,9 +620,6 @@ retry:
 		return NULL;
 	}
 
-	if (maj > 0)
-		udev_device_set_devnum(udev_device, makedev(maj, min));
-	udev_device_set_info_loaded(udev_device);
 	return udev_device;
 }
 
diff --git a/libudev/libudev-private.h b/libudev/libudev-private.h
index 5ee0c58..3f2861f 100644
--- a/libudev/libudev-private.h
+++ b/libudev/libudev-private.h
@@ -71,7 +71,8 @@ int udev_device_set_devnode(struct udev_device *udev_device, const char *devnode
 int udev_device_add_devlink(struct udev_device *udev_device, const char *devlink, int unique);
 void udev_device_cleanup_devlinks_list(struct udev_device *udev_device);
 struct udev_list_entry *udev_device_add_property(struct udev_device *udev_device, const char *key, const char *value);
-struct udev_list_entry *udev_device_add_property_from_string(struct udev_device *udev_device, const char *property);
+void udev_device_add_property_from_string_parse(struct udev_device *udev_device, const char *property);
+int udev_device_add_property_from_string_parse_finish(struct udev_device *udev_device);
 char **udev_device_get_properties_envp(struct udev_device *udev_device);
 ssize_t udev_device_get_properties_monitor_buf(struct udev_device *udev_device, const char **buf);
 int udev_device_read_db(struct udev_device *udev_device);
diff --git a/libudev/libudev.h b/libudev/libudev.h
index 9576ad4..750664f 100644
--- a/libudev/libudev.h
+++ b/libudev/libudev.h
@@ -75,6 +75,7 @@ struct udev *udev_device_get_udev(struct udev_device *udev_device);
 struct udev_device *udev_device_new_from_syspath(struct udev *udev, const char *syspath);
 struct udev_device *udev_device_new_from_devnum(struct udev *udev, char type, dev_t devnum);
 struct udev_device *udev_device_new_from_subsystem_sysname(struct udev *udev, const char *subsystem, const char *sysname);
+struct udev_device *udev_device_new_from_environment(struct udev *udev);
 /* udev_device_get_parent_*() does not take a reference on the returned device, it is automatically unref'd with the parent */
 struct udev_device *udev_device_get_parent(struct udev_device *udev_device);
 struct udev_device *udev_device_get_parent_with_subsystem_devtype(struct udev_device *udev_device,
-- 
1.6.6


0037-rules-virtio-fix-is-to-check-if-the-name-attribute-i.patch:
 50-udev-default.rules |    3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

--- NEW FILE 0037-rules-virtio-fix-is-to-check-if-the-name-attribute-i.patch ---
>From 00e43e357ea709d8c1def0aed13192abbf9ac193 Mon Sep 17 00:00:00 2001
From: Amit Shah <amit.shah at redhat.com>
Date: Mon, 22 Mar 2010 10:59:46 +0100
Subject: [PATCH 37/65] rules: virtio - fix is to check if the 'name' attribute is present

Fix provided by Harald Hoyer.

Signed-off-by: Amit Shah <amit.shah at redhat.com>
---
 rules/rules.d/50-udev-default.rules |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/rules/rules.d/50-udev-default.rules b/rules/rules.d/50-udev-default.rules
index da1535f..e8116a3 100644
--- a/rules/rules.d/50-udev-default.rules
+++ b/rules/rules.d/50-udev-default.rules
@@ -18,7 +18,7 @@ KERNEL=="mwave",		GROUP="dialout"
 KERNEL=="hvc*|hvsi*",		GROUP="dialout"
 
 # virtio serial / console ports
-KERNEL=="vport*", SYMLINK+="virtio-ports/$attr{name}"
+KERNEL=="vport*", ATTR{name}=="?*", SYMLINK+="virtio-ports/$attr{name}"
 
 # mem
 KERNEL=="null|zero|full|random|urandom", MODE="0666"
-- 
1.6.6


0038-keymap-Add-Acer-TravelMate-6593G-and-Acer-Aspire-164.patch:
 95-keymap.rules |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- NEW FILE 0038-keymap-Add-Acer-TravelMate-6593G-and-Acer-Aspire-164.patch ---
>From 5b6172b1d9b5d582d05ea89985efd0ea7a0c8ad7 Mon Sep 17 00:00:00 2001
From: Martin Pitt <martin.pitt at ubuntu.com>
Date: Wed, 24 Mar 2010 17:44:39 +0100
Subject: [PATCH 38/65] keymap: Add Acer TravelMate 6593G and Acer Aspire 1640

https://launchpad.net/bugs/536914
---
 extras/keymap/95-keymap.rules |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/extras/keymap/95-keymap.rules b/extras/keymap/95-keymap.rules
index 65b0d6e..b3b08ae 100644
--- a/extras/keymap/95-keymap.rules
+++ b/extras/keymap/95-keymap.rules
@@ -78,6 +78,7 @@ ENV{DMI_VENDOR}=="Acer*", RUN+="keymap $name acer"
 ENV{DMI_VENDOR}=="Acer*", ATTR{[dmi/id]product_name}=="Extensa*", ATTR{[dmi/id]product_name}=="*5210*|*5220*|*5610*|*5620*|*5720*", RUN+="keymap $name 0xEE screenlock"
 ENV{DMI_VENDOR}=="Acer*", ATTR{[dmi/id]product_name}=="TravelMate*C300*", RUN+="keymap $name acer-travelmate_c300"
 ENV{DMI_VENDOR}=="Acer*", ATTR{[dmi/id]product_name}=="TravelMate*6292*|TravelMate*8471*|Aspire 1810T*|AO751h|AO531h", RUN+="keymap $name 0xD9 bluetooth"
+ENV{DMI_VENDOR}=="Acer*", ATTR{[dmi/id]product_name}=="TravelMate 6593|Aspire 1640", RUN+="keymap $name 0xB2 www"
 ENV{DMI_VENDOR}=="Acer*", ATTR{[dmi/id]product_name}=="Aspire 6920", RUN+="keymap $name acer-aspire_6920"
 ENV{DMI_VENDOR}=="Acer*", ATTR{[dmi/id]product_name}=="Aspire 5920G", RUN+="keymap $name acer-aspire_5920g"
 ENV{DMI_VENDOR}=="Acer*", ATTR{[dmi/id]product_name}=="Aspire 5720*", RUN+="keymap $name acer-aspire_5720"
-- 
1.6.6


0039-keymap-Fix-another-key-for-Acer-TravelMate-6593.patch:
 95-keymap.rules |    3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

--- NEW FILE 0039-keymap-Fix-another-key-for-Acer-TravelMate-6593.patch ---
>From 43d08246dbb3a01e88062d5315194ee889e52dd4 Mon Sep 17 00:00:00 2001
From: Martin Pitt <martin.pitt at ubuntu.com>
Date: Wed, 24 Mar 2010 18:56:20 +0100
Subject: [PATCH 39/65] keymap: Fix another key for Acer TravelMate 6593

https://launchpad.net/bugs/536914
---
 extras/keymap/95-keymap.rules |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/extras/keymap/95-keymap.rules b/extras/keymap/95-keymap.rules
index b3b08ae..dd58453 100644
--- a/extras/keymap/95-keymap.rules
+++ b/extras/keymap/95-keymap.rules
@@ -78,7 +78,7 @@ ENV{DMI_VENDOR}=="Acer*", RUN+="keymap $name acer"
 ENV{DMI_VENDOR}=="Acer*", ATTR{[dmi/id]product_name}=="Extensa*", ATTR{[dmi/id]product_name}=="*5210*|*5220*|*5610*|*5620*|*5720*", RUN+="keymap $name 0xEE screenlock"
 ENV{DMI_VENDOR}=="Acer*", ATTR{[dmi/id]product_name}=="TravelMate*C300*", RUN+="keymap $name acer-travelmate_c300"
 ENV{DMI_VENDOR}=="Acer*", ATTR{[dmi/id]product_name}=="TravelMate*6292*|TravelMate*8471*|Aspire 1810T*|AO751h|AO531h", RUN+="keymap $name 0xD9 bluetooth"
-ENV{DMI_VENDOR}=="Acer*", ATTR{[dmi/id]product_name}=="TravelMate 6593|Aspire 1640", RUN+="keymap $name 0xB2 www"
+ENV{DMI_VENDOR}=="Acer*", ATTR{[dmi/id]product_name}=="TravelMate 6593|Aspire 1640", RUN+="keymap $name 0xB2 www 0xEE screenlock"
 ENV{DMI_VENDOR}=="Acer*", ATTR{[dmi/id]product_name}=="Aspire 6920", RUN+="keymap $name acer-aspire_6920"
 ENV{DMI_VENDOR}=="Acer*", ATTR{[dmi/id]product_name}=="Aspire 5920G", RUN+="keymap $name acer-aspire_5920g"
 ENV{DMI_VENDOR}=="Acer*", ATTR{[dmi/id]product_name}=="Aspire 5720*", RUN+="keymap $name acer-aspire_5720"
-- 
1.6.6


0040-libudev-update-documentation.patch:
 docs/libudev-docs.xml |    2 +-
 libudev-device.c      |   14 ++++++--------
 libudev.c             |   15 +++++++--------
 3 files changed, 14 insertions(+), 17 deletions(-)

--- NEW FILE 0040-libudev-update-documentation.patch ---
>From dbba7e4029e2eb8157232e6b5ddd9ee0f68b51b5 Mon Sep 17 00:00:00 2001
From: Kay Sievers <kay.sievers at vrfy.org>
Date: Thu, 25 Mar 2010 16:45:15 +0100
Subject: [PATCH 40/65] libudev: update documentation

---
 libudev/docs/libudev-docs.xml |    2 +-
 libudev/libudev-device.c      |   14 ++++++--------
 libudev/libudev.c             |   14 +++++++-------
 3 files changed, 14 insertions(+), 16 deletions(-)

diff --git a/libudev/docs/libudev-docs.xml b/libudev/docs/libudev-docs.xml
index b037281..f470916 100644
--- a/libudev/docs/libudev-docs.xml
+++ b/libudev/docs/libudev-docs.xml
@@ -9,7 +9,7 @@
     <title>libudev Reference Manual</title>
     <releaseinfo>for libudev version &version;</releaseinfo>
     <copyright>
-      <year>2009</year>
+      <year>2009-2010</year>
       <holder>Kay Sievers &lt;kay.sievers at vrfy.org&gt;</holder>
     </copyright>
   </bookinfo>
diff --git a/libudev/libudev-device.c b/libudev/libudev-device.c
index fe45880..410f75b 100644
--- a/libudev/libudev-device.c
+++ b/libudev/libudev-device.c
@@ -463,10 +463,9 @@ struct udev_device *udev_device_new_from_syspath(struct udev *udev, const char *
  * @devnum: device major/minor number
  *
  * Create new udev device, and fill in information from the sys
- * device and the udev database entry. The device is looked up
- * by its major/minor number. Character and block device numbers
- * are not unique across the two types, they do not share the same
- * range of numbers.
+ * device and the udev database entry. The device is looked-up
+ * by its major/minor number and type. Character and block device
+ * numbers are not unique across the two types.
  *
  * The initial refcount is 1, and needs to be decremented to
  * release the resources of the udev device.
@@ -497,10 +496,9 @@ struct udev_device *udev_device_new_from_devnum(struct udev *udev, char type, de
  * @subsystem: the subsystem of the device
  * @sysname: the name of the device
  *
- * Create new udev device, and fill in information from the sys
- * device and the udev database entry. The device is looked up
- * by the subsystem and name string of the device, like "mem",
- * "zero", or "block", "sda".
+ * Create new udev device, and fill in information from the sys device
+ * and the udev database entry. The device is looked up by the subsystem
+ * and name string of the device, like "mem" / "zero", or "block" / "sda".
  *
  * The initial refcount is 1, and needs to be decremented to
  * release the resources of the udev device.
diff --git a/libudev/libudev.c b/libudev/libudev.c
index 411e9ae..0ae5a91 100644
--- a/libudev/libudev.c
+++ b/libudev/libudev.c
@@ -1,7 +1,7 @@
 /*
  * libudev - interface to udev device information
  *
- * Copyright (C) 2008-2009 Kay Sievers <kay.sievers at vrfy.org>
+ * Copyright (C) 2008-2010 Kay Sievers <kay.sievers at vrfy.org>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -71,7 +71,7 @@ static void log_stderr(struct udev *udev,
  * @udev: udev library context
  *
  * Retrieve stored data pointer from library context. This might be useful
- * to access from callbacks.
+ * to access from callbacks like a custom logging function.
  *
  * Returns: stored userdata
  **/
@@ -321,10 +321,10 @@ void udev_set_log_fn(struct udev *udev,
  * udev_get_log_priority:
  * @udev: udev library context
  *
- * The initial syslog priority is read from the udev config file
+ * The initial logging priority is read from the udev config file
  * at startup.
  *
- * Returns: the current syslog priority
+ * Returns: the current logging priority
  **/
 int udev_get_log_priority(struct udev *udev)
 {
@@ -334,10 +334,10 @@ int udev_get_log_priority(struct udev *udev)
 /**
  * udev_set_log_priority:
  * @udev: udev library context
- * @priority: the new syslog priority
+ * @priority: the new logging priority
  *
- * Set the current syslog priority. The value controls which messages
- * are send to syslog.
+ * Set the current logging priority. The value controls which messages
+ * are logged.
  **/
 void udev_set_log_priority(struct udev *udev, int priority)
 {
-- 
1.6.6


0041-Fix-Keymapping-for-upcoming-Dell-Laptops.patch:
 95-keymap.rules |    1 +
 keymaps/dell    |    2 --
 2 files changed, 1 insertion(+), 2 deletions(-)

--- NEW FILE 0041-Fix-Keymapping-for-upcoming-Dell-Laptops.patch ---
>From 233a922112408c7ed49bd72e73be228e231d46ba Mon Sep 17 00:00:00 2001
From: Jerone Young <jerone.young at canonical.com>
Date: Wed, 24 Mar 2010 20:14:23 -0500
Subject: [PATCH 41/65] Fix Keymapping for upcoming Dell Laptops

This patch fixes it so that new upcoming Dell machines will work
correctly if users presses the touchpad toggle key.

Currently 0xD8 is being mapped to sleep. Though this is only done by the
Latitude XT* laptops. Many upcoming Laptops from Dell are mapping this
key to "toogle touchpad off" .. giving the OS notification that it has
just turned off the touchpad.

Though their is an issue in that if this key is mapped the hardware
first toogles .. then the software tries to do the samething after, if
they fall out of sync ... no more touchpad. So leave out mapping these
keys for now.

Signed-off-by: Jerone Young <jerone.young at canonical.com>
Signed-off-by: Martin Pitt <martin.pitt at ubuntu.com>
---
 extras/keymap/95-keymap.rules |    1 +
 extras/keymap/keymaps/dell    |    1 -
 2 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/extras/keymap/95-keymap.rules b/extras/keymap/95-keymap.rules
index dd58453..af39c21 100644
--- a/extras/keymap/95-keymap.rules
+++ b/extras/keymap/95-keymap.rules
@@ -54,6 +54,7 @@ LABEL="keyboard_vendorcheck"
 
 ENV{DMI_VENDOR}=="Dell*", RUN+="keymap $name dell"
 ENV{DMI_VENDOR}=="Dell*", ATTR{[dmi/id]product_name}=="Inspiron 1011", RUN+="keymap $name 0x84 wlan"
+ENV{DMI_VENDOR}=="Dell*", ATTR{[dmi/id]product_name}=="Latitude XT*", RUN+="keymap $name 0xD8 screenlock"
 
 ENV{DMI_VENDOR}=="Compaq*", ATTR{[dmi/id]product_name}=="*E500*|*Evo N*", RUN+="keymap $name compaq-e_evo"
 
diff --git a/extras/keymap/keymaps/dell b/extras/keymap/keymaps/dell
index 5ff44d6..84e5b4e 100644
--- a/extras/keymap/keymaps/dell
+++ b/extras/keymap/keymaps/dell
@@ -23,5 +23,4 @@
 0x9B switchvideomode # Display Toggle button
 0xA2 playpause # Front panel play/pause
 0xA4 stopcd # Front panel stop
-0xD8 screenlock # FIXME: Tablet lock button
 0xED media # MediaDirect button
-- 
1.6.6


0042-Add-new-Dell-touchpad-keycode.patch:
 dell |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- NEW FILE 0042-Add-new-Dell-touchpad-keycode.patch ---
>From e22aa83ba0b09796d02ebe831a4a66ab7d9f5c1e Mon Sep 17 00:00:00 2001
From: Jerone Young <jerone.young at canonical.com>
Date: Mon, 5 Apr 2010 18:45:34 -0500
Subject: [PATCH 42/65] Add new Dell touchpad keycode

After working very closely with Dell. They have now completely changed
the way they have implemented there touchpad hotkey for upcoming
machines.

It now only generates a single keycode (0xD9). It nolonger does anything
in hardware, nor does it generate more then this keycode.

This patch properly maps this keycode.

Signed-off-by: Jerone Young <jerone.young at canonical.com>
Signed-off-by: Martin Pitt <martin.pitt at ubuntu.com>
---
 extras/keymap/keymaps/dell |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/extras/keymap/keymaps/dell b/extras/keymap/keymaps/dell
index 84e5b4e..f90a4fd 100644
--- a/extras/keymap/keymaps/dell
+++ b/extras/keymap/keymaps/dell
@@ -24,3 +24,4 @@
 0xA2 playpause # Front panel play/pause
 0xA4 stopcd # Front panel stop
 0xED media # MediaDirect button
+0xD9 f22 # touchpad toggle
-- 
1.6.6


0043-Revert-special-casing-0xD8-to-latitude-XT-only.patch:
 95-keymap.rules |    1 -
 keymaps/dell    |    2 +-
 2 files changed, 1 insertion(+), 2 deletions(-)

--- NEW FILE 0043-Revert-special-casing-0xD8-to-latitude-XT-only.patch ---
>From 5fa8992c9c2e756aefe84a41f00c7a2555e8d975 Mon Sep 17 00:00:00 2001
From: Jerone Young <jerone.young at canonical.com>
Date: Mon, 5 Apr 2010 18:45:35 -0500
Subject: [PATCH 43/65] Revert special casing 0xD8 to latitude XT only

Now that Dell has changed the functionality of upcoming machines with
touchpad toggle to only use keycode 0xD9 .. and not 0xD8 & 0xD9. It
seems best to add this back to the general map of Dell buttons. Just
incase a machine in the future uses this later.

Signed-off-by: Jerone Young <jerone.young at canonical.com>
Signed-off-by: Martin Pitt <martin.pitt at ubuntu.com>
---
 extras/keymap/95-keymap.rules |    1 -
 extras/keymap/keymaps/dell    |    1 +
 2 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/extras/keymap/95-keymap.rules b/extras/keymap/95-keymap.rules
index af39c21..dd58453 100644
--- a/extras/keymap/95-keymap.rules
+++ b/extras/keymap/95-keymap.rules
@@ -54,7 +54,6 @@ LABEL="keyboard_vendorcheck"
 
 ENV{DMI_VENDOR}=="Dell*", RUN+="keymap $name dell"
 ENV{DMI_VENDOR}=="Dell*", ATTR{[dmi/id]product_name}=="Inspiron 1011", RUN+="keymap $name 0x84 wlan"
-ENV{DMI_VENDOR}=="Dell*", ATTR{[dmi/id]product_name}=="Latitude XT*", RUN+="keymap $name 0xD8 screenlock"
 
 ENV{DMI_VENDOR}=="Compaq*", ATTR{[dmi/id]product_name}=="*E500*|*Evo N*", RUN+="keymap $name compaq-e_evo"
 
diff --git a/extras/keymap/keymaps/dell b/extras/keymap/keymaps/dell
index f90a4fd..6443b4b 100644
--- a/extras/keymap/keymaps/dell
+++ b/extras/keymap/keymaps/dell
@@ -24,4 +24,5 @@
 0xA2 playpause # Front panel play/pause
 0xA4 stopcd # Front panel stop
 0xED media # MediaDirect button
+0xD8 screenlock # FIXME: Tablet lock button
 0xD9 f22 # touchpad toggle
-- 
1.6.6


0044-Fix-Dell-Studio-1558-volume-keys-not-releasing.patch:
 95-keyboard-force-release.rules |    3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

--- NEW FILE 0044-Fix-Dell-Studio-1558-volume-keys-not-releasing.patch ---
>From f8ede05d7ad5286039319bcb188e86b9117551e2 Mon Sep 17 00:00:00 2001
From: Jerone Young <jerone.young at canonical.com>
Date: Tue, 6 Apr 2010 12:59:12 -0500
Subject: [PATCH 44/65] Fix Dell Studio 1558 volume keys not releasing

This patch fixes the Dell Studio 1558 to give a key release when a
volume key is pressed. This is the same as the 1557.

Signed-off-by: Jerone Young <jerone.young at canonical.com>
Signed-off-by: Martin Pitt <martin.pitt at ubuntu.com>
---
 extras/keymap/95-keyboard-force-release.rules |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/extras/keymap/95-keyboard-force-release.rules b/extras/keymap/95-keyboard-force-release.rules
index 28639a5..f0e1ab8 100644
--- a/extras/keymap/95-keyboard-force-release.rules
+++ b/extras/keymap/95-keyboard-force-release.rules
@@ -21,7 +21,7 @@ ENV{DMI_VENDOR}="$attr{[dmi/id]sys_vendor}"
 
 ENV{DMI_VENDOR}=="[sS][aA][mM][sS][uU][nN][gG]*", ATTR{[dmi/id]product_name}=="*N130*|*N140*|*SR70S/SR71S*|*Q210/P210*", RUN+="keyboard-force-release.sh $devpath samsung-other"
 
-ENV{DMI_VENDOR}=="Dell Inc.", ATTR{[dmi/id]product_name}=="Studio 1557", RUN+="keyboard-force-release.sh $devpath dell-studio-1557"
+ENV{DMI_VENDOR}=="Dell Inc.", ATTR{[dmi/id]product_name}=="Studio 1557|Studio 1558", RUN+="keyboard-force-release.sh $devpath dell-studio-1557"
 
 ENV{DMI_VENDOR}=="FUJITSU SIEMENS", ATTR{[dmi/id]product_name}=="AMILO Si 1848+u", RUN+="keyboard-force-release.sh $devpath fujitsu-amilo-si1848"
 
-- 
1.6.6


0045-Add-support-for-another-Dell-touchpad-toggle-key.patch:
 dell |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- NEW FILE 0045-Add-support-for-another-Dell-touchpad-toggle-key.patch ---
>From 6de84dee053a74c95f2200d6d94cfeb61516bc40 Mon Sep 17 00:00:00 2001
From: Jerone Young <jerone.young at canonical.com>
Date: Tue, 6 Apr 2010 16:08:21 -0500
Subject: [PATCH 45/65] Add support for another Dell touchpad toggle key

There is another keycode that some Dell machines that are about to ship,
or shipping are using for touchpad toggle. That code is 0x9E.

Signed-off-by: Jerone Young <jerone.young at canonical.com>
Signed-off-by: Martin Pitt <martin.pitt at ubuntu.com>
---
 extras/keymap/keymaps/dell |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/extras/keymap/keymaps/dell b/extras/keymap/keymaps/dell
index 6443b4b..1a2e433 100644
--- a/extras/keymap/keymaps/dell
+++ b/extras/keymap/keymaps/dell
@@ -21,6 +21,7 @@
 0x99 nextsong # Front panel next song
 0x9A setup # Tablet tools button
 0x9B switchvideomode # Display Toggle button
+0x9E f22 #touchpad toggle
 0xA2 playpause # Front panel play/pause
 0xA4 stopcd # Front panel stop
 0xED media # MediaDirect button
-- 
1.6.6


0047-scsi_id-add-rand-in-retry-loop.patch:
 scsi_serial.c |   15 +++++++--------
 1 file changed, 7 insertions(+), 8 deletions(-)

--- NEW FILE 0047-scsi_id-add-rand-in-retry-loop.patch ---
>From 1c8dc990dc20efbd6cd8e56a57c0fa567c2d6fc8 Mon Sep 17 00:00:00 2001
From: Kay Sievers <kay.sievers at vrfy.org>
Date: Wed, 7 Apr 2010 09:22:30 +0200
Subject: [PATCH 47/65] scsi_id: add rand() in retry loop

---
 extras/scsi_id/scsi_serial.c |   14 +++++++-------
 1 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/extras/scsi_id/scsi_serial.c b/extras/scsi_id/scsi_serial.c
index 0c9d9c3..8752e14 100644
--- a/extras/scsi_id/scsi_serial.c
+++ b/extras/scsi_id/scsi_serial.c
@@ -863,21 +863,21 @@ int scsi_get_serial(struct udev *udev,
 {
 	unsigned char page0[SCSI_INQ_BUFF_LEN];
 	int fd = -1;
-	int cnt = 10;
+	int cnt;
 	int ind;
 	int retval;
 
 	memset(dev_scsi->serial, 0, len);
 	dbg(udev, "opening %s\n", devname);
-	while (--cnt) {
-		const struct timespec duration = { 0, 500 * 1000 * 1000 };
+	srand((unsigned int)getpid());
+	for (cnt = 20; cnt > 0; cnt--) {
+		struct timespec duration;
 
 		fd = open(devname, O_RDONLY | O_NONBLOCK);
-		if (fd >= 0)
-			break;
-		info(udev, "%s: cannot open %s: %s\n", dev_scsi->kernel, devname, strerror(errno));
-		if (errno != EBUSY)
+		if (fd >= 0 || errno != EBUSY)
 			break;
+		duration.tv_sec = 0;
+		duration.tv_nsec = (200 * 1000 * 1000) + (rand() % 100 * 1000 * 1000);
 		nanosleep(&duration, NULL);
 	}
 	if (fd < 0)
-- 
1.6.6


0048-cdrom_id-remove-debugging-code.patch:
 cdrom_id.c |    2 --
 1 file changed, 2 deletions(-)

--- NEW FILE 0048-cdrom_id-remove-debugging-code.patch ---
>From 36a07a8c34a4cff5ad2bbb6e0fdfed49e8191661 Mon Sep 17 00:00:00 2001
From: Harald Hoyer <harald at redhat.com>
Date: Wed, 7 Apr 2010 09:23:46 +0200
Subject: [PATCH 48/65] cdrom_id: remove debugging code

---
 extras/cdrom_id/cdrom_id.c |    1 -
 1 files changed, 0 insertions(+), 1 deletions(-)

diff --git a/extras/cdrom_id/cdrom_id.c b/extras/cdrom_id/cdrom_id.c
index e485768..036ef28 100644
--- a/extras/cdrom_id/cdrom_id.c
+++ b/extras/cdrom_id/cdrom_id.c
@@ -126,7 +126,6 @@ static int is_mounted(const char *device)
 	if (fp == NULL)
 		return -ENOSYS;
 	while (fscanf(fp, "%*s %*s %i:%i %*[^\n]", &maj, &min) == 2) {
-		printf("got %u %u\n", maj, min);
 		if (makedev(maj, min) == statbuf.st_rdev) {
 			mounted = 1;
 			break;
-- 
1.6.6


0049-cdrom_id-retry-to-open-the-device-if-EBUSY.patch:
 cdrom_id.c |   19 +++++++++++++++++--
 1 file changed, 17 insertions(+), 2 deletions(-)

--- NEW FILE 0049-cdrom_id-retry-to-open-the-device-if-EBUSY.patch ---
>From cccfffbe04c01be12fb42cb12f3f7aa5e2a22dd4 Mon Sep 17 00:00:00 2001
From: Kay Sievers <kay.sievers at vrfy.org>
Date: Wed, 7 Apr 2010 09:24:25 +0200
Subject: [PATCH 49/65] cdrom_id: retry to open the device, if EBUSY

We might fight about the device with polling processes, or other
users who probe the device. Retry a few times if the other one goes
away in the meantime.

Based on a patch from Harald Hoyer.
---
 extras/cdrom_id/cdrom_id.c |   18 +++++++++++++++++-
 1 files changed, 17 insertions(+), 1 deletions(-)

diff --git a/extras/cdrom_id/cdrom_id.c b/extras/cdrom_id/cdrom_id.c
index 036ef28..7c9f8cc 100644
--- a/extras/cdrom_id/cdrom_id.c
+++ b/extras/cdrom_id/cdrom_id.c
@@ -30,6 +30,7 @@
 #include <fcntl.h>
 #include <errno.h>
 #include <getopt.h>
+#include <time.h>
 #include <scsi/sg.h>
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -591,7 +592,22 @@ int main(int argc, char *argv[])
 		goto exit;
 	}
 
-	fd = open(node, O_RDONLY|O_NONBLOCK|(is_mounted(node) ? 0 : O_EXCL));
+	if (is_mounted(node)) {
+		fd = open(node, O_RDONLY|O_NONBLOCK);
+	} else {
+		int cnt;
+		struct timespec duration;
+
+		srand((unsigned int)getpid());
+		for (cnt = 40; cnt > 0; cnt--) {
+			fd = open(node, O_RDONLY|O_NONBLOCK|O_EXCL);
+			if (fd >= 0 || errno != EBUSY)
+				break;
+			duration.tv_sec = 0;
+			duration.tv_nsec = (100 * 1000 * 1000) + (rand() % 100 * 1000 * 1000);
+			nanosleep(&duration, NULL);
+		}
+	}
 	if (fd < 0) {
 		info(udev, "unable to open '%s'\n", node);
 		fprintf(stderr, "unable to open '%s'\n", node);
-- 
1.6.6


0050-cdrom_id-check-mount-state-in-retry-loop.patch:
 cdrom_id.c |   23 +++++++++--------------
 1 file changed, 9 insertions(+), 14 deletions(-)

--- NEW FILE 0050-cdrom_id-check-mount-state-in-retry-loop.patch ---
>From d45c8c8b01c99180f15e24b22f7cf81eaf3cdd1b Mon Sep 17 00:00:00 2001
From: Kay Sievers <kay.sievers at vrfy.org>
Date: Wed, 7 Apr 2010 11:32:22 +0200
Subject: [PATCH 50/65] cdrom_id: check mount state in retry loop

Based on a patch from Harald Hoyer.
---
 extras/cdrom_id/cdrom_id.c |   22 +++++++++-------------
 1 files changed, 9 insertions(+), 13 deletions(-)

diff --git a/extras/cdrom_id/cdrom_id.c b/extras/cdrom_id/cdrom_id.c
index 7c9f8cc..894a890 100644
--- a/extras/cdrom_id/cdrom_id.c
+++ b/extras/cdrom_id/cdrom_id.c
@@ -547,6 +547,7 @@ int main(int argc, char *argv[])
 	const char *node = NULL;
 	int export = 0;
 	int fd = -1;
+	int cnt;
 	int rc = 0;
 
 	udev = udev_new();
@@ -592,21 +593,16 @@ int main(int argc, char *argv[])
 		goto exit;
 	}
 
-	if (is_mounted(node)) {
-		fd = open(node, O_RDONLY|O_NONBLOCK);
-	} else {
-		int cnt;
+	srand((unsigned int)getpid());
+	for (cnt = 20; cnt > 0; cnt--) {
 		struct timespec duration;
 
-		srand((unsigned int)getpid());
-		for (cnt = 40; cnt > 0; cnt--) {
-			fd = open(node, O_RDONLY|O_NONBLOCK|O_EXCL);
-			if (fd >= 0 || errno != EBUSY)
-				break;
-			duration.tv_sec = 0;
-			duration.tv_nsec = (100 * 1000 * 1000) + (rand() % 100 * 1000 * 1000);
-			nanosleep(&duration, NULL);
-		}
+		fd = open(node, O_RDONLY|O_NONBLOCK|(is_mounted(node) ? 0 : O_EXCL));
+		if (fd >= 0 || errno != EBUSY)
+			break;
+		duration.tv_sec = 0;
+		duration.tv_nsec = (100 * 1000 * 1000) + (rand() % 100 * 1000 * 1000);
+		nanosleep(&duration, NULL);
 	}
 	if (fd < 0) {
 		info(udev, "unable to open '%s'\n", node);
-- 
1.6.6


0051-cdrom_id-always-set-ID_CDROM-regardless-if-we-can-ru.patch:
 60-cdrom_id.rules |   13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

--- NEW FILE 0051-cdrom_id-always-set-ID_CDROM-regardless-if-we-can-ru.patch ---
>From 5c5ebde711c4560ae0560e87c33fe477b5add354 Mon Sep 17 00:00:00 2001
From: Kay Sievers <kay.sievers at vrfy.org>
Date: Mon, 12 Apr 2010 01:12:23 +0200
Subject: [PATCH 51/65] cdrom_id: always set ID_CDROM regardless if we can run cdrom_id

---
 extras/cdrom_id/60-cdrom_id.rules |   12 +++++++++---
 1 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/extras/cdrom_id/60-cdrom_id.rules b/extras/cdrom_id/60-cdrom_id.rules
index 132a680..811c4aa 100644
--- a/extras/cdrom_id/60-cdrom_id.rules
+++ b/extras/cdrom_id/60-cdrom_id.rules
@@ -1,5 +1,11 @@
 # do not edit this file, it will be overwritten on update
 
-# import optical drive properties
-ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", \
-  KERNEL=="sr[0-9]*|xvd*", IMPORT{program}="cdrom_id --export $tempnode"
+ACTION!="add|change", GOTO="cdrom_end"
+SUBSYSTEM!="block", GOTO="cdrom_end"
+KERNEL!="sr[0-9]*|xvd*", GOTO="cdrom_end"
+ENV{DEVTYPE}!="disk", GOTO="cdrom_end"
+
+ENV{ID_CDROM}="1"
+IMPORT{program}="cdrom_id --export $tempnode"
+
+LABEL="cdrom_end"
-- 
1.6.6


0052-rules-delete-outdated-packagees-rules.patch:
 b/rules/suse/64-device-mapper.rules   |    3 --
 rules/packages/40-infiniband.rules    |    9 --------
 rules/packages/40-isdn.rules          |    4 ---
 rules/packages/40-zaptel.rules        |    7 ------
 rules/packages/64-device-mapper.rules |    4 ---
 rules/packages/64-md-raid.rules       |   36 ----------------------------------
 6 files changed, 63 deletions(-)

--- NEW FILE 0052-rules-delete-outdated-packagees-rules.patch ---
>From a971fb4d58aee946e151b315453fdd1b18331402 Mon Sep 17 00:00:00 2001
From: Kay Sievers <kay.sievers at vrfy.org>
Date: Mon, 12 Apr 2010 10:45:27 +0200
Subject: [PATCH 52/65] rules: delete outdated packagees rules

---
 rules/packages/40-infiniband.rules    |    9 --------
 rules/packages/40-isdn.rules          |    4 ---
 rules/packages/40-zaptel.rules        |    7 ------
 rules/packages/64-device-mapper.rules |    4 ---
 rules/packages/64-md-raid.rules       |   36 ---------------------------------
 rules/suse/64-device-mapper.rules     |    2 -
 6 files changed, 0 insertions(+), 62 deletions(-)
 delete mode 100644 rules/packages/40-infiniband.rules
 delete mode 100644 rules/packages/40-isdn.rules
 delete mode 100644 rules/packages/40-zaptel.rules
 delete mode 100644 rules/packages/64-device-mapper.rules
 delete mode 100644 rules/packages/64-md-raid.rules

diff --git a/rules/packages/40-infiniband.rules b/rules/packages/40-infiniband.rules
deleted file mode 100644
index e2e4748..0000000
--- a/rules/packages/40-infiniband.rules
+++ /dev/null
@@ -1,9 +0,0 @@
-# do not edit this file, it will be overwritten on update
-
-KERNEL=="umad[0-9]*", NAME="infiniband/%k"
-KERNEL=="issm[0-9]*", NAME="infiniband/%k"
-KERNEL=="ucm[0-9]*", NAME="infiniband/%k", MODE="0666"
-KERNEL=="uverbs[0-9]*", NAME="infiniband/%k", MODE="0666"
-KERNEL=="uat", NAME="infiniband/%k", MODE="0666"
-KERNEL=="ucma", NAME="infiniband/%k", MODE="0666"
-KERNEL=="rdma_cm", NAME="infiniband/%k", MODE="0666"
diff --git a/rules/packages/40-isdn.rules b/rules/packages/40-isdn.rules
deleted file mode 100644
index 1a31cb6..0000000
--- a/rules/packages/40-isdn.rules
+++ /dev/null
@@ -1,4 +0,0 @@
-# do not edit this file, it will be overwritten on update
-
-SUBSYSTEM=="capi", KERNEL=="capi", NAME="capi20", GROUP="dialout"
-SUBSYSTEM=="tty", KERNEL=="capi[0-9]*", NAME="capi/%n"
diff --git a/rules/packages/40-zaptel.rules b/rules/packages/40-zaptel.rules
deleted file mode 100644
index cbd8b8a..0000000
--- a/rules/packages/40-zaptel.rules
+++ /dev/null
@@ -1,7 +0,0 @@
-# do not edit this file, it will be overwritten on update
-
-KERNEL=="zap[0-9]*",		NAME="zap/%n", GROUP="dialout"
-KERNEL=="zapchannel",		NAME="zap/channel", GROUP="dialout"
-KERNEL=="zapctl",		NAME="zap/ctl", GROUP="dialout"
-KERNEL=="zappseudo",		NAME="zap/pseudo", GROUP="dialout"
-KERNEL=="zaptimer",		NAME="zap/timer", GROUP="dialout"
diff --git a/rules/packages/64-device-mapper.rules b/rules/packages/64-device-mapper.rules
deleted file mode 100644
index 8154ef3..0000000
--- a/rules/packages/64-device-mapper.rules
+++ /dev/null
@@ -1,4 +0,0 @@
-# do not edit this file, it will be overwritten on update
-
-KERNEL=="device-mapper",	NAME="mapper/control"
-
diff --git a/rules/packages/64-md-raid.rules b/rules/packages/64-md-raid.rules
deleted file mode 100644
index 6ba93b6..0000000
--- a/rules/packages/64-md-raid.rules
+++ /dev/null
@@ -1,36 +0,0 @@
-# do not edit this file, it will be overwritten on update
-
-SUBSYSTEM!="block", GOTO="md_end"
-ACTION!="add|change", GOTO="md_end"
-
-# import data from a raid member and activate it
-#ENV{ID_FS_TYPE}=="linux_raid_member", IMPORT{program}="/sbin/mdadm --examine --export $tempnode", RUN+="/sbin/mdadm --incremental $env{DEVNAME}"
-# import data from a raid set
-KERNEL!="md*", GOTO="md_end"
-
-# partitions have no md/{array_state,metadata_version}
-ENV{DEVTYPE}=="partition", GOTO="md_ignore_state"
-
-# container devices have a metadata version of e.g. 'external:ddf' and
-# never leave state 'inactive'
-ATTR{md/metadata_version}=="external:[A-Za-z]*", ATTR{md/array_state}=="inactive", GOTO="md_ignore_state"
-TEST!="md/array_state", GOTO="md_end"
-ATTR{md/array_state}=="|clear|inactive", GOTO="md_end"
-LABEL="md_ignore_state"
-
-IMPORT{program}="/sbin/mdadm --detail --export $tempnode"
-ENV{DEVTYPE}=="disk", ENV{MD_NAME}=="?*", SYMLINK+="disk/by-id/md-name-$env{MD_NAME}", OPTIONS+="string_escape=replace"
-ENV{DEVTYPE}=="disk", ENV{MD_UUID}=="?*", SYMLINK+="disk/by-id/md-uuid-$env{MD_UUID}"
-ENV{DEVTYPE}=="disk", ENV{MD_DEVNAME}=="?*", SYMLINK+="md/$env{MD_DEVNAME}"
-ENV{DEVTYPE}=="partition", ENV{MD_NAME}=="?*", SYMLINK+="disk/by-id/md-name-$env{MD_NAME}-part%n", OPTIONS+="string_escape=replace"
-ENV{DEVTYPE}=="partition", ENV{MD_UUID}=="?*", SYMLINK+="disk/by-id/md-uuid-$env{MD_UUID}-part%n"
-ENV{DEVTYPE}=="partition", ENV{MD_DEVNAME}=="*[^0-9]", SYMLINK+="md/$env{MD_DEVNAME}%n"
-ENV{DEVTYPE}=="partition", ENV{MD_DEVNAME}=="*[0-9]", SYMLINK+="md/$env{MD_DEVNAME}p%n"
-
-IMPORT{program}="/sbin/blkid -o udev -p $tempnode"
-OPTIONS+="link_priority=100"
-OPTIONS+="watch"
-ENV{ID_FS_USAGE}=="filesystem|other|crypto", ENV{ID_FS_UUID_ENC}=="?*", SYMLINK+="disk/by-uuid/$env{ID_FS_UUID_ENC}"
-ENV{ID_FS_USAGE}=="filesystem|other", ENV{ID_FS_LABEL_ENC}=="?*", SYMLINK+="disk/by-label/$env{ID_FS_LABEL_ENC}"
-
-LABEL="md_end"
diff --git a/rules/suse/64-device-mapper.rules b/rules/suse/64-device-mapper.rules
index 36ac756..34e3307 100644
--- a/rules/suse/64-device-mapper.rules
+++ b/rules/suse/64-device-mapper.rules
@@ -1,7 +1,5 @@
 # do not edit this file, it will be overwritten on update
 
-KERNEL=="device-mapper", NAME="mapper/control"
-
 KERNEL!="dm-*", GOTO="device_mapper_end"
 ACTION!="add|change", GOTO="device_mapper_end"
 
-- 
1.6.6


0053-rules-we-do-not-have-static-devices-which-are-rename.patch:
 50-udev-default.rules |    2 --
 1 file changed, 2 deletions(-)

--- NEW FILE 0053-rules-we-do-not-have-static-devices-which-are-rename.patch ---
>From 421fbc71c7e951dac900eabd445dfe577158b9c3 Mon Sep 17 00:00:00 2001
From: Kay Sievers <kay.sievers at vrfy.org>
Date: Mon, 12 Apr 2010 10:50:59 +0200
Subject: [PATCH 53/65] rules: we do not have static devices which are renamed

---
 rules/rules.d/50-udev-default.rules |    1 -
 1 files changed, 0 insertions(+), 1 deletions(-)

diff --git a/rules/rules.d/50-udev-default.rules b/rules/rules.d/50-udev-default.rules
index e8116a3..a5f0823 100644
--- a/rules/rules.d/50-udev-default.rules
+++ b/rules/rules.d/50-udev-default.rules
@@ -115,4 +115,3 @@ KERNEL=="rrom[0-9]*",		MODE="0400"
 
 # do not delete static device nodes
 ACTION=="remove", NAME=="", TEST=="/lib/udev/devices/%k", OPTIONS+="ignore_remove"
-ACTION=="remove", NAME=="?*", TEST=="/lib/udev/devices/$name", OPTIONS+="ignore_remove"
-- 
1.6.6


0054-unify-cleanup-event-handling.patch:
 udev-event.c |  231 ++++++++++++++++++++++++-----------------------------------
 udev-node.c  |   24 +++---
 udev.h       |    4 -
 3 files changed, 111 insertions(+), 148 deletions(-)

--- NEW FILE 0054-unify-cleanup-event-handling.patch ---
>From 0ec5b5e1429307fa7573aaa9b8f25fbd9b1d71d5 Mon Sep 17 00:00:00 2001
From: Kay Sievers <kay.sievers at vrfy.org>
Date: Mon, 12 Apr 2010 15:51:16 +0200
Subject: [PATCH 54/65] unify/cleanup event handling

---
 udev/udev-event.c |  231 ++++++++++++++++++++++-------------------------------
 udev/udev-node.c  |   24 ++++--
 udev/udev.h       |    3 +-
 3 files changed, 111 insertions(+), 147 deletions(-)

diff --git a/udev/udev-event.c b/udev/udev-event.c
index 986c119..c3a8281 100644
--- a/udev/udev-event.c
+++ b/udev/udev-event.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2003-2009 Kay Sievers <kay.sievers at vrfy.org>
+ * Copyright (C) 2003-2010 Kay Sievers <kay.sievers at vrfy.org>
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -541,167 +541,124 @@ int udev_event_execute_rules(struct udev_event *event, struct udev_rules *rules)
 		     udev_device_get_subsystem(dev), udev_device_get_sysname(dev));
 	}
 
-	/* add device node */
-	if (major(udev_device_get_devnum(dev)) != 0 &&
-	    (strcmp(udev_device_get_action(dev), "add") == 0 || strcmp(udev_device_get_action(dev), "change") == 0)) {
-		char filename[UTIL_PATH_SIZE];
-		struct udev_device *dev_old;
-		int delete_kdevnode = 0;
-
-		dbg(event->udev, "device node add '%s'\n", udev_device_get_devpath(dev));
-
-		/* read old database entry */
-		dev_old = udev_device_new_from_syspath(event->udev, udev_device_get_syspath(dev));
-		if (dev_old != NULL) {
-			udev_device_read_db(dev_old);
-			udev_device_set_info_loaded(dev_old);
+	if (strcmp(udev_device_get_action(dev), "remove") == 0) {
+		udev_device_read_db(dev);
+		udev_device_set_info_loaded(dev);
+		udev_device_delete_db(dev);
 
-			/* disable watch during event processing */
-			udev_watch_end(event->udev, dev_old);
-		}
+		if (major(udev_device_get_devnum(dev)) != 0)
+			udev_watch_end(event->udev, dev);
 
 		udev_rules_apply_to_event(rules, event);
-		if (event->tmp_node != NULL) {
-			dbg(event->udev, "cleanup temporary device node\n");
-			util_unlink_secure(event->udev, event->tmp_node);
-			free(event->tmp_node);
-			event->tmp_node = NULL;
-		}
-
-		if (event->name != NULL && event->name[0] == '\0') {
-			info(event->udev, "device node creation suppressed\n");
-			delete_kdevnode = 1;
-			goto exit_add;
-		}
-
-		/* if rule given name disagrees with kernel node name, delete kernel node */
-		if (event->name != NULL && udev_device_get_knodename(dev) != NULL) {
-			if (strcmp(event->name, udev_device_get_knodename(dev)) != 0)
-				delete_kdevnode = 1;
-		}
-
-		/* no rule, use kernel provided name */
-		if (event->name == NULL) {
-			if (udev_device_get_knodename(dev) != NULL) {
-				event->name = strdup(udev_device_get_knodename(dev));
-				info(event->udev, "no node name set, will use kernel supplied name '%s'\n", event->name);
-			} else {
-				event->name = strdup(udev_device_get_sysname(event->dev));
-				info(event->udev, "no node name set, will use device name '%s'\n", event->name);
-			}
-		}
 
-		/* something went wrong */
-		if (event->name == NULL) {
-			err(event->udev, "no node name for '%s'\n", udev_device_get_sysname(event->dev));
-			goto exit_add;
-		}
-
-		/* set device node name */
-		util_strscpyl(filename, sizeof(filename), udev_get_dev_path(event->udev), "/", event->name, NULL);
-		udev_device_set_devnode(dev, filename);
-
-		/* write current database entry */
-		udev_device_update_db(dev);
+		if (major(udev_device_get_devnum(dev)) != 0)
+			err = udev_node_remove(dev);
+	} else {
+		event->dev_db = udev_device_new_from_syspath(event->udev, udev_device_get_syspath(dev));
+		if (event->dev_db != NULL) {
+			udev_device_read_db(event->dev_db);
+			udev_device_set_info_loaded(event->dev_db);
 
-		/* remove/update possible left-over symlinks from old database entry */
-		if (dev_old != NULL)
-			udev_node_update_old_links(dev, dev_old);
-
-		/* create new node and symlinks */
-		err = udev_node_add(dev, event->mode, event->uid, event->gid);
-exit_add:
-		if (delete_kdevnode && udev_device_get_knodename(dev) != NULL) {
-			struct stat stats;
-
-			util_strscpyl(filename, sizeof(filename),
-				      udev_get_dev_path(event->udev), "/", udev_device_get_knodename(dev), NULL);
-			if (stat(filename, &stats) == 0 && stats.st_rdev == udev_device_get_devnum(dev)) {
-				unlink(filename);
-				util_delete_path(event->udev, filename);
-				info(event->udev, "removed kernel created node '%s'\n", filename);
-			}
+			/* disable watch during event processing */
+			if (major(udev_device_get_devnum(dev)) != 0)
+				udev_watch_end(event->udev, event->dev_db);
 		}
-		udev_device_unref(dev_old);
-		goto exit;
-	}
-
-	/* add netif */
-	if (strcmp(udev_device_get_subsystem(dev), "net") == 0 && strcmp(udev_device_get_action(dev), "add") == 0) {
-		dbg(event->udev, "netif add '%s'\n", udev_device_get_devpath(dev));
-		udev_device_delete_db(dev);
 
 		udev_rules_apply_to_event(rules, event);
-		if (event->name == NULL)
-			goto exit;
 
-		/* look if we want to change the name of the netif */
-		if (strcmp(event->name, udev_device_get_sysname(dev)) != 0) {
+		/* rename a new network interface, if needed */
+		if (strcmp(udev_device_get_subsystem(dev), "net") == 0 && strcmp(udev_device_get_action(dev), "add") == 0 &&
+		    event->name != NULL && strcmp(event->name, udev_device_get_sysname(dev)) != 0) {
 			char syspath[UTIL_PATH_SIZE];
 			char *pos;
 
 			err = rename_netif(event);
-			if (err != 0)
-				goto exit;
-			info(event->udev, "renamed netif to '%s'\n", event->name);
-
-			/* remember old name */
-			udev_device_add_property(dev, "INTERFACE_OLD", udev_device_get_sysname(dev));
-
-			/* now change the devpath, because the kernel device name has changed */
-			util_strscpy(syspath, sizeof(syspath), udev_device_get_syspath(dev));
-			pos = strrchr(syspath, '/');
-			if (pos != NULL) {
-				pos++;
-				util_strscpy(pos, sizeof(syspath) - (pos - syspath), event->name);
-				udev_device_set_syspath(event->dev, syspath);
-				udev_device_add_property(dev, "INTERFACE", udev_device_get_sysname(dev));
-				info(event->udev, "changed devpath to '%s'\n", udev_device_get_devpath(dev));
+			if (err == 0) {
+				info(event->udev, "renamed netif to '%s'\n", event->name);
+
+				/* delete stale db file */
+				udev_device_delete_db(dev);
+
+				/* remember old name */
+				udev_device_add_property(dev, "INTERFACE_OLD", udev_device_get_sysname(dev));
+
+				/* now change the devpath, because the kernel device name has changed */
+				util_strscpy(syspath, sizeof(syspath), udev_device_get_syspath(dev));
+				pos = strrchr(syspath, '/');
+				if (pos != NULL) {
+					pos++;
+					util_strscpy(pos, sizeof(syspath) - (pos - syspath), event->name);
+					udev_device_set_syspath(event->dev, syspath);
+					udev_device_add_property(dev, "INTERFACE", udev_device_get_sysname(dev));
+					info(event->udev, "changed devpath to '%s'\n", udev_device_get_devpath(dev));
+				}
 			}
 		}
-		udev_device_update_db(dev);
-		goto exit;
-	}
 
-	/* remove device node */
-	if (major(udev_device_get_devnum(dev)) != 0 && strcmp(udev_device_get_action(dev), "remove") == 0) {
-		/* import database entry and delete it */
-		udev_device_read_db(dev);
-		udev_device_set_info_loaded(dev);
-		udev_device_delete_db(dev);
+		if (major(udev_device_get_devnum(dev)) != 0) {
+			char filename[UTIL_PATH_SIZE];
 
-		/* remove watch */
-		udev_watch_end(event->udev, dev);
+			if (event->tmp_node != NULL) {
+				info(event->udev, "cleanup temporary device node\n");
+				util_unlink_secure(event->udev, event->tmp_node);
+				free(event->tmp_node);
+				event->tmp_node = NULL;
+			}
 
-		if (udev_device_get_devnode(dev) == NULL) {
-			char devnode[UTIL_PATH_SIZE];
+			/* no rule, use kernel provided name */
+			if (event->name == NULL) {
+				if (udev_device_get_knodename(dev) != NULL) {
+					event->name = strdup(udev_device_get_knodename(dev));
+					info(event->udev, "no node name set, will use kernel supplied name '%s'\n", event->name);
+				} else {
+					event->name = strdup(udev_device_get_sysname(event->dev));
+					info(event->udev, "no node name set, will use device name '%s'\n", event->name);
+				}
+			}
+
+			if (event->name == NULL) {
+				/* things went wrong */
+				udev_device_delete_db(dev);
+				udev_device_unref(event->dev_db);
+				err = -ENOMEM;
+				goto out;
+			}
 
-			info(event->udev, "'%s' not found in database, using kernel name '%s'\n",
-			     udev_device_get_syspath(dev), udev_device_get_knodename(dev));
-			util_strscpyl(devnode, sizeof(devnode),
-				      udev_get_dev_path(event->udev), "/", udev_device_get_knodename(dev), NULL);
-			udev_device_set_devnode(dev, devnode);
+			/* set device node name */
+			util_strscpyl(filename, sizeof(filename), udev_get_dev_path(event->udev), "/", event->name, NULL);
+			udev_device_set_devnode(dev, filename);
 		}
 
-		udev_rules_apply_to_event(rules, event);
+		udev_device_update_db(dev);
 
-		if (udev_device_get_ignore_remove(dev)) {
-			info(event->udev, "ignore_remove for '%s'\n", udev_device_get_devnode(dev));
-			goto exit;
+		if (major(udev_device_get_devnum(dev)) != 0) {
+			/* remove/update possible left-over symlinks from old database entry */
+			if (event->dev_db != NULL)
+				udev_node_update_old_links(dev, event->dev_db);
+
+			if (event->name[0] != '\0')
+				err = udev_node_add(dev, event->mode, event->uid, event->gid);
+			else
+				info(event->udev, "device node creation suppressed\n");
+
+			/* remove kernel-created node, if needed */
+			if (udev_device_get_knodename(dev) != NULL && strcmp(event->name, udev_device_get_knodename(dev)) != 0) {
+				struct stat stats;
+				char filename[UTIL_PATH_SIZE];
+
+				info(event->udev, "remove kernel created node '%s'\n", udev_device_get_knodename(dev));
+				util_strscpyl(filename, sizeof(filename), udev_get_dev_path(event->udev), "/", udev_device_get_knodename(dev), NULL);
+				if (stat(filename, &stats) == 0 && stats.st_rdev == udev_device_get_devnum(dev)) {
+					util_unlink_secure(event->udev, filename);
+					util_delete_path(event->udev, filename);
+				}
+			}
 		}
 
-		err = udev_node_remove(dev);
-		goto exit;
+		udev_device_unref(event->dev_db);
+		event->dev_db = NULL;
 	}
-
-	/* default devices */
-	udev_rules_apply_to_event(rules, event);
-
-	if (strcmp(udev_device_get_action(dev), "remove") != 0)
-		udev_device_update_db(dev);
-	else
-		udev_device_delete_db(dev);
-exit:
+out:
 	return err;
 }
 
diff --git a/udev/udev-node.c b/udev/udev-node.c
index 3aee15b..3b4eb5f 100644
--- a/udev/udev-node.c
+++ b/udev/udev-node.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2003-2009 Kay Sievers <kay.sievers at vrfy.org>
+ * Copyright (C) 2003-2010 Kay Sievers <kay.sievers at vrfy.org>
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -416,7 +416,6 @@ int udev_node_remove(struct udev_device *dev)
 	const char *devnode;
 	char partitionname[UTIL_PATH_SIZE];
 	struct stat stats;
-	struct udev_device *dev_check;
 	int err = 0;
 	int num;
 
@@ -436,15 +435,21 @@ int udev_node_remove(struct udev_device *dev)
 		return -1;
 	}
 
-	dev_check = udev_device_new_from_syspath(udev, udev_device_get_syspath(dev));
-	if (dev_check != NULL && stats.st_rdev == udev_device_get_devnum(dev_check)) {
-		/* do not remove device node if the same sys-device is re-created in the meantime */
-		info(udev, "keeping device node of existing device'%s'\n", devnode);
+	if (udev_device_get_ignore_remove(dev)) {
+		info(udev, "ignore_remove for '%s'\n", udev_device_get_devnode(dev));
 	} else {
-		info(udev, "removing device node '%s'\n", devnode);
-		err = util_unlink_secure(udev, devnode);
+		struct udev_device *dev_check;
+
+		dev_check = udev_device_new_from_syspath(udev, udev_device_get_syspath(dev));
+		if (dev_check != NULL && stats.st_rdev == udev_device_get_devnum(dev_check)) {
+			/* do not remove device node if the same sys-device is re-created in the meantime */
+			info(udev, "keeping device node of existing device'%s'\n", devnode);
+		} else {
+			info(udev, "removing device node '%s'\n", devnode);
+			err = util_unlink_secure(udev, devnode);
+		}
+		udev_device_unref(dev_check);
 	}
-	udev_device_unref(dev_check);
 
 	num = udev_device_get_num_fake_partitions(dev);
 	if (num > 0) {
@@ -459,6 +464,7 @@ int udev_node_remove(struct udev_device *dev)
 			util_unlink_secure(udev, partitionname);
 		}
 	}
+
 	util_delete_path(udev, devnode);
 	return err;
 }
diff --git a/udev/udev.h b/udev/udev.h
index 555eae6..2b9bbec 100644
--- a/udev/udev.h
+++ b/udev/udev.h
@@ -1,6 +1,6 @@
 /*
  * Copyright (C) 2003 Greg Kroah-Hartman <greg at kroah.com>
- * Copyright (C) 2003-2008 Kay Sievers <kay.sievers at vrfy.org>
+ * Copyright (C) 2003-2010 Kay Sievers <kay.sievers at vrfy.org>
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -35,6 +35,7 @@ struct udev_event {
 	struct udev *udev;
 	struct udev_device *dev;
 	struct udev_device *dev_parent;
+	struct udev_device *dev_db;
 	char *name;
 	char *tmp_node;
 	char *program_result;
-- 
1.6.6


0055-allow-IMPORT-db-KEY.patch:
 udev-rules.c |   26 +++++++++++++++++++++++++-
 udev.xml     |    9 ++++++++-
 2 files changed, 33 insertions(+), 2 deletions(-)

--- NEW FILE 0055-allow-IMPORT-db-KEY.patch ---
>From 5539f624e18e948e4e3a1f0d9f5d25de9c8fd8b8 Mon Sep 17 00:00:00 2001
From: Kay Sievers <kay.sievers at vrfy.org>
Date: Mon, 12 Apr 2010 15:58:05 +0200
Subject: [PATCH 55/65] allow IMPORT{db}="KEY"

---
 udev/udev-rules.c |   26 +++++++++++++++++++++++++-
 udev/udev.xml     |    8 ++++++++
 2 files changed, 33 insertions(+), 1 deletions(-)

diff --git a/udev/udev-rules.c b/udev/udev-rules.c
index 60daad5..c4a2724 100644
--- a/udev/udev-rules.c
+++ b/udev/udev-rules.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2003-2009 Kay Sievers <kay.sievers at vrfy.org>
+ * Copyright (C) 2003-2010 Kay Sievers <kay.sievers at vrfy.org>
  * Copyright (C) 2008 Alan Jenkins <alan-jenkins at tuffmail.co.uk>
  *
  * This program is free software: you can redistribute it and/or modify
@@ -141,6 +141,7 @@ enum token_type {
 	TK_M_PROGRAM,			/* val */
 	TK_M_IMPORT_FILE,		/* val */
 	TK_M_IMPORT_PROG,		/* val */
+	TK_M_IMPORT_DB,			/* val */
 	TK_M_IMPORT_PARENT,		/* val */
 	TK_M_RESULT,			/* val */
 	TK_M_MAX,
@@ -271,6 +272,7 @@ static const char *token_str(enum token_type type)
 		[TK_M_PROGRAM] =		"M PROGRAM",
 		[TK_M_IMPORT_FILE] =		"M IMPORT_FILE",
 		[TK_M_IMPORT_PROG] =		"M IMPORT_PROG",
+		[TK_M_IMPORT_DB] =		"M IMPORT_DB",
 		[TK_M_IMPORT_PARENT] =		"M IMPORT_PARENT",
 		[TK_M_RESULT] =			"M RESULT",
 		[TK_M_MAX] =			"M MAX",
@@ -337,6 +339,7 @@ static void dump_token(struct udev_rules *rules, struct token *token)
 	case TK_M_PROGRAM:
 	case TK_M_IMPORT_FILE:
 	case TK_M_IMPORT_PROG:
+	case TK_M_IMPORT_DB:
 	case TK_M_IMPORT_PARENT:
 	case TK_M_RESULT:
 	case TK_A_NAME:
@@ -1001,6 +1004,7 @@ static int rule_add_key(struct rule_tmp *rule_tmp, enum token_type type,
 	case TK_M_PROGRAM:
 	case TK_M_IMPORT_FILE:
 	case TK_M_IMPORT_PROG:
+	case TK_M_IMPORT_DB:
 	case TK_M_IMPORT_PARENT:
 	case TK_M_RESULT:
 	case TK_A_OWNER:
@@ -1379,6 +1383,9 @@ static int add_rule(struct udev_rules *rules, char *line,
 			} else if (attr != NULL && strstr(attr, "file")) {
 				dbg(rules->udev, "IMPORT will be included as file\n");
 				rule_add_key(&rule_tmp, TK_M_IMPORT_FILE, op, value, NULL);
+			} else if (attr != NULL && strstr(attr, "db")) {
+				dbg(rules->udev, "IMPORT will include db values\n");
+				rule_add_key(&rule_tmp, TK_M_IMPORT_DB, op, value, NULL);
 			} else if (attr != NULL && strstr(attr, "parent")) {
 				dbg(rules->udev, "IMPORT will include the parent values\n");
 				rule_add_key(&rule_tmp, TK_M_IMPORT_PARENT, op, value, NULL);
@@ -2288,6 +2295,23 @@ int udev_rules_apply_to_event(struct udev_rules *rules, struct udev_event *event
 						goto nomatch;
 				break;
 			}
+		case TK_M_IMPORT_DB:
+			{
+				const char *key = &rules->buf[cur->key.value_off];
+				const char *value;
+
+				value = udev_device_get_property_value(event->dev_db, key);
+				if (value != NULL) {
+					struct udev_list_entry *entry;
+
+					entry = udev_device_add_property(event->dev, key, value);
+					udev_list_entry_set_flags(entry, 1);
+				} else {
+					if (cur->key.op != OP_NOMATCH)
+						goto nomatch;
+				}
+				break;
+			}
 		case TK_M_IMPORT_PARENT:
 			{
 				char import[UTIL_PATH_SIZE];
diff --git a/udev/udev.xml b/udev/udev.xml
index b6c5933..175cdbe 100644
--- a/udev/udev.xml
+++ b/udev/udev.xml
@@ -399,6 +399,14 @@
                     </listitem>
                   </varlistentry>
                   <varlistentry>
+                    <term><option>db</option></term>
+                    <listitem>
+                      <para>Import a single property specified as the assigned value from the
+                      current device database. This works only if the database is already populated
+                      by an earlier event.</para>
+                    </listitem>
+                  </varlistentry>
+                  <varlistentry>
                     <term><option>parent</option></term>
                     <listitem>
                       <para>Import the stored keys from the parent device by reading
-- 
1.6.6


0056-usb-db-remove-double.patch:
 usb-db.c |    5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)

--- NEW FILE 0056-usb-db-remove-double.patch ---
>From 86dc9133f88e8690aa89ccb5a240ff915b1fb69f Mon Sep 17 00:00:00 2001
From: Kay Sievers <kay.sievers at vrfy.org>
Date: Mon, 12 Apr 2010 16:10:05 +0200
Subject: [PATCH 56/65] usb-db: remove double '/'

---
 extras/usb-db/usb-db.c |    4 +---
 1 files changed, 1 insertions(+), 3 deletions(-)

diff --git a/extras/usb-db/usb-db.c b/extras/usb-db/usb-db.c
index db1f843..fe563c2 100644
--- a/extras/usb-db/usb-db.c
+++ b/extras/usb-db/usb-db.c
@@ -1,5 +1,3 @@
-/*-*- linux-c -*-*/
-
 /*
  * Copyright (C) 2009 Lennart Poettering <lennart at poettering.net>
  *
@@ -223,7 +221,7 @@ int main(int argc, char*argv[]) {
 	if (!(udev = udev_new()))
 		goto finish;
 
-	if (asprintf(&sp, "%s/%s", udev_get_sys_path(udev), argv[1]) < 0) {
+	if (asprintf(&sp, "%s%s", udev_get_sys_path(udev), argv[1]) < 0) {
 		fprintf(stderr, "Failed to allocate sysfs path.\n");
 		goto finish;
 	}
-- 
1.6.6


0057-replace-add-change-with-remove.patch:
 extras/cdrom_id/60-cdrom_id.rules              |    2 +-
 extras/edd_id/61-persistent-storage-edd.rules  |    2 +-
 extras/fstab_import/79-fstab_import.rules      |    2 +-
 extras/hid2hci/70-hid2hci.rules                |    2 +-
 extras/keymap/95-keyboard-force-release.rules  |    2 +-
 extras/keymap/95-keymap.rules                  |    2 +-
 extras/udev-acl/70-acl.rules                   |    2 +-
 extras/udev-acl/udev-acl.c                     |    6 ++----
 extras/v4l_id/60-persistent-v4l.rules          |    2 +-
 rules/rules.d/60-persistent-alsa.rules         |    2 +-
 rules/rules.d/60-persistent-input.rules        |    2 +-
 rules/rules.d/60-persistent-serial.rules       |    2 +-
 rules/rules.d/60-persistent-storage-tape.rules |    2 +-
 rules/rules.d/60-persistent-storage.rules      |    2 +-
 rules/rules.d/75-net-description.rules         |    2 +-
 rules/rules.d/75-tty-description.rules         |    2 +-
 rules/suse/64-device-mapper.rules              |    2 +-
 udev/udev-rules.c                              |    5 ++---
 udev/udevd.c                                   |    3 +--
 19 files changed, 21 insertions(+), 25 deletions(-)

--- NEW FILE 0057-replace-add-change-with-remove.patch ---
>From 4b06c409350d26af5e6ace0f368d01b80d75438e Mon Sep 17 00:00:00 2001
From: Kay Sievers <kay.sievers at vrfy.org>
Date: Mon, 12 Apr 2010 16:52:41 +0200
Subject: [PATCH 57/65] replace "add|change" with "!remove"

---
 extras/cdrom_id/60-cdrom_id.rules              |    2 +-
 extras/edd_id/61-persistent-storage-edd.rules  |    2 +-
 extras/fstab_import/79-fstab_import.rules      |    2 +-
 extras/hid2hci/70-hid2hci.rules                |    2 +-
 extras/keymap/95-keyboard-force-release.rules  |    2 +-
 extras/keymap/95-keymap.rules                  |    2 +-
 extras/udev-acl/70-acl.rules                   |    2 +-
 extras/udev-acl/udev-acl.c                     |    6 ++----
 extras/v4l_id/60-persistent-v4l.rules          |    2 +-
 rules/rules.d/60-persistent-alsa.rules         |    2 +-
 rules/rules.d/60-persistent-input.rules        |    2 +-
 rules/rules.d/60-persistent-serial.rules       |    2 +-
 rules/rules.d/60-persistent-storage-tape.rules |    2 +-
 rules/rules.d/60-persistent-storage.rules      |    2 +-
 rules/rules.d/75-net-description.rules         |    2 +-
 rules/rules.d/75-tty-description.rules         |    2 +-
 rules/suse/64-device-mapper.rules              |    2 +-
 udev/udev-rules.c                              |    5 ++---
 udev/udevd.c                                   |    2 +-
 19 files changed, 21 insertions(+), 24 deletions(-)

diff --git a/extras/cdrom_id/60-cdrom_id.rules b/extras/cdrom_id/60-cdrom_id.rules
index 811c4aa..16b3af9 100644
--- a/extras/cdrom_id/60-cdrom_id.rules
+++ b/extras/cdrom_id/60-cdrom_id.rules
@@ -1,6 +1,6 @@
 # do not edit this file, it will be overwritten on update
 
-ACTION!="add|change", GOTO="cdrom_end"
+ACTION=="remove", GOTO="cdrom_end"
 SUBSYSTEM!="block", GOTO="cdrom_end"
 KERNEL!="sr[0-9]*|xvd*", GOTO="cdrom_end"
 ENV{DEVTYPE}!="disk", GOTO="cdrom_end"
diff --git a/extras/edd_id/61-persistent-storage-edd.rules b/extras/edd_id/61-persistent-storage-edd.rules
index 54ae086..1ab1be3 100644
--- a/extras/edd_id/61-persistent-storage-edd.rules
+++ b/extras/edd_id/61-persistent-storage-edd.rules
@@ -1,6 +1,6 @@
 # do not edit this file, it will be overwritten on update
 
-ACTION!="add|change", GOTO="persistent_storage_edd_end"
+ACTION=="remove", GOTO="persistent_storage_edd_end"
 SUBSYSTEM!="block", GOTO="persistent_storage_edd_end"
 KERNEL!="sd*|hd*|cciss*", GOTO="persistent_storage_edd_end"
 
diff --git a/extras/fstab_import/79-fstab_import.rules b/extras/fstab_import/79-fstab_import.rules
index 2adfe04..2ded7d3 100644
--- a/extras/fstab_import/79-fstab_import.rules
+++ b/extras/fstab_import/79-fstab_import.rules
@@ -1,2 +1,2 @@
-ACTION=="add|change", SUBSYSTEM=="block", ENV{ID_FS_USAGE}=="filesystem|other", IMPORT="fstab_import $name $links mapper/$env{DM_NAME}"
+ACTION!="remove", SUBSYSTEM=="block", ENV{ID_FS_USAGE}=="filesystem|other", IMPORT="fstab_import $name $links mapper/$env{DM_NAME}"
 
diff --git a/extras/hid2hci/70-hid2hci.rules b/extras/hid2hci/70-hid2hci.rules
index 01ff30d..0687c8a 100644
--- a/extras/hid2hci/70-hid2hci.rules
+++ b/extras/hid2hci/70-hid2hci.rules
@@ -1,6 +1,6 @@
 # do not edit this file, it will be overwritten on update
 
-ACTION!="add|change", GOTO="hid2hci_end"
+ACTION=="remove", GOTO="hid2hci_end"
 SUBSYSTEM!="usb", GOTO="hid2hci_end"
 
 # Variety of Dell Bluetooth devices - match on a mouse device that is
diff --git a/extras/keymap/95-keyboard-force-release.rules b/extras/keymap/95-keyboard-force-release.rules
index f0e1ab8..b973614 100644
--- a/extras/keymap/95-keyboard-force-release.rules
+++ b/extras/keymap/95-keyboard-force-release.rules
@@ -11,7 +11,7 @@
 # /lib/udev/keymap -i /dev/input/eventX
 # on a Linux vt to find out.
 
-ACTION!="add|change", GOTO="force_release_end"
+ACTION=="remove", GOTO="force_release_end"
 SUBSYSTEM!="serio", GOTO="force_release_end"
 KERNEL!="serio*", GOTO="force_release_end"
 DRIVER!="atkbd", GOTO="force_release_end"
diff --git a/extras/keymap/95-keymap.rules b/extras/keymap/95-keymap.rules
index dd58453..2f41cb4 100644
--- a/extras/keymap/95-keymap.rules
+++ b/extras/keymap/95-keymap.rules
@@ -5,7 +5,7 @@
 # a file name (in /lib/udev/keymaps), which has to contain scancode/keyname
 # pairs.
 
-ACTION!="add|change", GOTO="keyboard_end"
+ACTION=="remove", GOTO="keyboard_end"
 SUBSYSTEM!="input", GOTO="keyboard_end"
 KERNEL!="event*", GOTO="keyboard_end"
 
diff --git a/extras/udev-acl/70-acl.rules b/extras/udev-acl/70-acl.rules
index fde2656..5b00bf8 100644
--- a/extras/udev-acl/70-acl.rules
+++ b/extras/udev-acl/70-acl.rules
@@ -4,7 +4,7 @@
 # udev-acl of this udev release and may be replaced at any time.
 
 ENV{MAJOR}=="", GOTO="acl_end"
-ACTION!="add|change", GOTO="acl_apply"
+ACTION=="remove", GOTO="acl_apply"
 
 # PTP/MTP protocol devices, cameras, portable media players
 SUBSYSTEM=="usb", ENV{ID_USB_INTERFACES}=="", ENV{DEVTYPE}=="usb_device", IMPORT{program}="usb_id --export %p"
diff --git a/extras/udev-acl/udev-acl.c b/extras/udev-acl/udev-acl.c
index c070fcc..ce51590 100644
--- a/extras/udev-acl/udev-acl.c
+++ b/extras/udev-acl/udev-acl.c
@@ -353,12 +353,10 @@ int main (int argc, char* argv[])
 
 		switch (option) {
 		case 'a':
-			if (strcmp(optarg, "add") == 0 || strcmp(optarg, "change") == 0)
-				action = ACTION_ADD;
-			else if (strcmp(optarg, "remove") == 0)
+			if (strcmp(optarg, "remove") == 0)
 				action = ACTION_REMOVE;
 			else
-				goto out;
+				action = ACTION_ADD;
 			break;
 		case 'D':
 			device = optarg;
diff --git a/extras/v4l_id/60-persistent-v4l.rules b/extras/v4l_id/60-persistent-v4l.rules
index a342a71..b6e1313 100644
--- a/extras/v4l_id/60-persistent-v4l.rules
+++ b/extras/v4l_id/60-persistent-v4l.rules
@@ -1,6 +1,6 @@
 # do not edit this file, it will be overwritten on update
 
-ACTION!="add|change", GOTO="persistent_v4l_end"
+ACTION=="remove", GOTO="persistent_v4l_end"
 SUBSYSTEM!="video4linux", GOTO="persistent_v4l_end"
 ENV{MAJOR}=="", GOTO="persistent_v4l_end"
 
diff --git a/rules/rules.d/60-persistent-alsa.rules b/rules/rules.d/60-persistent-alsa.rules
index a5206fd..39a3652 100644
--- a/rules/rules.d/60-persistent-alsa.rules
+++ b/rules/rules.d/60-persistent-alsa.rules
@@ -1,6 +1,6 @@
 # do not edit this file, it will be overwritten on update
 
-ACTION!="add|change", GOTO="persistent_alsa_end"
+ACTION=="remove", GOTO="persistent_alsa_end"
 SUBSYSTEM!="sound", GOTO="persistent_alsa_end"
 KERNEL!="controlC[0-9]*", GOTO="persistent_alsa_end"
 
diff --git a/rules/rules.d/60-persistent-input.rules b/rules/rules.d/60-persistent-input.rules
index 1ea4431..634c4db 100644
--- a/rules/rules.d/60-persistent-input.rules
+++ b/rules/rules.d/60-persistent-input.rules
@@ -1,6 +1,6 @@
 # do not edit this file, it will be overwritten on update
 
-ACTION!="add|change", GOTO="persistent_input_end"
+ACTION=="remove", GOTO="persistent_input_end"
 SUBSYSTEM!="input", GOTO="persistent_input_end"
 KERNEL=="input[0-9]*", GOTO="persistent_input_end"
 
diff --git a/rules/rules.d/60-persistent-serial.rules b/rules/rules.d/60-persistent-serial.rules
index 351b385..3e1a565 100644
--- a/rules/rules.d/60-persistent-serial.rules
+++ b/rules/rules.d/60-persistent-serial.rules
@@ -1,6 +1,6 @@
 # do not edit this file, it will be overwritten on update
 
-ACTION!="add|change", GOTO="persistent_serial_end"
+ACTION=="remove", GOTO="persistent_serial_end"
 SUBSYSTEM!="tty", GOTO="persistent_serial_end"
 KERNEL!="ttyUSB[0-9]*|ttyACM[0-9]*", GOTO="persistent_serial_end"
 
diff --git a/rules/rules.d/60-persistent-storage-tape.rules b/rules/rules.d/60-persistent-storage-tape.rules
index 968528d..833ef94 100644
--- a/rules/rules.d/60-persistent-storage-tape.rules
+++ b/rules/rules.d/60-persistent-storage-tape.rules
@@ -2,7 +2,7 @@
 
 # persistent storage links: /dev/tape/{by-id,by-path}
 
-ACTION!="add|change", GOTO="persistent_storage_tape_end"
+ACTION=="remove", GOTO="persistent_storage_tape_end"
 
 # type 8 devices are "Medium Changers"
 SUBSYSTEM=="scsi_generic", SUBSYSTEMS=="scsi", ATTRS{type}=="8", IMPORT{program}="scsi_id --sg-version=3 --export --whitelisted -d $tempnode", SYMLINK+="tape/by-id/scsi-$env{ID_SERIAL}"
diff --git a/rules/rules.d/60-persistent-storage.rules b/rules/rules.d/60-persistent-storage.rules
index 89041a9..d9f8003 100644
--- a/rules/rules.d/60-persistent-storage.rules
+++ b/rules/rules.d/60-persistent-storage.rules
@@ -6,7 +6,7 @@
 # forward scsi device event to corresponding block device
 ACTION=="change", SUBSYSTEM=="scsi", ENV{DEVTYPE}=="scsi_device", TEST=="block", ATTR{block/*/uevent}="change"
 
-ACTION!="add|change", GOTO="persistent_storage_end"
+ACTION=="remove", GOTO="persistent_storage_end"
 SUBSYSTEM!="block", GOTO="persistent_storage_end"
 
 # skip rules for inappropriate block devices
diff --git a/rules/rules.d/75-net-description.rules b/rules/rules.d/75-net-description.rules
index 1c4c401..490fcce 100644
--- a/rules/rules.d/75-net-description.rules
+++ b/rules/rules.d/75-net-description.rules
@@ -1,6 +1,6 @@
 # do not edit this file, it will be overwritten on update
 
-ACTION!="add|change", GOTO="net_end"
+ACTION=="remove", GOTO="net_end"
 SUBSYSTEM!="net", GOTO="net_end"
 
 SUBSYSTEMS=="usb", ENV{ID_MODEL}=="", IMPORT{program}="usb_id --export %p"
diff --git a/rules/rules.d/75-tty-description.rules b/rules/rules.d/75-tty-description.rules
index ac868ad..c2980cf 100644
--- a/rules/rules.d/75-tty-description.rules
+++ b/rules/rules.d/75-tty-description.rules
@@ -1,6 +1,6 @@
 # do not edit this file, it will be overwritten on update
 
-ACTION!="add|change", GOTO="tty_end"
+ACTION=="remove", GOTO="tty_end"
 SUBSYSTEM!="tty", GOTO="tty_end"
 
 SUBSYSTEMS=="usb", ENV{ID_MODEL}=="", IMPORT{program}="usb_id --export %p"
diff --git a/rules/suse/64-device-mapper.rules b/rules/suse/64-device-mapper.rules
index 34e3307..12cae35 100644
--- a/rules/suse/64-device-mapper.rules
+++ b/rules/suse/64-device-mapper.rules
@@ -1,7 +1,7 @@
 # do not edit this file, it will be overwritten on update
 
 KERNEL!="dm-*", GOTO="device_mapper_end"
-ACTION!="add|change", GOTO="device_mapper_end"
+ACTION=="remove", GOTO="device_mapper_end"
 
 IMPORT{program}="/sbin/dmsetup export -j%M -m%m"
 ENV{DM_NAME}!="?*", GOTO="device_mapper_end"
diff --git a/udev/udev-rules.c b/udev/udev-rules.c
index c4a2724..0361f68 100644
--- a/udev/udev-rules.c
+++ b/udev/udev-rules.c
@@ -2055,13 +2055,12 @@ int udev_rules_apply_to_event(struct udev_rules *rules, struct udev_event *event
 	struct token *cur;
 	struct token *rule;
 	enum escape_type esc = ESCAPE_UNSET;
-	int can_set_name;
+	bool can_set_name;
 
 	if (rules->tokens == NULL)
 		return -1;
 
-	can_set_name = ((strcmp(udev_device_get_action(event->dev), "add") == 0 ||
-			 strcmp(udev_device_get_action(event->dev), "change") == 0) &&
+	can_set_name = ((strcmp(udev_device_get_action(event->dev), "remove") != 0) &&
 			(major(udev_device_get_devnum(event->dev)) > 0 ||
 			 strcmp(udev_device_get_subsystem(event->dev), "net") == 0));
 
diff --git a/udev/udevd.c b/udev/udevd.c
index fe3352c..c27b4cd 100644
--- a/udev/udevd.c
+++ b/udev/udevd.c
@@ -168,7 +168,7 @@ static void event_queue_delete(struct event *event)
 	udev_list_node_remove(&event->node);
 
 	/* mark as failed, if "add" event returns non-zero */
-	if (event->exitcode != 0 && strcmp(udev_device_get_action(event->dev), "add") == 0)
+	if (event->exitcode != 0 && strcmp(udev_device_get_action(event->dev), "remove") != 0)
 		udev_queue_export_device_failed(udev_queue_export, event->dev);
 	else
 		udev_queue_export_device_finished(udev_queue_export, event->dev);
-- 
1.6.6


0058-update-NEWS.patch:
 NEWS |    8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

--- NEW FILE 0058-update-NEWS.patch ---
>From 5c4c389bba6cf986a8dd743b43017c2f60604cca Mon Sep 17 00:00:00 2001
From: Kay Sievers <kay.sievers at vrfy.org>
Date: Mon, 12 Apr 2010 17:00:16 +0200
Subject: [PATCH 58/65] update NEWS

---
 NEWS |    7 +++++++
 1 files changed, 7 insertions(+), 0 deletions(-)

diff --git a/NEWS b/NEWS
index a4d46d7..687bcdf 100644
--- a/NEWS
+++ b/NEWS
@@ -2,6 +2,13 @@ udev 152
 ========
 Bugfixes.
 
+All "add|change" matches are replaced by "!remove" in the rules and
+in the udev logic. All types of events will update possible symlinks
+and permissions, only "remove" is handled special now.
+
+The modem mode switch extra was removed and the external usb_modeswitch
+program should be used instead.
+
 New and fixed keymaps.
 
 udev 151
-- 
1.6.6


0059-log-info-only-if-we-actually-delete-the-node.patch:
 udev-event.c |    3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

--- NEW FILE 0059-log-info-only-if-we-actually-delete-the-node.patch ---
>From 3ba7e651ad36e4f37d9bfffadb638bc2ef784217 Mon Sep 17 00:00:00 2001
From: Kay Sievers <kay.sievers at vrfy.org>
Date: Mon, 12 Apr 2010 17:13:37 +0200
Subject: [PATCH 59/65] log info only if we actually delete the node

---
 udev/udev-event.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/udev/udev-event.c b/udev/udev-event.c
index c3a8281..26939e7 100644
--- a/udev/udev-event.c
+++ b/udev/udev-event.c
@@ -646,9 +646,9 @@ int udev_event_execute_rules(struct udev_event *event, struct udev_rules *rules)
 				struct stat stats;
 				char filename[UTIL_PATH_SIZE];
 
-				info(event->udev, "remove kernel created node '%s'\n", udev_device_get_knodename(dev));
 				util_strscpyl(filename, sizeof(filename), udev_get_dev_path(event->udev), "/", udev_device_get_knodename(dev), NULL);
 				if (stat(filename, &stats) == 0 && stats.st_rdev == udev_device_get_devnum(dev)) {
+					info(event->udev, "remove kernel created node '%s'\n", udev_device_get_knodename(dev));
 					util_unlink_secure(event->udev, filename);
 					util_delete_path(event->udev, filename);
 				}
-- 
1.6.6


0060-udevadm-trigger-switch-default-action-from-add-to-ch.patch:
 NEWS                   |    3 +++
 udev/udevadm-trigger.c |    5 ++---
 2 files changed, 5 insertions(+), 3 deletions(-)

--- NEW FILE 0060-udevadm-trigger-switch-default-action-from-add-to-ch.patch ---
>From 236fae6cf1a619a92174efdf84cd7d91e7d4348d Mon Sep 17 00:00:00 2001
From: Kay Sievers <kay.sievers at vrfy.org>
Date: Mon, 12 Apr 2010 17:56:32 +0200
Subject: [PATCH 60/65] udevadm: trigger - switch default action from "add" to "change"

---
 NEWS                   |    3 +++
 udev/udevadm-trigger.c |    4 ++--
 2 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/NEWS b/NEWS
index 687bcdf..c5fbbe1 100644
--- a/NEWS
+++ b/NEWS
@@ -2,6 +2,9 @@ udev 152
 ========
 Bugfixes.
 
+"udevadm trigger" default to "change" events now, instead of "add"
+events.
+
 All "add|change" matches are replaced by "!remove" in the rules and
 in the udev logic. All types of events will update possible symlinks
 and permissions, only "remove" is handled special now.
diff --git a/udev/udevadm-trigger.c b/udev/udevadm-trigger.c
index dbcaee3..03aa534 100644
--- a/udev/udevadm-trigger.c
+++ b/udev/udevadm-trigger.c
@@ -110,7 +110,7 @@ int udevadm_trigger(struct udev *udev, int argc, char *argv[])
 		TYPE_SUBSYSTEMS,
 		TYPE_FAILED,
 	} device_type = TYPE_DEVICES;
-	const char *action = "add";
+	const char *action = "change";
 	struct udev_enumerate *udev_enumerate;
 	int rc = 0;
 
@@ -184,7 +184,7 @@ int udevadm_trigger(struct udev *udev, int argc, char *argv[])
 			       "      subsystems                    sys subsystems and drivers\n"
 			       "      failed                        trigger only the events which have been\n"
 			       "                                    marked as failed during a previous run\n"
-			       "  --action=<action>               event action value, default is \"add\"\n"
+			       "  --action=<action>               event action value, default is \"change\"\n"
 			       "  --subsystem-match=<subsystem>   trigger devices from a matching subsystem\n"
 			       "  --subsystem-nomatch=<subsystem> exclude devices from a matching subsystem\n"
 			       "  --attr-match=<file[=<value>]>   trigger devices with a matching attribute\n"
-- 
1.6.6


0061-remove-all_partitions-option.patch:
 NEWS                             |    7 +++++-
 libudev/libudev-device-private.c |    4 ---
 libudev/libudev-device.c         |   17 ---------------
 libudev/libudev-private.h        |    2 -
 test/udev-test.pl                |   43 ---------------------------------------
 udev/udev-node.c                 |   35 -------------------------------
 udev/udev-rules.c                |   23 --------------------
 udev/udev.xml                    |    8 -------
 udev/udevadm-info.c              |    5 ----
 9 files changed, 6 insertions(+), 138 deletions(-)

--- NEW FILE 0061-remove-all_partitions-option.patch ---
>From 1f084fe5811ce251d516a8022f8c7c27d0ef1f53 Mon Sep 17 00:00:00 2001
From: Kay Sievers <kay.sievers at vrfy.org>
Date: Tue, 13 Apr 2010 08:52:48 +0200
Subject: [PATCH 61/65] remove "all_partitions" option

We can not predict the major/minor of non-existing devices:
  $ grep . /sys/class/block/sd*/dev
  /sys/class/block/sda1/dev:259:524288
  /sys/class/block/sda2/dev:259:262144
  /sys/class/block/sda3/dev:259:786432
  /sys/class/block/sda4/dev:259:131072
  /sys/class/block/sda/dev:259:0
  /sys/class/block/sdb/dev:259:655360
  /sys/class/block/sdc/dev:259:393216

If this functionality is still needed for some broken hardware, it needs to be
solved with a tool not part of the udev package. Because such option is unreliable
and unsafe to use.
---
 NEWS                             |    7 +++++-
 libudev/libudev-device-private.c |    4 ---
 libudev/libudev-device.c         |   17 ---------------
 libudev/libudev-private.h        |    2 -
 test/udev-test.pl                |   43 --------------------------------------
 udev/udev-node.c                 |   35 ------------------------------
 udev/udev-rules.c                |   23 --------------------
 udev/udev.xml                    |    8 -------
 udev/udevadm-info.c              |    4 ---
 9 files changed, 6 insertions(+), 137 deletions(-)

diff --git a/NEWS b/NEWS
index c5fbbe1..c422eaa 100644
--- a/NEWS
+++ b/NEWS
@@ -2,9 +2,14 @@ udev 152
 ========
 Bugfixes.
 
-"udevadm trigger" default to "change" events now, instead of "add"
+"udevadm trigger" defaults to "change" events now, instead of "add"
 events.
 
+The option "all_partitons" was removed from udev. This should not be
+needed for usual hardware. Udev can not safely make assumptions
+about non-exixting partition major/minor numbers, and therefore no
+longer provide such an unreliable and unsafe option.
+
 All "add|change" matches are replaced by "!remove" in the rules and
 in the udev logic. All types of events will update possible symlinks
 and permissions, only "remove" is handled special now.
diff --git a/libudev/libudev-device-private.c b/libudev/libudev-device-private.c
index 1bcf441..19c20b2 100644
--- a/libudev/libudev-device-private.c
+++ b/libudev/libudev-device-private.c
@@ -41,8 +41,6 @@ int udev_device_update_db(struct udev_device *udev_device)
 	udev_list_entry_foreach(list_entry, udev_device_get_properties_list_entry(udev_device))
 		if (udev_list_entry_get_flags(list_entry))
 			goto file;
-	if (udev_device_get_num_fake_partitions(udev_device) != 0)
-		goto file;
 	if (udev_device_get_ignore_remove(udev_device))
 		goto file;
 	if (udev_device_get_devlink_priority(udev_device) != 0)
@@ -95,8 +93,6 @@ file:
 		fprintf(f, "L:%i\n", udev_device_get_devlink_priority(udev_device));
 	if (udev_device_get_event_timeout(udev_device) >= 0)
 		fprintf(f, "T:%i\n", udev_device_get_event_timeout(udev_device));
-	if (udev_device_get_num_fake_partitions(udev_device) != 0)
-		fprintf(f, "A:%i\n", udev_device_get_num_fake_partitions(udev_device));
 	if (udev_device_get_ignore_remove(udev_device))
 		fprintf(f, "R:%i\n", udev_device_get_ignore_remove(udev_device));
 	if (udev_device_get_watch_handle(udev_device) >= 0)
diff --git a/libudev/libudev-device.c b/libudev/libudev-device.c
index 410f75b..75cc61c 100644
--- a/libudev/libudev-device.c
+++ b/libudev/libudev-device.c
@@ -63,7 +63,6 @@ struct udev_device {
 	unsigned long long int seqnum;
 	int event_timeout;
 	int timeout;
-	int num_fake_partitions;
 	int devlink_priority;
 	int refcount;
 	dev_t devnum;
@@ -284,9 +283,6 @@ int udev_device_read_db(struct udev_device *udev_device)
 		case 'T':
 			udev_device_set_event_timeout(udev_device, atoi(val));
 			break;
-		case 'A':
-			udev_device_set_num_fake_partitions(udev_device, atoi(val));
-			break;
 		case 'R':
 			udev_device_set_ignore_remove(udev_device, atoi(val));
 			break;
@@ -1425,19 +1421,6 @@ int udev_device_set_devnum(struct udev_device *udev_device, dev_t devnum)
 	return 0;
 }
 
-int udev_device_get_num_fake_partitions(struct udev_device *udev_device)
-{
-	if (!udev_device->info_loaded)
-		device_load_info(udev_device);
-	return udev_device->num_fake_partitions;
-}
-
-int udev_device_set_num_fake_partitions(struct udev_device *udev_device, int num)
-{
-	udev_device->num_fake_partitions = num;
-	return 0;
-}
-
 int udev_device_get_devlink_priority(struct udev_device *udev_device)
 {
 	if (!udev_device->info_loaded)
diff --git a/libudev/libudev-private.h b/libudev/libudev-private.h
index 3f2861f..bf9e923 100644
--- a/libudev/libudev-private.h
+++ b/libudev/libudev-private.h
@@ -93,8 +93,6 @@ int udev_device_get_event_timeout(struct udev_device *udev_device);
 int udev_device_set_event_timeout(struct udev_device *udev_device, int event_timeout);
 int udev_device_set_devnum(struct udev_device *udev_device, dev_t devnum);
 int udev_device_set_seqnum(struct udev_device *udev_device, unsigned long long int seqnum);
-int udev_device_get_num_fake_partitions(struct udev_device *udev_device);
-int udev_device_set_num_fake_partitions(struct udev_device *udev_device, int num);
 int udev_device_get_devlink_priority(struct udev_device *udev_device);
 int udev_device_set_devlink_priority(struct udev_device *udev_device, int prio);
 int udev_device_get_ignore_remove(struct udev_device *udev_device);
diff --git a/test/udev-test.pl b/test/udev-test.pl
index aeca948..4633d6b 100755
--- a/test/udev-test.pl
+++ b/test/udev-test.pl
@@ -493,16 +493,6 @@ SUBSYSTEMS=="foo", PROGRAM=="/bin/echo -n foo-%b", SYMLINK+="%c"
 EOF
 	},
 	{
-		desc		=> "create all possible partitions",
-		subsys		=> "block",
-		devpath		=> "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda",
-		exp_name	=> "sda15" ,
-		exp_majorminor	=> "8:15",
-		rules		=> <<EOF
-SUBSYSTEMS=="scsi", ATTRS{vendor}=="ATA", OPTIONS="all_partitions"
-EOF
-	},
-	{
 		desc		=> "sysfs parent hierarchy",
 		subsys		=> "tty",
 		devpath		=> "/devices/pci0000:00/0000:00:1d.7/usb5/5-2/5-2:1.0/tty/ttyACM0",
@@ -988,28 +978,6 @@ SUBSYSTEMS=="scsi", PROGRAM=="/bin/echo -n node link1 link2 link3 link4", RESULT
 EOF
 	},
 	{
-		desc		=> "all_partitions, option-only rule",
-		subsys		=> "block",
-		devpath		=> "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda",
-		exp_name	=> "node6",
-		exp_rem_error	=> "yes",
-		rules		=> <<EOF
-SUBSYSTEM=="block", OPTIONS="all_partitions"
-SUBSYSTEMS=="scsi", KERNEL=="sda", NAME="node"
-EOF
-	},
-	{
-		desc		=> "all_partitions, option-only rule (fail on partition)",
-		subsys		=> "block",
-		devpath		=> "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda1",
-		exp_name	=> "node6",
-		exp_add_error	=> "yes",
-		rules		=> <<EOF
-SUBSYSTEM=="block", OPTIONS="all_partitions"
-SUBSYSTEMS=="scsi", KERNEL=="sda", NAME="node"
-EOF
-	},
-	{
 		desc		=> "ignore remove event test",
 		subsys		=> "block",
 		devpath		=> "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda",
@@ -1020,17 +988,6 @@ SUBSYSTEMS=="scsi", KERNEL=="sda", SYMLINK+="node", OPTIONS="ignore_remove"
 EOF
 	},
 	{
-		desc		=> "ignore remove event test (with all partitions)",
-		subsys		=> "block",
-		devpath		=> "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda",
-		exp_name	=> "sda14",
-		exp_rem_error	=> "yes",
-		option		=> "clean",
-		rules		=> <<EOF
-SUBSYSTEMS=="scsi", KERNEL=="sda", OPTIONS="ignore_remove, all_partitions"
-EOF
-	},
-	{
 		desc		=> "SUBSYSTEM match test",
 		subsys		=> "block",
 		devpath		=> "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda",
diff --git a/udev/udev-node.c b/udev/udev-node.c
index 3b4eb5f..4492c2e 100644
--- a/udev/udev-node.c
+++ b/udev/udev-node.c
@@ -365,8 +365,6 @@ void udev_node_update_old_links(struct udev_device *dev, struct udev_device *dev
 int udev_node_add(struct udev_device *dev, mode_t mode, uid_t uid, gid_t gid)
 {
 	struct udev *udev = udev_device_get_udev(dev);
-	int i;
-	int num;
 	struct udev_list_entry *list_entry;
 	int err = 0;
 
@@ -380,23 +378,6 @@ int udev_node_add(struct udev_device *dev, mode_t mode, uid_t uid, gid_t gid)
 		goto exit;
 	}
 
-	/* create all_partitions if requested */
-	num = udev_device_get_num_fake_partitions(dev);
-	if (num > 0) {
-		info(udev, "creating device partition nodes '%s[1-%i]'\n", udev_device_get_devnode(dev), num);
-		for (i = 1; i <= num; i++) {
-			char partitionname[UTIL_PATH_SIZE];
-			dev_t part_devnum;
-
-			snprintf(partitionname, sizeof(partitionname), "%s%d",
-				 udev_device_get_devnode(dev), i);
-			partitionname[sizeof(partitionname)-1] = '\0';
-			part_devnum = makedev(major(udev_device_get_devnum(dev)),
-					    minor(udev_device_get_devnum(dev)) + i);
-			udev_node_mknod(dev, partitionname, part_devnum, mode, uid, gid);
-		}
-	}
-
 	/* create/update symlinks, add symlinks to name index */
 	udev_list_entry_foreach(list_entry, udev_device_get_devlinks_list_entry(dev)) {
 		if (udev_list_entry_get_flags(list_entry))
@@ -414,10 +395,8 @@ int udev_node_remove(struct udev_device *dev)
 	struct udev *udev = udev_device_get_udev(dev);
 	struct udev_list_entry *list_entry;
 	const char *devnode;
-	char partitionname[UTIL_PATH_SIZE];
 	struct stat stats;
 	int err = 0;
-	int num;
 
 	/* remove/update symlinks, remove symlinks from name index */
 	udev_list_entry_foreach(list_entry, udev_device_get_devlinks_list_entry(dev))
@@ -451,20 +430,6 @@ int udev_node_remove(struct udev_device *dev)
 		udev_device_unref(dev_check);
 	}
 
-	num = udev_device_get_num_fake_partitions(dev);
-	if (num > 0) {
-		int i;
-
-		info(udev, "removing all_partitions '%s[1-%i]'\n", devnode, num);
-		if (num > 255)
-			return -1;
-		for (i = 1; i <= num; i++) {
-			snprintf(partitionname, sizeof(partitionname), "%s%d", devnode, i);
-			partitionname[sizeof(partitionname)-1] = '\0';
-			util_unlink_secure(udev, partitionname);
-		}
-	}
-
 	util_delete_path(udev, devnode);
 	return err;
 }
diff --git a/udev/udev-rules.c b/udev/udev-rules.c
index 0361f68..a4a86b6 100644
--- a/udev/udev-rules.c
+++ b/udev/udev-rules.c
@@ -196,7 +196,6 @@ struct token {
 				mode_t  mode;
 				uid_t uid;
 				gid_t gid;
-				int num_fake_part;
 				int devlink_prio;
 				int event_timeout;
 				int watch;
@@ -371,9 +370,6 @@ static void dump_token(struct udev_rules *rules, struct token *token)
 	case TK_A_INOTIFY_WATCH:
 		dbg(rules->udev, "%s %u\n", token_str(type), token->key.watch);
 		break;
-	case TK_A_NUM_FAKE_PART:
-		dbg(rules->udev, "%s %u\n", token_str(type), token->key.num_fake_part);
-		break;
 	case TK_A_DEVLINK_PRIO:
 		dbg(rules->udev, "%s %s %u\n", token_str(type), operation_str(op), token->key.devlink_prio);
 		break;
@@ -1469,12 +1465,6 @@ static int add_rule(struct udev_rules *rules, char *line,
 				rule_add_key(&rule_tmp, TK_A_NAME, op, value, NULL);
 				attr = get_key_attribute(rules->udev, key + sizeof("NAME")-1);
 				if (attr != NULL) {
-					if (strstr(attr, "all_partitions") != NULL) {
-						int num = DEFAULT_FAKE_PARTITIONS_COUNT;
-
-						dbg(rules->udev, "creation of partition nodes requested\n");
-						rule_add_key(&rule_tmp, TK_A_NUM_FAKE_PART, 0, NULL, &num);
-					}
 					if (strstr(attr, "ignore_remove") != NULL) {
 						dbg(rules->udev, "remove event should be ignored\n");
 						rule_add_key(&rule_tmp, TK_A_IGNORE_REMOVE, 0, NULL, NULL);
@@ -1576,12 +1566,6 @@ static int add_rule(struct udev_rules *rules, char *line,
 				else if (strncmp(pos, "replace", strlen("replace")) == 0)
 					rule_add_key(&rule_tmp, TK_A_STRING_ESCAPE_REPLACE, 0, NULL, NULL);
 			}
-			if (strstr(value, "all_partitions") != NULL) {
-				int num = DEFAULT_FAKE_PARTITIONS_COUNT;
-
-				rule_add_key(&rule_tmp, TK_A_NUM_FAKE_PART, 0, NULL, &num);
-				dbg(rules->udev, "creation of partition nodes requested\n");
-			}
 			pos = strstr(value, "nowatch");
 			if (pos != NULL) {
 				const int off = 0;
@@ -2331,13 +2315,6 @@ int udev_rules_apply_to_event(struct udev_rules *rules, struct udev_event *event
 		case TK_A_STRING_ESCAPE_REPLACE:
 			esc = ESCAPE_REPLACE;
 			break;
-		case TK_A_NUM_FAKE_PART:
-			if (strcmp(udev_device_get_subsystem(event->dev), "block") != 0)
-				break;
-			if (udev_device_get_sysnum(event->dev) != NULL)
-				break;
-			udev_device_set_num_fake_partitions(event->dev, cur->key.num_fake_part);
-			break;
 		case TK_A_INOTIFY_WATCH:
 			event->inotify_watch = cur->key.watch;
 			break;
diff --git a/udev/udev.xml b/udev/udev.xml
index 175cdbe..9275e0f 100644
--- a/udev/udev.xml
+++ b/udev/udev.xml
@@ -450,14 +450,6 @@
                     </listitem>
                   </varlistentry>
                   <varlistentry>
-                    <term><option>all_partitions</option></term>
-                    <listitem>
-                      <para>Create the device nodes for all available partitions of a block device.
-                      This may be useful for removable media devices where media changes are not
-                      detected.</para>
-                    </listitem>
-                  </varlistentry>
-                  <varlistentry>
                     <term><option>event_timeout=</option></term>
                     <listitem>
                       <para>Number of seconds an event will wait for operations to finish, before it
diff --git a/udev/udevadm-info.c b/udev/udevadm-info.c
index 4711409..c57620f 100644
--- a/udev/udevadm-info.c
+++ b/udev/udevadm-info.c
@@ -142,10 +142,6 @@ static void print_record(struct udev_device *device)
 	if (i != 0)
 		printf("L: %i\n", i);
 
-	i = udev_device_get_num_fake_partitions(device);
-	if (i != 0)
-		printf("A: %u\n", i);
-
 	i = udev_device_get_ignore_remove(device);
 	if (i != 0)
 		printf("R: %u\n", i);
-- 
1.6.6


0062-cdrom_id-Fix-uninitialized-variables.patch:
 cdrom_id.c |   99 ++++++++++++++++++++++++++++++-------------------------------
 1 file changed, 49 insertions(+), 50 deletions(-)

--- NEW FILE 0062-cdrom_id-Fix-uninitialized-variables.patch ---
>From 816e6bf0fb0849d03696a4b4ec2334e35e819425 Mon Sep 17 00:00:00 2001
From: Martin Pitt <martin.pitt at ubuntu.com>
Date: Tue, 13 Apr 2010 10:49:24 +0200
Subject: [PATCH 62/65] cdrom_id: Fix uninitialized variables

In cases where cdrom_id does not go through the entire code path and one of the
probing functions returns -1 or exits early, the remaining variables were never
initialized. This caused effects like "phantom" audio CDs on empty drives, or
bogus data like ID_CDROM_MEDIA_TRACK_COUNT=22528.

Initialize the variables right away to avoid that.

Bug-Ubuntu: https://launchpad.net/bugs/559723
---
 extras/cdrom_id/cdrom_id.c |   96 ++++++++++++++++++++++----------------------
 1 files changed, 48 insertions(+), 48 deletions(-)

diff --git a/extras/cdrom_id/cdrom_id.c b/extras/cdrom_id/cdrom_id.c
index 894a890..db3867c 100644
--- a/extras/cdrom_id/cdrom_id.c
+++ b/extras/cdrom_id/cdrom_id.c
@@ -56,57 +56,57 @@ static void log_fn(struct udev *udev, int priority,
 }
 
 /* device info */
-static unsigned int cd_cd_rom;
-static unsigned int cd_cd_r;
-static unsigned int cd_cd_rw;
-static unsigned int cd_dvd_rom;
-static unsigned int cd_dvd_r;
-static unsigned int cd_dvd_rw;
-static unsigned int cd_dvd_ram;
-static unsigned int cd_dvd_plus_r;
-static unsigned int cd_dvd_plus_rw;
-static unsigned int cd_dvd_plus_r_dl;
-static unsigned int cd_dvd_plus_rw_dl;
-static unsigned int cd_bd;
-static unsigned int cd_bd_r;
-static unsigned int cd_bd_re;
-static unsigned int cd_hddvd;
-static unsigned int cd_hddvd_r;
-static unsigned int cd_hddvd_rw;
-static unsigned int cd_mo;
-static unsigned int cd_mrw;
-static unsigned int cd_mrw_w;
+static unsigned int cd_cd_rom = 0;
+static unsigned int cd_cd_r = 0;
+static unsigned int cd_cd_rw = 0;
+static unsigned int cd_dvd_rom = 0;
+static unsigned int cd_dvd_r = 0;
+static unsigned int cd_dvd_rw = 0;
+static unsigned int cd_dvd_ram = 0;
+static unsigned int cd_dvd_plus_r = 0;
+static unsigned int cd_dvd_plus_rw = 0;
+static unsigned int cd_dvd_plus_r_dl = 0;
+static unsigned int cd_dvd_plus_rw_dl = 0;
+static unsigned int cd_bd = 0;
+static unsigned int cd_bd_r = 0;
+static unsigned int cd_bd_re = 0;
+static unsigned int cd_hddvd = 0;
+static unsigned int cd_hddvd_r = 0;
+static unsigned int cd_hddvd_rw = 0;
+static unsigned int cd_mo = 0;
+static unsigned int cd_mrw = 0;
+static unsigned int cd_mrw_w = 0;
 
 /* media info */
-static unsigned int cd_media;
-static unsigned int cd_media_cd_rom;
-static unsigned int cd_media_cd_r;
-static unsigned int cd_media_cd_rw;
-static unsigned int cd_media_dvd_rom;
-static unsigned int cd_media_dvd_r;
-static unsigned int cd_media_dvd_rw;
-static unsigned int cd_media_dvd_ram;
-static unsigned int cd_media_dvd_plus_r;
-static unsigned int cd_media_dvd_plus_rw;
-static unsigned int cd_media_dvd_plus_r_dl;
-static unsigned int cd_media_dvd_plus_rw_dl;
-static unsigned int cd_media_bd;
-static unsigned int cd_media_bd_r;
-static unsigned int cd_media_bd_re;
-static unsigned int cd_media_hddvd;
-static unsigned int cd_media_hddvd_r;
-static unsigned int cd_media_hddvd_rw;
-static unsigned int cd_media_mo;
-static unsigned int cd_media_mrw;
-static unsigned int cd_media_mrw_w;
-
-static const char *cd_media_state;
-static unsigned int cd_media_session_next;
-static unsigned int cd_media_session_count;
-static unsigned int cd_media_track_count;
-static unsigned int cd_media_track_count_data;
-static unsigned int cd_media_track_count_audio;
-static unsigned long long int cd_media_session_last_offset;
+static unsigned int cd_media = 0;
+static unsigned int cd_media_cd_rom = 0;
+static unsigned int cd_media_cd_r = 0;
+static unsigned int cd_media_cd_rw = 0;
+static unsigned int cd_media_dvd_rom = 0;
+static unsigned int cd_media_dvd_r = 0;
+static unsigned int cd_media_dvd_rw = 0;
+static unsigned int cd_media_dvd_ram = 0;
+static unsigned int cd_media_dvd_plus_r = 0;
+static unsigned int cd_media_dvd_plus_rw = 0;
+static unsigned int cd_media_dvd_plus_r_dl = 0;
+static unsigned int cd_media_dvd_plus_rw_dl = 0;
+static unsigned int cd_media_bd = 0;
+static unsigned int cd_media_bd_r = 0;
+static unsigned int cd_media_bd_re = 0;
+static unsigned int cd_media_hddvd = 0;
+static unsigned int cd_media_hddvd_r = 0;
+static unsigned int cd_media_hddvd_rw = 0;
+static unsigned int cd_media_mo = 0;
+static unsigned int cd_media_mrw = 0;
+static unsigned int cd_media_mrw_w = 0;
+
+static const char *cd_media_state = NULL;
+static unsigned int cd_media_session_next = 0;
+static unsigned int cd_media_session_count = 0;
+static unsigned int cd_media_track_count = 0;
+static unsigned int cd_media_track_count_data = 0;
+static unsigned int cd_media_track_count_audio = 0;
+static unsigned long long int cd_media_session_last_offset = 0;
 
 #define ERRCODE(s)	((((s)[2] & 0x0F) << 16) | ((s)[12] << 8) | ((s)[13]))
 #define SK(errcode)	(((errcode) >> 16) & 0xF)
-- 
1.6.6


0063-rules-call-modprobe-on-all-events-but-remove.patch:
 50-udev-default.rules |    3 ---
 80-drivers.rules      |    3 +--
 2 files changed, 1 insertion(+), 5 deletions(-)

--- NEW FILE 0063-rules-call-modprobe-on-all-events-but-remove.patch ---
>From 06ba47d8336c6d017a67d11f480341db07b9bc4b Mon Sep 17 00:00:00 2001
From: Kay Sievers <kay.sievers at vrfy.org>
Date: Tue, 13 Apr 2010 12:12:08 +0200
Subject: [PATCH 63/65] rules: call modprobe on all events but "remove"

---
 rules/rules.d/50-udev-default.rules |    3 ---
 rules/rules.d/80-drivers.rules      |    2 +-
 2 files changed, 1 insertions(+), 4 deletions(-)

diff --git a/rules/rules.d/50-udev-default.rules b/rules/rules.d/50-udev-default.rules
index a5f0823..7e09ea1 100644
--- a/rules/rules.d/50-udev-default.rules
+++ b/rules/rules.d/50-udev-default.rules
@@ -112,6 +112,3 @@ SUBSYSTEM=="rtc", DRIVERS=="rtc_cmos", SYMLINK+="rtc"
 KERNEL=="mmtimer",		MODE="0644"
 KERNEL=="rflash[0-9]*",		MODE="0400"
 KERNEL=="rrom[0-9]*",		MODE="0400"
-
-# do not delete static device nodes
-ACTION=="remove", NAME=="", TEST=="/lib/udev/devices/%k", OPTIONS+="ignore_remove"
diff --git a/rules/rules.d/80-drivers.rules b/rules/rules.d/80-drivers.rules
index d0485e1..86eb918 100644
--- a/rules/rules.d/80-drivers.rules
+++ b/rules/rules.d/80-drivers.rules
@@ -1,6 +1,6 @@
 # do not edit this file, it will be overwritten on update
 
-ACTION!="add", GOTO="drivers_end"
+ACTION=="remove", GOTO="drivers_end"
 
 DRIVER!="?*", ENV{MODALIAS}=="?*", RUN+="/sbin/modprobe -b $env{MODALIAS}"
 SUBSYSTEM=="tifm", ENV{TIFM_CARD_TYPE}=="SD", RUN+="/sbin/modprobe -b tifm_sd"
-- 
1.6.6


0064-remove-ignore_remove-option.patch:
 NEWS                             |    6 ++++++
 libudev/libudev-device-private.c |    4 ----
 libudev/libudev-device.c         |   17 -----------------
 libudev/libudev-private.h        |    2 --
 test/udev-test.pl                |   10 ----------
 udev/udev-node.c                 |   38 ++++++++++++++++++++++----------------
 udev/udev-rules.c                |   14 --------------
 udev/udev.xml                    |    7 -------
 udev/udevadm-info.c              |    5 -----
 9 files changed, 28 insertions(+), 75 deletions(-)

--- NEW FILE 0064-remove-ignore_remove-option.patch ---
>From a89d342dfb45b54e29381af9dbc495bbb2b057af Mon Sep 17 00:00:00 2001
From: Kay Sievers <kay.sievers at vrfy.org>
Date: Tue, 13 Apr 2010 12:45:38 +0200
Subject: [PATCH 64/65] remove "ignore_remove" option

---
 NEWS                             |    6 ++++++
 libudev/libudev-device-private.c |    4 ----
 libudev/libudev-device.c         |   17 -----------------
 libudev/libudev-private.h        |    2 --
 test/udev-test.pl                |   10 ----------
 udev/udev-node.c                 |   38 ++++++++++++++++++++++----------------
 udev/udev-rules.c                |   14 --------------
 udev/udev.xml                    |    7 -------
 udev/udevadm-info.c              |    4 ----
 9 files changed, 28 insertions(+), 74 deletions(-)

diff --git a/NEWS b/NEWS
index c422eaa..ea5c19d 100644
--- a/NEWS
+++ b/NEWS
@@ -10,6 +10,12 @@ needed for usual hardware. Udev can not safely make assumptions
 about non-exixting partition major/minor numbers, and therefore no
 longer provide such an unreliable and unsafe option.
 
+The option "ignore_remove" was removed from udev. With devtmpfs
+udev passed control over device nodes to the kernel. This option
+should no longer be needed, or can not work as advertised. Neither
+udev nor the kernel will remove device nodes which are copied from
+the /lib/udev/devices/ directory.
+
 All "add|change" matches are replaced by "!remove" in the rules and
 in the udev logic. All types of events will update possible symlinks
 and permissions, only "remove" is handled special now.
diff --git a/libudev/libudev-device-private.c b/libudev/libudev-device-private.c
index 19c20b2..5e4381e 100644
--- a/libudev/libudev-device-private.c
+++ b/libudev/libudev-device-private.c
@@ -41,8 +41,6 @@ int udev_device_update_db(struct udev_device *udev_device)
 	udev_list_entry_foreach(list_entry, udev_device_get_properties_list_entry(udev_device))
 		if (udev_list_entry_get_flags(list_entry))
 			goto file;
-	if (udev_device_get_ignore_remove(udev_device))
-		goto file;
 	if (udev_device_get_devlink_priority(udev_device) != 0)
 		goto file;
 	if (udev_device_get_event_timeout(udev_device) >= 0)
@@ -93,8 +91,6 @@ file:
 		fprintf(f, "L:%i\n", udev_device_get_devlink_priority(udev_device));
 	if (udev_device_get_event_timeout(udev_device) >= 0)
 		fprintf(f, "T:%i\n", udev_device_get_event_timeout(udev_device));
-	if (udev_device_get_ignore_remove(udev_device))
-		fprintf(f, "R:%i\n", udev_device_get_ignore_remove(udev_device));
 	if (udev_device_get_watch_handle(udev_device) >= 0)
 		fprintf(f, "W:%i\n", udev_device_get_watch_handle(udev_device));
 	udev_list_entry_foreach(list_entry, udev_device_get_properties_list_entry(udev_device)) {
diff --git a/libudev/libudev-device.c b/libudev/libudev-device.c
index 75cc61c..b3b6a63 100644
--- a/libudev/libudev-device.c
+++ b/libudev/libudev-device.c
@@ -75,7 +75,6 @@ struct udev_device {
 	unsigned int envp_uptodate:1;
 	unsigned int driver_set:1;
 	unsigned int info_loaded:1;
-	unsigned int ignore_remove:1;
 };
 
 struct udev_list_entry *udev_device_add_property(struct udev_device *udev_device, const char *key, const char *value)
@@ -283,9 +282,6 @@ int udev_device_read_db(struct udev_device *udev_device)
 		case 'T':
 			udev_device_set_event_timeout(udev_device, atoi(val));
 			break;
-		case 'R':
-			udev_device_set_ignore_remove(udev_device, atoi(val));
-			break;
 		case 'E':
 			udev_device_add_property_from_string(udev_device, val);
 			break;
@@ -1434,19 +1430,6 @@ int udev_device_set_devlink_priority(struct udev_device *udev_device, int prio)
 	return 0;
 }
 
-int udev_device_get_ignore_remove(struct udev_device *udev_device)
-{
-	if (!udev_device->info_loaded)
-		device_load_info(udev_device);
-	return udev_device->ignore_remove;
-}
-
-int udev_device_set_ignore_remove(struct udev_device *udev_device, int ignore)
-{
-	udev_device->ignore_remove = ignore;
-	return 0;
-}
-
 int udev_device_get_watch_handle(struct udev_device *udev_device)
 {
 	if (!udev_device->info_loaded)
diff --git a/libudev/libudev-private.h b/libudev/libudev-private.h
index bf9e923..8dc469e 100644
--- a/libudev/libudev-private.h
+++ b/libudev/libudev-private.h
@@ -95,8 +95,6 @@ int udev_device_set_devnum(struct udev_device *udev_device, dev_t devnum);
 int udev_device_set_seqnum(struct udev_device *udev_device, unsigned long long int seqnum);
 int udev_device_get_devlink_priority(struct udev_device *udev_device);
 int udev_device_set_devlink_priority(struct udev_device *udev_device, int prio);
-int udev_device_get_ignore_remove(struct udev_device *udev_device);
-int udev_device_set_ignore_remove(struct udev_device *udev_device, int ignore);
 int udev_device_get_watch_handle(struct udev_device *udev_device);
 int udev_device_set_watch_handle(struct udev_device *udev_device, int handle);
 void udev_device_set_info_loaded(struct udev_device *device);
diff --git a/test/udev-test.pl b/test/udev-test.pl
index 4633d6b..a4d3a72 100755
--- a/test/udev-test.pl
+++ b/test/udev-test.pl
@@ -978,16 +978,6 @@ SUBSYSTEMS=="scsi", PROGRAM=="/bin/echo -n node link1 link2 link3 link4", RESULT
 EOF
 	},
 	{
-		desc		=> "ignore remove event test",
-		subsys		=> "block",
-		devpath		=> "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda",
-		exp_name	=> "node",
-		exp_rem_error	=> "yes",
-		rules		=> <<EOF
-SUBSYSTEMS=="scsi", KERNEL=="sda", SYMLINK+="node", OPTIONS="ignore_remove"
-EOF
-	},
-	{
 		desc		=> "SUBSYSTEM match test",
 		subsys		=> "block",
 		devpath		=> "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda",
diff --git a/udev/udev-node.c b/udev/udev-node.c
index 4492c2e..34de268 100644
--- a/udev/udev-node.c
+++ b/udev/udev-node.c
@@ -396,6 +396,8 @@ int udev_node_remove(struct udev_device *dev)
 	struct udev_list_entry *list_entry;
 	const char *devnode;
 	struct stat stats;
+	struct udev_device *dev_check;
+	char filename[UTIL_PATH_SIZE];
 	int err = 0;
 
 	/* remove/update symlinks, remove symlinks from name index */
@@ -404,32 +406,36 @@ int udev_node_remove(struct udev_device *dev)
 
 	devnode = udev_device_get_devnode(dev);
 	if (devnode == NULL)
-		return 0;
+		goto out;
+
 	if (stat(devnode, &stats) != 0) {
 		info(udev, "device node '%s' not found\n", devnode);
-		return 0;
+		goto out;
 	}
+
 	if (stats.st_rdev != udev_device_get_devnum(dev)) {
 		info(udev, "device node '%s' points to a different device, skip removal\n", devnode);
-		return -1;
+		err = -1;
+		goto out;
 	}
 
-	if (udev_device_get_ignore_remove(dev)) {
-		info(udev, "ignore_remove for '%s'\n", udev_device_get_devnode(dev));
-	} else {
-		struct udev_device *dev_check;
-
-		dev_check = udev_device_new_from_syspath(udev, udev_device_get_syspath(dev));
-		if (dev_check != NULL && stats.st_rdev == udev_device_get_devnum(dev_check)) {
-			/* do not remove device node if the same sys-device is re-created in the meantime */
-			info(udev, "keeping device node of existing device'%s'\n", devnode);
-		} else {
-			info(udev, "removing device node '%s'\n", devnode);
-			err = util_unlink_secure(udev, devnode);
-		}
+	dev_check = udev_device_new_from_syspath(udev, udev_device_get_syspath(dev));
+	if (dev_check != NULL) {
+		/* do not remove device node if the same sys-device is re-created in the meantime */
+		info(udev, "keeping device node of existing device'%s'\n", devnode);
 		udev_device_unref(dev_check);
+		goto out;
+	}
+
+	util_strscpyl(filename, sizeof(filename), LIBEXECDIR "/devices", &devnode[strlen(udev_get_dev_path(udev))], NULL);
+	if (stat(filename, &stats) == 0 || stats.st_rdev == udev_device_get_devnum(dev)) {
+		info(udev, "static device entry found '%s', skip removal\n", devnode);
+		goto out;
 	}
 
+	info(udev, "removing device node '%s'\n", devnode);
+	err = util_unlink_secure(udev, devnode);
 	util_delete_path(udev, devnode);
+out:
 	return err;
 }
diff --git a/udev/udev-rules.c b/udev/udev-rules.c
index a4a86b6..4f18aca 100644
--- a/udev/udev-rules.c
+++ b/udev/udev-rules.c
@@ -1463,13 +1463,6 @@ static int add_rule(struct udev_rules *rules, char *line,
 					err(rules->udev, "NAME=\"%%k\" is superfluous and breaks "
 					    "kernel supplied names, please remove it from %s:%u\n", filename, lineno);
 				rule_add_key(&rule_tmp, TK_A_NAME, op, value, NULL);
-				attr = get_key_attribute(rules->udev, key + sizeof("NAME")-1);
-				if (attr != NULL) {
-					if (strstr(attr, "ignore_remove") != NULL) {
-						dbg(rules->udev, "remove event should be ignored\n");
-						rule_add_key(&rule_tmp, TK_A_IGNORE_REMOVE, 0, NULL, NULL);
-					}
-				}
 			}
 			rule_tmp.rule.rule.flags = 1;
 			continue;
@@ -1540,10 +1533,6 @@ static int add_rule(struct udev_rules *rules, char *line,
 		if (strcmp(key, "OPTIONS") == 0) {
 			const char *pos;
 
-			if (strstr(value, "ignore_remove") != NULL) {
-				dbg(rules->udev, "remove event should be ignored\n");
-				rule_add_key(&rule_tmp, TK_A_IGNORE_REMOVE, 0, NULL, NULL);
-			}
 			pos = strstr(value, "link_priority=");
 			if (pos != NULL) {
 				int prio = atoi(&pos[strlen("link_priority=")]);
@@ -2501,9 +2490,6 @@ int udev_rules_apply_to_event(struct udev_rules *rules, struct udev_event *event
 		case TK_A_EVENT_TIMEOUT:
 			udev_device_set_event_timeout(event->dev, cur->key.event_timeout);
 			break;
-		case TK_A_IGNORE_REMOVE:
-			udev_device_set_ignore_remove(event->dev, 1);
-			break;
 		case TK_A_ATTR:
 			{
 				const char *key_name = &rules->buf[cur->key.attr_off];
diff --git a/udev/udev.xml b/udev/udev.xml
index 9275e0f..dce953d 100644
--- a/udev/udev.xml
+++ b/udev/udev.xml
@@ -436,13 +436,6 @@
                 <para>Rule and device options:</para>
                 <variablelist>
                   <varlistentry>
-                    <term><option>ignore_remove</option></term>
-                    <listitem>
-                      <para>Do not remove the device node when the device goes away. This may be
-                      useful as a workaround for broken device drivers.</para>
-                    </listitem>
-                  </varlistentry>
-                  <varlistentry>
                     <term><option>link_priority=<replaceable>value</replaceable></option></term>
                     <listitem>
                       <para>Specify the priority of the created symlinks. Devices with higher
diff --git a/udev/udevadm-info.c b/udev/udevadm-info.c
index c57620f..5f6209a 100644
--- a/udev/udevadm-info.c
+++ b/udev/udevadm-info.c
@@ -142,10 +142,6 @@ static void print_record(struct udev_device *device)
 	if (i != 0)
 		printf("L: %i\n", i);
 
-	i = udev_device_get_ignore_remove(device);
-	if (i != 0)
-		printf("R: %u\n", i);
-
 	i = udev_device_get_watch_handle(device);
 	if (i >= 0)
 		printf("W: %u\n", i);
-- 
1.6.6


0065-cdrom_id-Fix-uninitialized-buffers.patch:
 cdrom_id.c |    8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

--- NEW FILE 0065-cdrom_id-Fix-uninitialized-buffers.patch ---
>From 2b861dc92757b9a3214c2b8e9d8b1c3f3c162391 Mon Sep 17 00:00:00 2001
From: Martin Pitt <martin.pitt at ubuntu.com>
Date: Tue, 13 Apr 2010 15:25:48 +0200
Subject: [PATCH 65/65] cdrom_id: Fix uninitialized buffers

Commit 5c6954f is actually a no-op, since static variables are already zero'ed
by default anyway (but we keep it for clarity). The real difference was that a
build with -O0 wor while a build with -O2 didn't.

Turns out that some ioctls do not actually touch the result buffer in some
cases, so we need to zero the result buffers to avoid interpreting random da as
CD properties.

https://launchpad.net/bugs/559723
https://launchpad.net/bugs/561585
---
 extras/cdrom_id/cdrom_id.c |    7 +++++++
 1 files changed, 7 insertions(+), 0 deletions(-)

diff --git a/extras/cdrom_id/cdrom_id.c b/extras/cdrom_id/cdrom_id.c
index db3867c..b6797cd 100644
--- a/extras/cdrom_id/cdrom_id.c
+++ b/extras/cdrom_id/cdrom_id.c
@@ -237,6 +237,7 @@ static int cd_inquiry(struct udev *udev, int fd) {
 	unsigned char inq[128];
 	int err;
 
+	memset (inq, 0, sizeof (inq));
 	scsi_cmd_set(udev, &sc, 0, 0x12);
 	scsi_cmd_set(udev, &sc, 4, 36);
 	scsi_cmd_set(udev, &sc, 5, 0);
@@ -265,6 +266,7 @@ static int cd_profiles(struct udev *udev, int fd)
 	unsigned int i;
 	int err;
 
+	memset (header, 0, sizeof (header));
 	scsi_cmd_set(udev, &sc, 0, 0x46);
 	scsi_cmd_set(udev, &sc, 1, 0);
 	scsi_cmd_set(udev, &sc, 8, sizeof(header));
@@ -282,6 +284,7 @@ static int cd_profiles(struct udev *udev, int fd)
 		return -1;
 	}
 
+	memset (profiles, 0, sizeof (profiles));
 	scsi_cmd_set(udev, &sc, 0, 0x46);
 	scsi_cmd_set(udev, &sc, 1, 1);
 	scsi_cmd_set(udev, &sc, 6, len >> 16);
@@ -440,6 +443,7 @@ static int cd_media_info(struct udev *udev, int fd)
 	};
 	int err;
 
+	memset (header, 0, sizeof (header));
 	scsi_cmd_set(udev, &sc, 0, 0x51);
 	scsi_cmd_set(udev, &sc, 8, sizeof(header));
 	scsi_cmd_set(udev, &sc, 9, 0);
@@ -472,6 +476,7 @@ static int cd_media_toc(struct udev *udev, int fd)
 	unsigned char *p;
 	int err;
 
+	memset (header, 0, sizeof (header));
 	scsi_cmd_set(udev, &sc, 0, 0x43);
 	scsi_cmd_set(udev, &sc, 6, 1);
 	scsi_cmd_set(udev, &sc, 8, sizeof(header));
@@ -493,6 +498,7 @@ static int cd_media_toc(struct udev *udev, int fd)
 	if (len < 8)
 		return 0;
 
+	memset (toc, 0, sizeof (toc));
 	scsi_cmd_set(udev, &sc, 0, 0x43);
 	scsi_cmd_set(udev, &sc, 6, header[2]); /* First Track/Session Number */
 	scsi_cmd_set(udev, &sc, 7, len >> 8);
@@ -520,6 +526,7 @@ static int cd_media_toc(struct udev *udev, int fd)
 			cd_media_track_count_audio++;
 	}
 
+	memset (header, 0, sizeof (header));
 	scsi_cmd_set(udev, &sc, 0, 0x43);
 	scsi_cmd_set(udev, &sc, 2, 1); /* Session Info */
 	scsi_cmd_set(udev, &sc, 8, 12);
-- 
1.6.6


0001-firmware-fix-error-reporting-on-missing-firmware-fil.patch:
 firmware.c |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Index: 0001-firmware-fix-error-reporting-on-missing-firmware-fil.patch
===================================================================
RCS file: /cvs/pkgs/rpms/udev/devel/0001-firmware-fix-error-reporting-on-missing-firmware-fil.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -p -r1.1 -r1.2
--- 0001-firmware-fix-error-reporting-on-missing-firmware-fil.patch	19 Mar 2010 12:48:12 -0000	1.1
+++ 0001-firmware-fix-error-reporting-on-missing-firmware-fil.patch	13 Apr 2010 15:09:32 -0000	1.2
@@ -1,7 +1,7 @@
 From 86a7a2f853fe6022c5b0c1b415918047b65533be Mon Sep 17 00:00:00 2001
 From: =?UTF-8?q?Thomas=20B=C3=A4chler?= <thomas at archlinux.org>
 Date: Sun, 31 Jan 2010 13:49:02 +0100
-Subject: [PATCH 01/36] firmware: fix error reporting on missing firmware files
+Subject: [PATCH 01/65] firmware: fix error reporting on missing firmware files
 
 The new firmware loader does not report an error to the kernel if a firmware file
 is missing. This results in modprobe stalling for 60 seconds for each firmware

0002-keymap-Add-Dell-Inspiron-1011-Mini-10.patch:
 95-keymap.rules |    3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Index: 0002-keymap-Add-Dell-Inspiron-1011-Mini-10.patch
===================================================================
RCS file: /cvs/pkgs/rpms/udev/devel/0002-keymap-Add-Dell-Inspiron-1011-Mini-10.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -p -r1.1 -r1.2
--- 0002-keymap-Add-Dell-Inspiron-1011-Mini-10.patch	19 Mar 2010 12:48:13 -0000	1.1
+++ 0002-keymap-Add-Dell-Inspiron-1011-Mini-10.patch	13 Apr 2010 15:09:32 -0000	1.2
@@ -1,7 +1,7 @@
 From fc47e0b56779ceeaaa40d2dc3248fa002af63aaa Mon Sep 17 00:00:00 2001
 From: Martin Pitt <martin.pitt at ubuntu.com>
 Date: Mon, 1 Feb 2010 15:27:46 -0800
-Subject: [PATCH 02/36] keymap: Add Dell Inspiron 1011 (Mini 10)
+Subject: [PATCH 02/65] keymap: Add Dell Inspiron 1011 (Mini 10)
 
 This fixes the broken WLAN key.
 ---

0003-Fix-brightness-keys-on-MSI-Wind-U-100.patch:
 95-keymap.rules |    6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

Index: 0003-Fix-brightness-keys-on-MSI-Wind-U-100.patch
===================================================================
RCS file: /cvs/pkgs/rpms/udev/devel/0003-Fix-brightness-keys-on-MSI-Wind-U-100.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -p -r1.1 -r1.2
--- 0003-Fix-brightness-keys-on-MSI-Wind-U-100.patch	19 Mar 2010 12:48:13 -0000	1.1
+++ 0003-Fix-brightness-keys-on-MSI-Wind-U-100.patch	13 Apr 2010 15:09:32 -0000	1.2
@@ -1,7 +1,7 @@
 From d7e2d38c1f0ead2239808dd117577a99a3ad3cde Mon Sep 17 00:00:00 2001
 From: Martin Pitt <martin.pitt at ubuntu.com>
 Date: Tue, 9 Feb 2010 15:47:47 +0100
-Subject: [PATCH 03/36] Fix brightness keys on MSI Wind U-100
+Subject: [PATCH 03/65] Fix brightness keys on MSI Wind U-100
 
 The MSI Wind 100 generates ACPI/input events on the LNXVIDEO input device. On
 top of that, the video module/BIOS synthesize some extra event on atkbd as an

0004-keymap-Add-support-for-Gateway-AOA110-AOA150-clones.patch:
 95-keymap.rules |    4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

Index: 0004-keymap-Add-support-for-Gateway-AOA110-AOA150-clones.patch
===================================================================
RCS file: /cvs/pkgs/rpms/udev/devel/0004-keymap-Add-support-for-Gateway-AOA110-AOA150-clones.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -p -r1.1 -r1.2
--- 0004-keymap-Add-support-for-Gateway-AOA110-AOA150-clones.patch	19 Mar 2010 12:48:13 -0000	1.1
+++ 0004-keymap-Add-support-for-Gateway-AOA110-AOA150-clones.patch	13 Apr 2010 15:09:32 -0000	1.2
@@ -1,7 +1,7 @@
 From 063985ef7dd6050f33920700777831426b221697 Mon Sep 17 00:00:00 2001
 From: Robert Hooker <sarvatt at ubuntu.com>
 Date: Sun, 7 Feb 2010 13:56:27 -0500
-Subject: [PATCH 04/36] keymap: Add support for Gateway AOA110/AOA150 clones.
+Subject: [PATCH 04/65] keymap: Add support for Gateway AOA110/AOA150 clones.
 
 https://launchpad.net/bugs/518496
 

0005-keymap-Fix-LG-X110.patch:
 Makefile.am                   |    1 +
 extras/keymap/95-keymap.rules |    3 +--
 extras/keymap/keymaps/lg-x110 |   13 ++++++++++++-
 3 files changed, 14 insertions(+), 3 deletions(-)

Index: 0005-keymap-Fix-LG-X110.patch
===================================================================
RCS file: /cvs/pkgs/rpms/udev/devel/0005-keymap-Fix-LG-X110.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -p -r1.1 -r1.2
--- 0005-keymap-Fix-LG-X110.patch	19 Mar 2010 12:48:13 -0000	1.1
+++ 0005-keymap-Fix-LG-X110.patch	13 Apr 2010 15:09:32 -0000	1.2
@@ -1,7 +1,7 @@
 From 4c514e31734a704ca58e543fa4330616ba584b39 Mon Sep 17 00:00:00 2001
 From: Martin Pitt <martin.pitt at ubuntu.com>
 Date: Fri, 12 Feb 2010 19:25:47 +0100
-Subject: [PATCH 05/36] keymap: Fix LG X110
+Subject: [PATCH 05/65] keymap: Fix LG X110
 
 The LG X110 is not a perfect clone of the MSI Wind after all, and needs its own
 keymap. Thanks to Konstantin Lavrov!

0006-Force-key-release-for-volume-keys-on-Dell-Studio-155.patch:
 Makefile.am                                       |    3 ++-
 extras/keymap/95-keyboard-force-release.rules     |    2 ++
 extras/keymap/force-release-maps/dell-studio-1557 |    4 +++-
 3 files changed, 7 insertions(+), 2 deletions(-)

Index: 0006-Force-key-release-for-volume-keys-on-Dell-Studio-155.patch
===================================================================
RCS file: /cvs/pkgs/rpms/udev/devel/0006-Force-key-release-for-volume-keys-on-Dell-Studio-155.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -p -r1.1 -r1.2
--- 0006-Force-key-release-for-volume-keys-on-Dell-Studio-155.patch	19 Mar 2010 12:48:13 -0000	1.1
+++ 0006-Force-key-release-for-volume-keys-on-Dell-Studio-155.patch	13 Apr 2010 15:09:32 -0000	1.2
@@ -1,7 +1,7 @@
 From b15bb8019094797aee65f35e3e654354b61bfd7b Mon Sep 17 00:00:00 2001
 From: Jerone Young <jerone.young at canonical.com>
 Date: Fri, 12 Feb 2010 18:08:08 -0600
-Subject: [PATCH 06/36] Force key release for volume keys on Dell Studio 1557
+Subject: [PATCH 06/65] Force key release for volume keys on Dell Studio 1557
 
 Dell Studio 1557 does not generate a release code when the volume keys
 are pressed, causing them to generate infinite key presses. This forces

0007-keymap-Add-Toshiba-Satellite-M30X.patch:
 Makefile.am                                  |    1 +
 extras/keymap/95-keymap.rules                |    1 +
 extras/keymap/keymaps/toshiba-satellite_m30x |    8 +++++++-
 3 files changed, 9 insertions(+), 1 deletion(-)

Index: 0007-keymap-Add-Toshiba-Satellite-M30X.patch
===================================================================
RCS file: /cvs/pkgs/rpms/udev/devel/0007-keymap-Add-Toshiba-Satellite-M30X.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -p -r1.1 -r1.2
--- 0007-keymap-Add-Toshiba-Satellite-M30X.patch	19 Mar 2010 12:48:13 -0000	1.1
+++ 0007-keymap-Add-Toshiba-Satellite-M30X.patch	13 Apr 2010 15:09:32 -0000	1.2
@@ -1,7 +1,7 @@
 From 4ca91a04e8b727a079a973fdd9bc2b093e8315a5 Mon Sep 17 00:00:00 2001
 From: Martin Pitt <martin.pitt at ubuntu.com>
 Date: Mon, 15 Feb 2010 13:15:25 +0100
-Subject: [PATCH 07/36] keymap: Add Toshiba Satellite M30X
+Subject: [PATCH 07/65] keymap: Add Toshiba Satellite M30X
 
 Thanks to Alessio Gaeta!
 

0013-keymap-Add-Samsung-Q210-P210-force-release-quirk.patch:
 95-keyboard-force-release.rules |    3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

Index: 0013-keymap-Add-Samsung-Q210-P210-force-release-quirk.patch
===================================================================
RCS file: /cvs/pkgs/rpms/udev/devel/0013-keymap-Add-Samsung-Q210-P210-force-release-quirk.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -p -r1.1 -r1.2
--- 0013-keymap-Add-Samsung-Q210-P210-force-release-quirk.patch	19 Mar 2010 12:48:13 -0000	1.1
+++ 0013-keymap-Add-Samsung-Q210-P210-force-release-quirk.patch	13 Apr 2010 15:09:33 -0000	1.2
@@ -1,7 +1,7 @@
 From 20b48c3727eef1f266cbfd6bf5854b5c1419beb9 Mon Sep 17 00:00:00 2001
 From: Andy Whitcroft <apw at canonical.com>
 Date: Tue, 2 Mar 2010 13:55:03 +0100
-Subject: [PATCH 13/36] keymap: Add Samsung Q210/P210 force-release quirk
+Subject: [PATCH 13/65] keymap: Add Samsung Q210/P210 force-release quirk
 
 The Samsung Q210/P210 laptop also needs all of its function keys quirked.
 

0014-keymap-Add-Fujitsu-Amilo-1848-u-force-release-quirk.patch:
 Makefile.am                                           |    1 +
 extras/keymap/95-keyboard-force-release.rules         |    2 ++
 extras/keymap/force-release-maps/fujitsu-amilo-si1848 |    4 +++-
 3 files changed, 6 insertions(+), 1 deletion(-)

Index: 0014-keymap-Add-Fujitsu-Amilo-1848-u-force-release-quirk.patch
===================================================================
RCS file: /cvs/pkgs/rpms/udev/devel/0014-keymap-Add-Fujitsu-Amilo-1848-u-force-release-quirk.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -p -r1.1 -r1.2
--- 0014-keymap-Add-Fujitsu-Amilo-1848-u-force-release-quirk.patch	19 Mar 2010 12:48:13 -0000	1.1
+++ 0014-keymap-Add-Fujitsu-Amilo-1848-u-force-release-quirk.patch	13 Apr 2010 15:09:33 -0000	1.2
@@ -1,7 +1,7 @@
 From da96a11b9c9164447bef206db47c405342ab8daa Mon Sep 17 00:00:00 2001
 From: Andy Whitcroft <apw at canonical.com>
 Date: Tue, 2 Mar 2010 14:00:32 +0100
-Subject: [PATCH 14/36] keymap: Add Fujitsu Amilo 1848+u  force-release quirk
+Subject: [PATCH 14/65] keymap: Add Fujitsu Amilo 1848+u  force-release quirk
 
 The Fujitsu Amilo Si 1848+u laptop requires the volume and mute keys
 quirking.

0015-Decrease-buffer-size-when-advancing-past-NUL-byte.patch:
 libudev-device.c |    3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Index: 0015-Decrease-buffer-size-when-advancing-past-NUL-byte.patch
===================================================================
RCS file: /cvs/pkgs/rpms/udev/devel/0015-Decrease-buffer-size-when-advancing-past-NUL-byte.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -p -r1.1 -r1.2
--- 0015-Decrease-buffer-size-when-advancing-past-NUL-byte.patch	19 Mar 2010 12:48:13 -0000	1.1
+++ 0015-Decrease-buffer-size-when-advancing-past-NUL-byte.patch	13 Apr 2010 15:09:33 -0000	1.2
@@ -1,7 +1,7 @@
 From ecd42de2c56b4fcf0069b8b4a4d6607710e5de61 Mon Sep 17 00:00:00 2001
 From: David Zeuthen <davidz at redhat.com>
 Date: Tue, 2 Mar 2010 17:06:33 -0500
-Subject: [PATCH 15/36] Decrease buffer size when advancing past NUL byte
+Subject: [PATCH 15/65] Decrease buffer size when advancing past NUL byte
 
 Otherwise we'll overflow the buffer if space is tight. Also add a comment explaining this.
 

0016-Use-UTIL_LINE_SIZE-not-UTIL_PATH_SIZE-to-truncate-pr.patch:
 libudev-device.c |    3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

Index: 0016-Use-UTIL_LINE_SIZE-not-UTIL_PATH_SIZE-to-truncate-pr.patch
===================================================================
RCS file: /cvs/pkgs/rpms/udev/devel/0016-Use-UTIL_LINE_SIZE-not-UTIL_PATH_SIZE-to-truncate-pr.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -p -r1.1 -r1.2
--- 0016-Use-UTIL_LINE_SIZE-not-UTIL_PATH_SIZE-to-truncate-pr.patch	19 Mar 2010 12:48:13 -0000	1.1
+++ 0016-Use-UTIL_LINE_SIZE-not-UTIL_PATH_SIZE-to-truncate-pr.patch	13 Apr 2010 15:09:33 -0000	1.2
@@ -1,7 +1,7 @@
 From 3a19299202b5d34b89d5910fde25e8a4cfa2b31a Mon Sep 17 00:00:00 2001
 From: David Zeuthen <davidz at redhat.com>
 Date: Tue, 2 Mar 2010 17:07:14 -0500
-Subject: [PATCH 16/36] Use UTIL_LINE_SIZE, not UTIL_PATH_SIZE to truncate properties
+Subject: [PATCH 16/65] Use UTIL_LINE_SIZE, not UTIL_PATH_SIZE to truncate properties
 
 Signed-off-by: David Zeuthen <davidz at redhat.com>
 ---

0017-Increase-UTIL_LINE_SIZE-from-2048-to-16384.patch:
 libudev-private.h |    3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

Index: 0017-Increase-UTIL_LINE_SIZE-from-2048-to-16384.patch
===================================================================
RCS file: /cvs/pkgs/rpms/udev/devel/0017-Increase-UTIL_LINE_SIZE-from-2048-to-16384.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -p -r1.1 -r1.2
--- 0017-Increase-UTIL_LINE_SIZE-from-2048-to-16384.patch	19 Mar 2010 12:48:13 -0000	1.1
+++ 0017-Increase-UTIL_LINE_SIZE-from-2048-to-16384.patch	13 Apr 2010 15:09:33 -0000	1.2
@@ -1,7 +1,7 @@
 From e32d5237ea045045c621edba7341631abd602d74 Mon Sep 17 00:00:00 2001
 From: David Zeuthen <davidz at redhat.com>
 Date: Tue, 2 Mar 2010 17:10:02 -0500
-Subject: [PATCH 17/36] Increase UTIL_LINE_SIZE from 2048 to 16384
+Subject: [PATCH 17/65] Increase UTIL_LINE_SIZE from 2048 to 16384
 
 Recent udisks versions, for LVM2 integration, ships with probers that
 produce very long lines such as

0018-Fix-virtio-ports-rule-to-use-attr-instead-of-ATTR.patch:
 50-udev-default.rules |    3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

Index: 0018-Fix-virtio-ports-rule-to-use-attr-instead-of-ATTR.patch
===================================================================
RCS file: /cvs/pkgs/rpms/udev/devel/0018-Fix-virtio-ports-rule-to-use-attr-instead-of-ATTR.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -p -r1.1 -r1.2
--- 0018-Fix-virtio-ports-rule-to-use-attr-instead-of-ATTR.patch	19 Mar 2010 12:48:13 -0000	1.1
+++ 0018-Fix-virtio-ports-rule-to-use-attr-instead-of-ATTR.patch	13 Apr 2010 15:09:34 -0000	1.2
@@ -1,7 +1,7 @@
 From 3c4b1738a9d591d7ddce361ea184b76b253c4e87 Mon Sep 17 00:00:00 2001
 From: Amit Shah <amit.shah at redhat.com>
 Date: Fri, 26 Feb 2010 14:05:41 +0530
-Subject: [PATCH 18/36] Fix virtio-ports rule to use $attr instead of $ATTR
+Subject: [PATCH 18/65] Fix virtio-ports rule to use $attr instead of $ATTR
 
 Newer udev versions don't understand $ATTR.
 

0019-udev-acl-Correctly-handle-ENV-ACL_MANAGE-0.patch:
 70-acl.rules |    2 +-
 udev-acl.c   |    3 +--
 2 files changed, 2 insertions(+), 3 deletions(-)

Index: 0019-udev-acl-Correctly-handle-ENV-ACL_MANAGE-0.patch
===================================================================
RCS file: /cvs/pkgs/rpms/udev/devel/0019-udev-acl-Correctly-handle-ENV-ACL_MANAGE-0.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -p -r1.1 -r1.2
--- 0019-udev-acl-Correctly-handle-ENV-ACL_MANAGE-0.patch	19 Mar 2010 12:48:13 -0000	1.1
+++ 0019-udev-acl-Correctly-handle-ENV-ACL_MANAGE-0.patch	13 Apr 2010 15:09:34 -0000	1.2
@@ -1,7 +1,7 @@
 From 5c3ebbf35a2c101e0212c7066f0d65e457fcf40c Mon Sep 17 00:00:00 2001
 From: Martin Pitt <martin.pitt at ubuntu.com>
 Date: Thu, 4 Mar 2010 00:48:59 +0100
-Subject: [PATCH 19/36] udev-acl: Correctly handle ENV{ACL_MANAGE}==0
+Subject: [PATCH 19/65] udev-acl: Correctly handle ENV{ACL_MANAGE}==0
 MIME-Version: 1.0
 Content-Type: text/plain; charset=UTF-8
 Content-Transfer-Encoding: 8bit

0021-input_id-Fix-linking.patch:
 Makefile.am |    3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

Index: 0021-input_id-Fix-linking.patch
===================================================================
RCS file: /cvs/pkgs/rpms/udev/devel/0021-input_id-Fix-linking.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -p -r1.1 -r1.2
--- 0021-input_id-Fix-linking.patch	19 Mar 2010 12:48:14 -0000	1.1
+++ 0021-input_id-Fix-linking.patch	13 Apr 2010 15:09:34 -0000	1.2
@@ -1,7 +1,7 @@
 From a245a97b4e805c65ce22659742371550ccf002c1 Mon Sep 17 00:00:00 2001
 From: Martin Pitt <martin.pitt at ubuntu.com>
 Date: Wed, 10 Mar 2010 12:17:03 +0100
-Subject: [PATCH 21/36] input_id: Fix linking
+Subject: [PATCH 21/65] input_id: Fix linking
 
 Link against libudev-private.a instead of libudev.a, to avoid runtime
 dependency to libudev.

0022-replace-utimes-with-utimensat.patch:
 udev-node.c |    5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

Index: 0022-replace-utimes-with-utimensat.patch
===================================================================
RCS file: /cvs/pkgs/rpms/udev/devel/0022-replace-utimes-with-utimensat.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -p -r1.1 -r1.2
--- 0022-replace-utimes-with-utimensat.patch	19 Mar 2010 12:48:14 -0000	1.1
+++ 0022-replace-utimes-with-utimensat.patch	13 Apr 2010 15:09:35 -0000	1.2
@@ -1,7 +1,7 @@
 From 455f792e4791e037eb0406005b92c345cf0baf56 Mon Sep 17 00:00:00 2001
 From: Kay Sievers <kay.sievers at vrfy.org>
 Date: Wed, 10 Mar 2010 14:43:07 +0100
-Subject: [PATCH 22/36] replace utimes() with utimensat()
+Subject: [PATCH 22/65] replace utimes() with utimensat()
 
 ---
  udev/udev-node.c |    4 ++--

0029-firmware-fix-possible-segfault-when-firmware-device-.patch:
 firmware.c |   10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

Index: 0029-firmware-fix-possible-segfault-when-firmware-device-.patch
===================================================================
RCS file: /cvs/pkgs/rpms/udev/devel/0029-firmware-fix-possible-segfault-when-firmware-device-.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -p -r1.1 -r1.2
--- 0029-firmware-fix-possible-segfault-when-firmware-device-.patch	19 Mar 2010 12:48:14 -0000	1.1
+++ 0029-firmware-fix-possible-segfault-when-firmware-device-.patch	13 Apr 2010 15:09:35 -0000	1.2
@@ -1,7 +1,7 @@
 From d44c27c5ab71dbbcfcf4745977027502309dd795 Mon Sep 17 00:00:00 2001
 From: Kay Sievers <kay.sievers at vrfy.org>
 Date: Tue, 16 Mar 2010 10:57:44 +0100
-Subject: [PATCH 29/36] firmware: fix possible segfault when firmware device goes away while loading
+Subject: [PATCH 29/65] firmware: fix possible segfault when firmware device goes away while loading
 
 Thanks to Ruediger Oertel.
 ---

0030-rules-input-create-by-path-links-for-pci-devices.patch:
 60-persistent-input.rules |    3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

Index: 0030-rules-input-create-by-path-links-for-pci-devices.patch
===================================================================
RCS file: /cvs/pkgs/rpms/udev/devel/0030-rules-input-create-by-path-links-for-pci-devices.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -p -r1.1 -r1.2
--- 0030-rules-input-create-by-path-links-for-pci-devices.patch	19 Mar 2010 12:48:14 -0000	1.1
+++ 0030-rules-input-create-by-path-links-for-pci-devices.patch	13 Apr 2010 15:09:36 -0000	1.2
@@ -1,7 +1,7 @@
 From 6b32e8192934619f787c3b5b6f0fe40c32d7d94a Mon Sep 17 00:00:00 2001
 From: Marco d'Itri <md at linux.it>
 Date: Tue, 16 Mar 2010 12:44:43 +0100
-Subject: [PATCH 30/36] rules: input - create by-path/ links for pci devices
+Subject: [PATCH 30/65] rules: input - create by-path/ links for pci devices
 
 ---
  rules/rules.d/60-persistent-input.rules |    2 +-

0031-Fix-switching-Logitech-bluetooth-adapters-into-hci-m.patch:
 70-hid2hci.rules |    5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

Index: 0031-Fix-switching-Logitech-bluetooth-adapters-into-hci-m.patch
===================================================================
RCS file: /cvs/pkgs/rpms/udev/devel/0031-Fix-switching-Logitech-bluetooth-adapters-into-hci-m.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -p -r1.1 -r1.2
--- 0031-Fix-switching-Logitech-bluetooth-adapters-into-hci-m.patch	19 Mar 2010 12:48:14 -0000	1.1
+++ 0031-Fix-switching-Logitech-bluetooth-adapters-into-hci-m.patch	13 Apr 2010 15:09:36 -0000	1.2
@@ -1,7 +1,7 @@
 From 2b463cb050cbf77d9c6b51e0f5a9d89bf7eb1bc3 Mon Sep 17 00:00:00 2001
 From: Marco d'Itri <md at linux.it>
 Date: Tue, 16 Mar 2010 12:47:42 +0100
-Subject: [PATCH 31/36] Fix switching Logitech bluetooth adapters into hci mode.
+Subject: [PATCH 31/65] Fix switching Logitech bluetooth adapters into hci mode.
 
 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=567237
 https://bugs.launchpad.net/ubuntu/+source/udev/+bug/444420

0032-do-not-reset-SELinux-context-when-the-node-was-not-t.patch:
 udev-node.c |   43 +++++++++++++++++--------------------------
 1 file changed, 17 insertions(+), 26 deletions(-)

Index: 0032-do-not-reset-SELinux-context-when-the-node-was-not-t.patch
===================================================================
RCS file: /cvs/pkgs/rpms/udev/devel/0032-do-not-reset-SELinux-context-when-the-node-was-not-t.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -p -r1.1 -r1.2
--- 0032-do-not-reset-SELinux-context-when-the-node-was-not-t.patch	19 Mar 2010 12:48:14 -0000	1.1
+++ 0032-do-not-reset-SELinux-context-when-the-node-was-not-t.patch	13 Apr 2010 15:09:36 -0000	1.2
@@ -1,7 +1,7 @@
 From 578cc8a8085a47c963b5940459e475ac5f07219c Mon Sep 17 00:00:00 2001
 From: Kay Sievers <kay.sievers at vrfy.org>
 Date: Wed, 17 Mar 2010 09:15:18 +0100
-Subject: [PATCH 32/36] do not reset SELinux context when the node was not touched
+Subject: [PATCH 32/65] do not reset SELinux context when the node was not touched
 
 ---
  udev/udev-node.c |   42 +++++++++++++++++-------------------------

0034-add-LGPL-COPYING-to-libudev-and-GUdev.patch:
 extras/gudev/COPYING |  504 ++++++++++++++++++++++++++++++++++++++++++++++++++
 libudev/COPYING      |  505 ++++++++++++++++++++++++++++++++++++++++++++++++++-
 2 files changed, 1008 insertions(+), 1 deletion(-)

Index: 0034-add-LGPL-COPYING-to-libudev-and-GUdev.patch
===================================================================
RCS file: /cvs/pkgs/rpms/udev/devel/0034-add-LGPL-COPYING-to-libudev-and-GUdev.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -p -r1.1 -r1.2
--- 0034-add-LGPL-COPYING-to-libudev-and-GUdev.patch	19 Mar 2010 12:48:14 -0000	1.1
+++ 0034-add-LGPL-COPYING-to-libudev-and-GUdev.patch	13 Apr 2010 15:09:36 -0000	1.2
@@ -1,7 +1,7 @@
 From 23325a66ccf3a2f90a4f5d1702f60408187de28a Mon Sep 17 00:00:00 2001
 From: Kay Sievers <kay.sievers at vrfy.org>
 Date: Thu, 18 Mar 2010 09:57:44 +0100
-Subject: [PATCH 34/36] add LGPL COPYING to libudev and GUdev
+Subject: [PATCH 34/65] add LGPL COPYING to libudev and GUdev
 
 ---
  extras/gudev/COPYING |  504 ++++++++++++++++++++++++++++++++++++++++++++++++++

0035-cdrom_id-open-non-mounted-optical-media-with-O_EXCL.patch:
 cdrom_id.c |   27 +++++++++++++++++++++++++--
 1 file changed, 25 insertions(+), 2 deletions(-)

Index: 0035-cdrom_id-open-non-mounted-optical-media-with-O_EXCL.patch
===================================================================
RCS file: /cvs/pkgs/rpms/udev/devel/0035-cdrom_id-open-non-mounted-optical-media-with-O_EXCL.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -p -r1.1 -r1.2
--- 0035-cdrom_id-open-non-mounted-optical-media-with-O_EXCL.patch	19 Mar 2010 12:48:14 -0000	1.1
+++ 0035-cdrom_id-open-non-mounted-optical-media-with-O_EXCL.patch	13 Apr 2010 15:09:36 -0000	1.2
@@ -1,7 +1,7 @@
 From 38a3cde11bc77af49a96245b8a8a0f2b583a344c Mon Sep 17 00:00:00 2001
 From: Kay Sievers <kay.sievers at vrfy.org>
 Date: Thu, 18 Mar 2010 11:14:32 +0100
-Subject: [PATCH 35/36] cdrom_id: open non-mounted optical media with O_EXCL
+Subject: [PATCH 35/65] cdrom_id: open non-mounted optical media with O_EXCL
 
 This should prevent confusing drives during CD burning sessions. Based
 on a patch from Harald Hoyer.

0036-modeswitch-morph-into-tool-that-only-switches-Mobile.patch:
 b/Makefile.am                                                |   27 
 b/extras/mobile-action-modeswitch/61-mobile-action.rules     |   15 
 b/extras/mobile-action-modeswitch/ma8280p_us.c               |  462 +++++++++++
 b/extras/mobile-action-modeswitch/ma8280p_us.h               |   24 
 b/extras/mobile-action-modeswitch/mobile-action-modeswitch.c |  262 ++++++
 b/extras/mobile-action-modeswitch/utils.c                    |   83 +
 b/extras/mobile-action-modeswitch/utils.h                    |   32 
 extras/modem-modeswitch/61-mobile-action.rules               |   15 
 extras/modem-modeswitch/61-option-modem-modeswitch.rules     |   44 -
 extras/modem-modeswitch/ma8280p_us.c                         |  462 -----------
 extras/modem-modeswitch/ma8280p_us.h                         |   24 
 extras/modem-modeswitch/modem-modeswitch.c                   |  266 ------
 extras/modem-modeswitch/option.c                             |  131 ---
 extras/modem-modeswitch/option.h                             |   29 
 extras/modem-modeswitch/utils.c                              |   83 -
 extras/modem-modeswitch/utils.h                              |   33 
 16 files changed, 890 insertions(+), 1102 deletions(-)

Index: 0036-modeswitch-morph-into-tool-that-only-switches-Mobile.patch
===================================================================
RCS file: /cvs/pkgs/rpms/udev/devel/0036-modeswitch-morph-into-tool-that-only-switches-Mobile.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -p -r1.1 -r1.2
--- 0036-modeswitch-morph-into-tool-that-only-switches-Mobile.patch	19 Mar 2010 12:48:14 -0000	1.1
+++ 0036-modeswitch-morph-into-tool-that-only-switches-Mobile.patch	13 Apr 2010 15:09:36 -0000	1.2
@@ -1,7 +1,7 @@
 From 4dd9b291354e76f34b0d6d7b5c3b28d03a624418 Mon Sep 17 00:00:00 2001
 From: Dan Williams <dcbw at redhat.com>
 Date: Thu, 18 Mar 2010 17:13:59 -0700
-Subject: [PATCH 36/36] modeswitch: morph into tool that only switches Mobile Action cables
+Subject: [PATCH 36/65] modeswitch: morph into tool that only switches Mobile Action cables
 
 Remove option modeswitching code; use usb_modeswitch already, people.
 ---


Index: udev.spec
===================================================================
RCS file: /cvs/pkgs/rpms/udev/devel/udev.spec,v
retrieving revision 1.307
retrieving revision 1.308
diff -u -p -r1.307 -r1.308
--- udev.spec	22 Mar 2010 14:25:24 -0000	1.307
+++ udev.spec	13 Apr 2010 15:09:40 -0000	1.308
@@ -4,8 +4,8 @@
 
 Summary: A userspace implementation of devfs
 Name: udev
-Version: 151
-Release: 8%{?dist}
+Version: 152
+Release: 0.1.20100413git%{?dist}
 License: GPLv2
 Group: System Environment/Base
 Provides: udev-persistent = %{version}-%{release}
@@ -13,6 +13,7 @@ Obsoletes: udev-persistent < 0:030-5
 Obsoletes: udev-extras < 20090618
 Provides: udev-extras = 20090618-1
 Source: ftp://ftp.kernel.org/pub/linux/utils/kernel/hotplug/%{name}-%{version}.tar.bz2
+
 Patch1: 0001-firmware-fix-error-reporting-on-missing-firmware-fil.patch
 Patch2: 0002-keymap-Add-Dell-Inspiron-1011-Mini-10.patch
 Patch3: 0003-Fix-brightness-keys-on-MSI-Wind-U-100.patch
@@ -20,6 +21,11 @@ Patch4: 0004-keymap-Add-support-for-Gate
 Patch5: 0005-keymap-Fix-LG-X110.patch
 Patch6: 0006-Force-key-release-for-volume-keys-on-Dell-Studio-155.patch
 Patch7: 0007-keymap-Add-Toshiba-Satellite-M30X.patch
+Patch8: 0008-libudev-export-udev_monitor_set_receive_buffer_size.patch
+Patch9: 0009-udevadm-monitor-increase-netlink-buffer-size.patch
+Patch10: 0010-libudev-bump-minor-version.patch
+Patch11: 0011-udevadm-fix-untested-and-broken-commit-to-set-buffer.patch
+Patch12: 0012-configure.ac-version-bump.patch
 Patch13: 0013-keymap-Add-Samsung-Q210-P210-force-release-quirk.patch
 Patch14: 0014-keymap-Add-Fujitsu-Amilo-1848-u-force-release-quirk.patch
 Patch15: 0015-Decrease-buffer-size-when-advancing-past-NUL-byte.patch
@@ -27,18 +33,54 @@ Patch16: 0016-Use-UTIL_LINE_SIZE-not-UTI
 Patch17: 0017-Increase-UTIL_LINE_SIZE-from-2048-to-16384.patch
 Patch18: 0018-Fix-virtio-ports-rule-to-use-attr-instead-of-ATTR.patch
 Patch19: 0019-udev-acl-Correctly-handle-ENV-ACL_MANAGE-0.patch
+Patch20: 0020-udev-acl-no-not-encourage-use-of-ACL_MANAGE-outside-.patch
 Patch21: 0021-input_id-Fix-linking.patch
 Patch22: 0022-replace-utimes-with-utimensat.patch
+Patch23: 0023-libbudev-private-rename-udev_list_entry_get_flag.patch
+Patch24: 0024-udevadm-monitor-use-as-separator-in-subsystem-match-.patch
+Patch25: 0025-use-major-minor-as-entries-in-symlink-stack-instead-.patch
+Patch26: 0026-use-major-minor-as-entries-in-watch-directory.patch
+#Patch27: 0027-libudev-docs-.gitignore-backup-files.patch
+Patch28: 0028-udev-needs-automake-1.10.patch
 Patch29: 0029-firmware-fix-possible-segfault-when-firmware-device-.patch
 Patch30: 0030-rules-input-create-by-path-links-for-pci-devices.patch
 Patch31: 0031-Fix-switching-Logitech-bluetooth-adapters-into-hci-m.patch
 Patch32: 0032-do-not-reset-SELinux-context-when-the-node-was-not-t.patch
+Patch33: 0033-libudev-add-udev_device_new_from_environment.patch
 Patch34: 0034-add-LGPL-COPYING-to-libudev-and-GUdev.patch
 Patch35: 0035-cdrom_id-open-non-mounted-optical-media-with-O_EXCL.patch
 Patch36: 0036-modeswitch-morph-into-tool-that-only-switches-Mobile.patch
+Patch37: 0037-rules-virtio-fix-is-to-check-if-the-name-attribute-i.patch
+Patch38: 0038-keymap-Add-Acer-TravelMate-6593G-and-Acer-Aspire-164.patch
+Patch39: 0039-keymap-Fix-another-key-for-Acer-TravelMate-6593.patch
+Patch40: 0040-libudev-update-documentation.patch
+Patch41: 0041-Fix-Keymapping-for-upcoming-Dell-Laptops.patch
+Patch42: 0042-Add-new-Dell-touchpad-keycode.patch
+Patch43: 0043-Revert-special-casing-0xD8-to-latitude-XT-only.patch
+Patch44: 0044-Fix-Dell-Studio-1558-volume-keys-not-releasing.patch
+Patch45: 0045-Add-support-for-another-Dell-touchpad-toggle-key.patch
+#Patch46: 0046-extras-mobile-action-modeswitch-update-gitignore.patch
+Patch47: 0047-scsi_id-add-rand-in-retry-loop.patch
+Patch48: 0048-cdrom_id-remove-debugging-code.patch
+Patch49: 0049-cdrom_id-retry-to-open-the-device-if-EBUSY.patch
+Patch50: 0050-cdrom_id-check-mount-state-in-retry-loop.patch
+Patch51: 0051-cdrom_id-always-set-ID_CDROM-regardless-if-we-can-ru.patch
+Patch52: 0052-rules-delete-outdated-packagees-rules.patch
+Patch53: 0053-rules-we-do-not-have-static-devices-which-are-rename.patch
+Patch54: 0054-unify-cleanup-event-handling.patch
+Patch55: 0055-allow-IMPORT-db-KEY.patch
+Patch56: 0056-usb-db-remove-double.patch
+Patch57: 0057-replace-add-change-with-remove.patch
+Patch58: 0058-update-NEWS.patch
+Patch59: 0059-log-info-only-if-we-actually-delete-the-node.patch
+Patch60: 0060-udevadm-trigger-switch-default-action-from-add-to-ch.patch
+Patch61: 0061-remove-all_partitions-option.patch
+Patch62: 0062-cdrom_id-Fix-uninitialized-variables.patch
+Patch63: 0063-rules-call-modprobe-on-all-events-but-remove.patch
+Patch64: 0064-remove-ignore_remove-option.patch
+Patch65: 0065-cdrom_id-Fix-uninitialized-buffers.patch
 
 Patch101: udev-151-rules.patch
-Patch102: udev-151-virtio.patch
 Patch103: udev-151-gperf.patch
 
 Source1: start_udev
@@ -143,6 +185,11 @@ glib-based applications using libudev fu
 %patch5 -p1 -b .git5
 %patch6 -p1 -b .git6
 %patch7 -p1 -b .git7
+%patch8 -p1 -b .git8
+%patch9 -p1 -b .git9
+%patch10 -p1 -b .git10
+%patch11 -p1 -b .git11
+%patch12 -p1 -b .git12
 %patch13 -p1 -b .git13
 %patch14 -p1 -b .git14
 %patch15 -p1 -b .git15
@@ -150,18 +197,55 @@ glib-based applications using libudev fu
 %patch17 -p1 -b .git17
 %patch18 -p1 -b .git18
 %patch19 -p1 -b .git19
+%patch20 -p1 -b .git20
 %patch21 -p1 -b .git21
 %patch22 -p1 -b .git22
+%patch23 -p1 -b .git23
+%patch24 -p1 -b .git24
+%patch25 -p1 -b .git25
+%patch26 -p1 -b .git26
+#%patch27 -p1 -b .git27
+%patch28 -p1 -b .git28
 %patch29 -p1 -b .git29
 %patch30 -p1 -b .git30
 %patch31 -p1 -b .git31
 %patch32 -p1 -b .git32
+%patch33 -p1 -b .git33
 %patch34 -p1 -b .git34
 %patch35 -p1 -b .git35
 %patch36 -p1 -b .git36
+%patch37 -p1 -b .git37
+%patch38 -p1 -b .git38
+%patch39 -p1 -b .git39
+%patch40 -p1 -b .git40
+%patch41 -p1 -b .git41
+%patch42 -p1 -b .git42
+%patch43 -p1 -b .git43
+%patch44 -p1 -b .git44
+%patch45 -p1 -b .git45
+#%patch46 -p1 -b .git46
+%patch47 -p1 -b .git47
+%patch48 -p1 -b .git48
+%patch49 -p1 -b .git49
+%patch50 -p1 -b .git50
+%patch51 -p1 -b .git51
+%patch52 -p1 -b .git52
+%patch53 -p1 -b .git53
+%patch54 -p1 -b .git54
+%patch55 -p1 -b .git55
+%patch56 -p1 -b .git56
+%patch57 -p1 -b .git57
+%patch58 -p1 -b .git58
+%patch59 -p1 -b .git59
+%patch60 -p1 -b .git60
+%patch61 -p1 -b .git61
+%patch62 -p1 -b .git62
+%patch63 -p1 -b .git63
+%patch64 -p1 -b .git64
+%patch65 -p1 -b .git65
+
 
 %patch101 -p1
-%patch102 -p1
 %patch103 -p1
 
 %build
@@ -207,9 +291,6 @@ for i in \
 %ifarch s390 s390x
         rules/packages/40-s390.rules \
 %endif
-        rules/packages/40-isdn.rules \
-        rules/packages/64-md-raid.rules \
-        rules/packages/64-device-mapper.rules \
         ; do
         install -m 0644 "$i"  "$RPM_BUILD_ROOT%{udev_scriptdir}/rules.d/${i##*/}"
 done
@@ -399,6 +480,9 @@ rm -rf $RPM_BUILD_ROOT
 %attr(0644,root,root) %{_libdir}/pkgconfig/gudev-1.0*
 
 %changelog
+* Tue Apr 13 2010 Harald Hoyer <harald at redhat.com> 152-0.1.20100413git
+- pre release of version 152
+
 * Mon Mar 22 2010 Harald Hoyer <harald at redhat.com> 151-8
 - only correct the timestamp, if UTC=="no"
 



More information about the scm-commits mailing list