diff --git a/.cvsignore b/.gitignore similarity index 100% rename from .cvsignore rename to .gitignore diff --git a/Makefile b/Makefile deleted file mode 100644 index 79bd188..0000000 --- a/Makefile +++ /dev/null @@ -1,22 +0,0 @@ -# Makefile for source rpm: udev -# $Id: Makefile,v 1.2 2004/11/04 16:16:37 harald Exp $ -NAME := udev -SPECFILE = $(firstword $(wildcard *.spec)) -UPSTREAM_CHECKS = sign - -define find-makefile-common -for d in common ../common ../../common ; do if [ -f $$d/Makefile.common ] ; then if [ -f $$d/CVS/Root -a -w $$/Makefile.common ] ; then cd $$d ; cvs -Q update ; fi ; echo "$$d/Makefile.common" ; break ; fi ; done -endef - -MAKEFILE_COMMON := $(shell $(find-makefile-common)) - -ifeq ($(MAKEFILE_COMMON),) -# attempt a checkout -define checkout-makefile-common -test -f CVS/Root && { cvs -Q -d $$(cat CVS/Root) checkout common && echo "common/Makefile.common" ; } || { echo "ERROR: I can't figure out how to checkout the 'common' module." ; exit -1 ; } >&2 -endef - -MAKEFILE_COMMON := $(shell $(checkout-makefile-common)) -endif - -include $(MAKEFILE_COMMON) diff --git a/Prioritize-dmraid-formats-over-md-raid.patch b/Prioritize-dmraid-formats-over-md-raid.patch new file mode 100644 index 0000000..a0285ec --- /dev/null +++ b/Prioritize-dmraid-formats-over-md-raid.patch @@ -0,0 +1,34 @@ +From 0ee946c41f7fb215c2cca2469e63af9369b2b7e2 Mon Sep 17 00:00:00 2001 +From: Peter Jones +Date: Tue, 5 May 2009 14:52:38 -0400 +Subject: [PATCH] Prioritize dmraid formats over md raid. + +Since dmraid formats are what BIOS recognizes, they should be recognized +before linux's "md" raid format. +--- + extras/volume_id/lib/volume_id.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/extras/volume_id/lib/volume_id.c b/extras/volume_id/lib/volume_id.c +index 48bfd88..b3793fd 100644 +--- a/extras/volume_id/lib/volume_id.c ++++ b/extras/volume_id/lib/volume_id.c +@@ -41,7 +41,6 @@ struct prober { + }; + + static const struct prober prober_raid[] = { +- { volume_id_probe_linux_raid, { "linux_raid", } }, + { volume_id_probe_ddf_raid, { "ddf_raid", } }, + { volume_id_probe_intel_software_raid, { "isw_raid", } }, + { volume_id_probe_lsi_mega_raid, { "lsi_mega_raid", } }, +@@ -55,6 +54,7 @@ static const struct prober prober_raid[] = { + { volume_id_probe_lvm1, { "lvm1", } }, + { volume_id_probe_lvm2, { "lvm2", } }, + { volume_id_probe_highpoint_37x_raid, { "highpoint_raid", } }, ++ { volume_id_probe_linux_raid, { "linux_raid", } }, + }; + + static const struct prober prober_filesystem[] = { +-- +1.6.2.2 + diff --git a/start_udev b/start_udev index f67958e..bb47dd4 100755 --- a/start_udev +++ b/start_udev @@ -99,36 +99,27 @@ make_extra_nodes () { USE_MD5="false" [ -x /usr/bin/md5sum -a "$UDEV_USE_MAKEDEV_CACHE" == "yes" ] && USE_MD5="true" + for i in 0 1 2 3 4 5 6 7; do + [ -b /dev/loop$i ] || /bin/mknod -m 0640 /dev/loop$i b 7 $i + /bin/chown root:disk /dev/loop$i + done + + for i in 0 1 2 3; do + [ -c /dev/lp$i ] || /bin/mknod -m 0660 /dev/lp$i c 6 $i + /bin/chown root:lp /dev/lp$i + done + [ -d /dev/net ] || mkdir -p /dev/net - /bin/mknod -m 0640 /dev/loop0 b 7 0 - /bin/chown root:disk /dev/loop0 - /bin/mknod -m 0640 /dev/loop1 b 7 1 - /bin/chown root:disk /dev/loop1 - /bin/mknod -m 0640 /dev/loop2 b 7 2 - /bin/chown root:disk /dev/loop2 - /bin/mknod -m 0640 /dev/loop3 b 7 3 - /bin/chown root:disk /dev/loop3 - /bin/mknod -m 0640 /dev/loop4 b 7 4 - /bin/chown root:disk /dev/loop4 - /bin/mknod -m 0640 /dev/loop5 b 7 5 - /bin/chown root:disk /dev/loop5 - /bin/mknod -m 0640 /dev/loop6 b 7 6 - /bin/chown root:disk /dev/loop6 - /bin/mknod -m 0640 /dev/loop7 b 7 7 - /bin/chown root:disk /dev/loop7 - /bin/mknod -m 0600 /dev/net/tun c 10 200 - /bin/chown root:root /dev/net/tun - /bin/mknod -m 0600 /dev/ppp c 108 0 - /bin/chown root:root /dev/ppp - /bin/mknod -m 0660 /dev/lp0 c 6 0 - /bin/chown root:lp /dev/lp0 - /bin/mknod -m 0660 /dev/lp1 c 6 1 - /bin/chown root:lp /dev/lp1 - /bin/mknod -m 0660 /dev/lp2 c 6 2 - /bin/chown root:lp /dev/lp2 - /bin/mknod -m 0660 /dev/lp3 c 6 3 - /bin/chown root:lp /dev/lp3 - [ -x /sbin/restorecon ] && /sbin/restorecon /dev/loop0 /dev/loop1 /dev/loop2 /dev/loop3 /dev/loop4 /dev/loop5 /dev/loop6 /dev/loop7 /dev/net/tun /dev/ppp /dev/lp0 /dev/lp1 /dev/lp2 /dev/lp3 + [ -c /dev/net/tun ] || /bin/mknod -m 0600 /dev/net/tun c 10 200 + #/bin/chown root:root /dev/net/tun + + [ -c /dev/ppp ] || /bin/mknod -m 0600 /dev/ppp c 108 0 + #/bin/chown root:root /dev/ppp + + [ -c /dev/fuse ] || /bin/mknod -m 0666 /dev/fuse c 10 229 + #/bin/chown root:root /dev/fuse + + [ -x /sbin/restorecon ] && /sbin/restorecon /dev/loop0 /dev/loop1 /dev/loop2 /dev/loop3 /dev/loop4 /dev/loop5 /dev/loop6 /dev/loop7 /dev/net/tun /dev/ppp /dev/lp0 /dev/lp1 /dev/lp2 /dev/lp3 /dev/fuse if [ -x "$MAKEDEV" ]; then for i in /etc/udev/makedev.d/*.nodes; do @@ -258,6 +249,7 @@ make_extra_nodes & cmdline=$(cat /proc/cmdline) kill_udevd > "$udev_root/null" 2>&1 rm -fr $udev_root/.udev > "$udev_root/null" 2>&1 +mkdir -p $udev_root/.udev > "$udev_root/null" 2>&1 UDEV_OPTS="" if [ -f "/sys/class/tty/console/uevent" ]; then # trigger the sorted events @@ -266,7 +258,14 @@ if [ -f "/sys/class/tty/console/uevent" ]; then if strstr "$cmdline" udevtrace; then UDEV_OPTS="$UDEV_OPTS --debug-trace" fi - /sbin/udevd -d $UDEV_OPTS + + if strstr "$cmdline" udevlog; then + UDEV_OPTS="$UDEV_OPTS --debug" + /sbin/udevd -d $UDEV_OPTS 2>$udev_root/.udev/udev.log + else + /sbin/udevd -d $UDEV_OPTS + fi + wait ret=$[$ret + $?] diff --git a/udev-141-max_short.patch b/udev-141-max_short.patch new file mode 100644 index 0000000..78a0596 --- /dev/null +++ b/udev-141-max_short.patch @@ -0,0 +1,12 @@ +diff -up udev-141/extras/scsi_id/scsi_serial.c.max_short udev-141/extras/scsi_id/scsi_serial.c +--- udev-141/extras/scsi_id/scsi_serial.c.max_short 2009-09-14 18:31:54.000000000 +0200 ++++ udev-141/extras/scsi_id/scsi_serial.c 2009-09-14 18:31:57.000000000 +0200 +@@ -587,7 +587,7 @@ static int check_fill_0x83_prespc3(struc + serial[j++] = hex_str[(page_83[4+i] & 0xf0) >> 4]; + serial[j++] = hex_str[ page_83[4+i] & 0x0f]; + } +- strcpy(serial_short, serial); ++ strncpy(serial_short, serial, max_len-1); + return 0; + } + diff --git a/udev-142-rfcomm.patch b/udev-142-rfcomm.patch new file mode 100644 index 0000000..7776cc1 --- /dev/null +++ b/udev-142-rfcomm.patch @@ -0,0 +1,21 @@ +commit 6d34b6af12144a89f2b41c2c2d7613706b34122a +Author: Kay Sievers +Date: Tue Apr 28 11:24:25 2009 +0200 + + rules: add rfcomm* to group dialout + + https://bugs.launchpad.net/bugs/368109 + +diff --git a/rules/rules.d/50-udev-default.rules b/rules/rules.d/50-udev-default.rules +index 6bf45cc..6ce3e7f 100644 +--- a/rules/rules.d/50-udev-default.rules ++++ b/rules/rules.d/50-udev-default.rules +@@ -13,7 +13,7 @@ KERNEL=="vcs|vcs[0-9]*|vcsa|vcsa[0-9]*", GROUP="tty" + KERNEL=="console", MODE="0600" + + # serial +-KERNEL=="tty[A-Z]*[0-9]|pppox[0-9]*|ircomm[0-9]*|noz[0-9]*", GROUP="dialout" ++KERNEL=="tty[A-Z]*[0-9]|pppox[0-9]*|ircomm[0-9]*|noz[0-9]*|rfcomm[0-9]*", GROUP="dialout" + KERNEL=="ppp", MODE="0600" + KERNEL=="mwave", NAME="modems/mwave", GROUP="dialout" + KERNEL=="hvc*|hvsi*", GROUP="dialout" diff --git a/udev.git-055e40edc647d8ccfc27c9cd3163ab5dbf63ed6c.patch b/udev.git-055e40edc647d8ccfc27c9cd3163ab5dbf63ed6c.patch new file mode 100644 index 0000000..5915df3 --- /dev/null +++ b/udev.git-055e40edc647d8ccfc27c9cd3163ab5dbf63ed6c.patch @@ -0,0 +1,35 @@ +From: Scott James Remnant +Date: Thu, 14 May 2009 11:42:44 +0000 (+0100) +Subject: OWNER/GROUP: fix if logic +X-Git-Url: http://git.kernel.org/?p=linux%2Fhotplug%2Fudev.git;a=commitdiff_plain;h=055e40edc647d8ccfc27c9cd3163ab5dbf63ed6c + +OWNER/GROUP: fix if logic + +The introduction of the --resolve-names=early/never code introduced a +bug to the OWNER/GROUP lookup. Previously if the name had contained $, +lookup would have been performed later; after the patch, the key ended +up being ignored! +--- + +diff --git a/udev/udev-rules.c b/udev/udev-rules.c +index b8b7e52..39fe55a 100644 +--- a/udev/udev-rules.c ++++ b/udev/udev-rules.c +@@ -1431,7 +1431,7 @@ static int add_rule(struct udev_rules *rules, char *line, + } else if ((rules->resolve_names > 0) && strchr("$%", value[0]) == NULL) { + uid = add_uid(rules, value); + rule_add_key(&rule_tmp, TK_A_OWNER_ID, op, NULL, &uid); +- } else if (rules->resolve_names == 0) { ++ } else if (rules->resolve_names >= 0) { + rule_add_key(&rule_tmp, TK_A_OWNER, op, value, NULL); + } + rule_tmp.rule.rule.flags = 1; +@@ -1448,7 +1448,7 @@ static int add_rule(struct udev_rules *rules, char *line, + } else if ((rules->resolve_names > 0) && strchr("$%", value[0]) == NULL) { + gid = add_gid(rules, value); + rule_add_key(&rule_tmp, TK_A_GROUP_ID, op, NULL, &gid); +- } else if (rules->resolve_names == 0) { ++ } else if (rules->resolve_names >= 0) { + rule_add_key(&rule_tmp, TK_A_GROUP, op, value, NULL); + } + rule_tmp.rule.rule.flags = 1; diff --git a/udev.git-0c37798916bc87d72f5f1399d9e050307901db84.patch b/udev.git-0c37798916bc87d72f5f1399d9e050307901db84.patch new file mode 100644 index 0000000..fc6fcd6 --- /dev/null +++ b/udev.git-0c37798916bc87d72f5f1399d9e050307901db84.patch @@ -0,0 +1,31 @@ +From: Kay Sievers +Date: Wed, 13 May 2009 16:01:32 +0000 (+0200) +Subject: fix possible endless loop for GOTO to non-existent LABEL +X-Git-Url: http://git.kernel.org/?p=linux%2Fhotplug%2Fudev.git;a=commitdiff_plain;h=0c37798916bc87d72f5f1399d9e050307901db84 + +fix possible endless loop for GOTO to non-existent LABEL + +http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=526365 +--- + +diff --git a/udev/udev-rules.c b/udev/udev-rules.c +index fac418e..b8b7e52 100644 +--- a/udev/udev-rules.c ++++ b/udev/udev-rules.c +@@ -1610,6 +1610,7 @@ static int parse_file(struct udev_rules *rules, const char *filename, unsigned s + if (strcmp(label, &rules->buf[rules->tokens[j].rule.label_off]) != 0) + continue; + rules->tokens[i].key.rule_goto = j; ++ break; + } + if (rules->tokens[i].key.rule_goto == 0) + err(rules->udev, "GOTO '%s' has no matching label in: '%s'\n", label, filename); +@@ -2504,6 +2505,8 @@ int udev_rules_apply_to_event(struct udev_rules *rules, struct udev_event *event + break; + } + case TK_A_GOTO: ++ if (cur->key.rule_goto == 0) ++ break; + cur = &rules->tokens[cur->key.rule_goto]; + continue; + case TK_A_LAST_RULE: diff --git a/udev.git-55d8f5e208396589476583dad8f2a7f2db3e2ef5.patch b/udev.git-55d8f5e208396589476583dad8f2a7f2db3e2ef5.patch new file mode 100644 index 0000000..2ff0324 --- /dev/null +++ b/udev.git-55d8f5e208396589476583dad8f2a7f2db3e2ef5.patch @@ -0,0 +1,38 @@ +From: Kay Sievers +Date: Thu, 16 Apr 2009 22:29:56 +0000 (+0200) +Subject: cdrom_id: add Xen cdrom support +X-Git-Tag: 142~43 +X-Git-Url: http://git.kernel.org/?p=linux%2Fhotplug%2Fudev.git;a=commitdiff_plain;h=55d8f5e208396589476583dad8f2a7f2db3e2ef5 + +cdrom_id: add Xen cdrom support +--- + +diff --git a/extras/cdrom_id/60-cdrom_id.rules b/extras/cdrom_id/60-cdrom_id.rules +index 12fbf63..a3e8e3c 100644 +--- a/extras/cdrom_id/60-cdrom_id.rules ++++ b/extras/cdrom_id/60-cdrom_id.rules +@@ -1,3 +1,5 @@ +-# import optical drive properties ++# do not edit this file, it will be overwritten on update + +-ACTION=="add|change", KERNEL=="sr[0-9]*|hd[a-z]|pcd[0-9]*", IMPORT{program}="cdrom_id --export $tempnode" ++# import optical drive properties ++ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", \ ++ KERNEL=="sr[0-9]*|hd[a-z]|pcd[0-9]|xvd*", IMPORT{program}="cdrom_id --export $tempnode" +diff --git a/extras/cdrom_id/cdrom_id.c b/extras/cdrom_id/cdrom_id.c +index 7be0789..c578f12 100644 +--- a/extras/cdrom_id/cdrom_id.c ++++ b/extras/cdrom_id/cdrom_id.c +@@ -567,10 +567,8 @@ int main(int argc, char *argv[]) + } + + /* check drive */ +- if (cd_inquiry(udev, fd) < 0) { +- rc = 2; +- goto exit; +- } ++ if (cd_inquiry(udev, fd) < 0) ++ goto print; + + /* read drive and possibly current profile */ + if (cd_profiles(udev, fd) < 0) diff --git a/udev.git-b4fa1b67f86c9555cbb41c57774761730f6b8939.patch b/udev.git-b4fa1b67f86c9555cbb41c57774761730f6b8939.patch new file mode 100644 index 0000000..697af69 --- /dev/null +++ b/udev.git-b4fa1b67f86c9555cbb41c57774761730f6b8939.patch @@ -0,0 +1,45 @@ +From: Kay Sievers +Date: Thu, 14 May 2009 10:57:19 +0000 (+0200) +Subject: rule-generator: cd - skip by-path links if we create by-id links +X-Git-Url: http://git.kernel.org/?p=linux%2Fhotplug%2Fudev.git;a=commitdiff_plain;h=b4fa1b67f86c9555cbb41c57774761730f6b8939 + +rule-generator: cd - skip by-path links if we create by-id links +--- + +diff --git a/extras/rule_generator/75-cd-aliases-generator.rules b/extras/rule_generator/75-cd-aliases-generator.rules +index e357a6a..e6da010 100644 +--- a/extras/rule_generator/75-cd-aliases-generator.rules ++++ b/extras/rule_generator/75-cd-aliases-generator.rules +@@ -1,6 +1,9 @@ + # these rules generate rules for the /dev/{cdrom,dvd,...} symlinks + +-# the path of removable devices changes frequently +-ACTION=="add", SUBSYSTEM=="block", SUBSYSTEMS=="usb|ieee1394", ENV{ID_CDROM}=="?*", ENV{GENERATED}!="?*", PROGRAM="write_cd_rules by-id", SYMLINK+="%c" ++# the "path" of usb/ieee1394 devices changes frequently, use "id" ++ACTION=="add", SUBSYSTEM=="block", SUBSYSTEMS=="usb|ieee1394", ENV{ID_CDROM}=="?*", ENV{GENERATED}!="?*", \ ++ PROGRAM="write_cd_rules by-id", SYMLINK+="%c", GOTO="persistent_cd_end" + + ACTION=="add", SUBSYSTEM=="block", ENV{ID_CDROM}=="?*", ENV{GENERATED}!="?*", PROGRAM="write_cd_rules", SYMLINK+="%c" ++ ++LABEL="persistent_cd_end" +diff --git a/extras/rule_generator/write_cd_rules b/extras/rule_generator/write_cd_rules +index 398cd27..0d16fe6 100644 +--- a/extras/rule_generator/write_cd_rules ++++ b/extras/rule_generator/write_cd_rules +@@ -97,7 +97,7 @@ choose_rules_file + + link_num=$(find_next_available 'cdrom[0-9]*') + +-match="ENV{ID_CDROM}==\"?*\", $RULE" ++match="SUBSYSTEM==\"block\", ENV{ID_CDROM}==\"?*\", $RULE" + + comment="$ID_MODEL ($ID_PATH)" + +@@ -108,6 +108,7 @@ comment="$ID_MODEL ($ID_PATH)" + write_rule "$match" "dvd$link_num" + [ "$ID_CDROM_DVD_R" -o "$ID_CDROM_DVD_RW" -o "$ID_CDROM_DVD_RAM" ] && \ + write_rule "$match" "dvdrw$link_num" ++echo >> $RULES_FILE + + unlock_rules_file + diff --git a/udev.git-d3c8231e738dd286591c1becc2f327ed55ed89d1.patch b/udev.git-d3c8231e738dd286591c1becc2f327ed55ed89d1.patch new file mode 100644 index 0000000..3ba1820 --- /dev/null +++ b/udev.git-d3c8231e738dd286591c1becc2f327ed55ed89d1.patch @@ -0,0 +1,62 @@ +From: Kay Sievers +Date: Mon, 25 May 2009 22:50:45 +0000 (+0200) +Subject: cdrom_id: suppress ID_CDROM_MEDIA_STATE=blank for plain non-writable CDROM media +X-Git-Url: http://git.kernel.org/?p=linux%2Fhotplug%2Fudev.git;a=commitdiff_plain;h=d3c8231e738dd286591c1becc2f327ed55ed89d1 + +cdrom_id: suppress ID_CDROM_MEDIA_STATE=blank for plain non-writable CDROM media + +Some broken fake cdrom drives return ID_CDROM_MEDIA_STATE=blank. + + $ /lib/udev/cdrom_id -d /dev/sr1 + main: probing: '/dev/sr1' + cd_inquiry: INQUIRY: [Nokia ][S60 ][1.0 ] + cd_profiles: GET CONFIGURATION: number of profiles 76 + cd_profiles: current profile 0x08 + cd_media_toc: READ TOC: len: 12 + cd_media_toc: last track 1 starts at block 0 + cd_media_info: disk type 00 + ID_CDROM=1 + ID_CDROM_MRW=1 + ID_CDROM_MRW_W=1 + ID_CDROM_MEDIA=1 + ID_CDROM_MEDIA_CD=1 + ID_CDROM_MEDIA_STATE=blank + +Others work fine, but ID_CDROM_MEDIA_STATE is not needed for non-writable CDROM media: + + $ /lib/udev/cdrom_id -d /dev/sr1 + main: probing: '/dev/sr1' + cd_inquiry: INQUIRY: [SanDisk ][U3 Cruzer Micro ][8.02] + cd_profiles: GET CONFIGURATION: number of profiles 72 + cd_profiles: current profile 0x08 + cd_media_toc: READ TOC: len: 20 + cd_media_toc: track=1 info=0x4(data) start_block=0 + cd_media_toc: last track 1 starts at block 0 + cd_media_info: disk type 00 + ID_CDROM=1 + ID_CDROM_MRW=1 + ID_CDROM_MRW_W=1 + ID_CDROM_MEDIA=1 + ID_CDROM_MEDIA_CD=1 + ID_CDROM_MEDIA_STATE=complete + ID_CDROM_MEDIA_SESSION_COUNT=1 + ID_CDROM_MEDIA_TRACK_COUNT=1 + ID_CDROM_MEDIA_TRACK_COUNT_DATA=1 +--- + +diff --git a/extras/cdrom_id/cdrom_id.c b/extras/cdrom_id/cdrom_id.c +index 0d873ae..921e534 100644 +--- a/extras/cdrom_id/cdrom_id.c ++++ b/extras/cdrom_id/cdrom_id.c +@@ -426,8 +426,10 @@ static int cd_media_info(struct udev *udev, int fd) + + info(udev, "disk type %02x\n", header[8]); + +- if ((header[2] & 3) < 4) ++ /* exclude plain CDROM, some fake cdroms return 0 for "blank" media here */ ++ if (!cd_media_cd_rom && (header[2] & 3) < 4) + cd_media_state = media_status[header[2] & 3]; ++ + if ((header[2] & 3) != 2) + cd_media_session_next = header[10] << 8 | header[5]; + cd_media_session_count = header[9] << 8 | header[4]; diff --git a/udev.git-d6f0b22d574c6a5e5f3430be3fc619d4b2f46cd5.patch b/udev.git-d6f0b22d574c6a5e5f3430be3fc619d4b2f46cd5.patch new file mode 100644 index 0000000..f362027 --- /dev/null +++ b/udev.git-d6f0b22d574c6a5e5f3430be3fc619d4b2f46cd5.patch @@ -0,0 +1,43 @@ +From: Kay Sievers +Date: Thu, 23 Apr 2009 13:04:16 +0000 (+0200) +Subject: cdrom_id: skip media tests if CDROM_DRIVE_STATUS != CDS_DISC_OK +X-Git-Tag: 142~26 +X-Git-Url: http://git.kernel.org/?p=linux%2Fhotplug%2Fudev.git;a=commitdiff_plain;h=d6f0b22d574c6a5e5f3430be3fc619d4b2f46cd5 + +cdrom_id: skip media tests if CDROM_DRIVE_STATUS != CDS_DISC_OK +--- + +diff --git a/extras/cdrom_id/cdrom_id.c b/extras/cdrom_id/cdrom_id.c +index 371d6a2..0d873ae 100644 +--- a/extras/cdrom_id/cdrom_id.c ++++ b/extras/cdrom_id/cdrom_id.c +@@ -197,6 +197,16 @@ static int cd_capability_compat(struct udev *udev, int fd) + return 0; + } + ++static int cd_media_compat(struct udev *udev, int fd) ++{ ++ if (ioctl(fd, CDROM_DRIVE_STATUS, CDSL_CURRENT) != CDS_DISC_OK) { ++ info(udev, "CDROM_DRIVE_STATUS != CDS_DISC_OK\n"); ++ return -1; ++ } ++ cd_media = 1; ++ return 0; ++} ++ + static int cd_inquiry(struct udev *udev, int fd) { + struct scsi_cmd sc; + unsigned char inq[128]; +@@ -569,7 +579,11 @@ int main(int argc, char *argv[]) + goto exit; + } + +- /* check drive */ ++ /* check for media */ ++ if (cd_media_compat(udev, fd) < 0) ++ goto print; ++ ++ /* check if drive talks MMC */ + if (cd_inquiry(udev, fd) < 0) + goto print; + diff --git a/udev.git-f58a9099bb2b18f3f683615324a4382b95446305.patch b/udev.git-f58a9099bb2b18f3f683615324a4382b95446305.patch new file mode 100644 index 0000000..aac97b5 --- /dev/null +++ b/udev.git-f58a9099bb2b18f3f683615324a4382b95446305.patch @@ -0,0 +1,28 @@ +From: Alan Jenkins +Date: Wed, 20 May 2009 14:12:22 +0000 (+0200) +Subject: udevadm: settle - fix timeout +X-Git-Url: http://git.kernel.org/?p=linux%2Fhotplug%2Fudev.git;a=commitdiff_plain;h=f58a9099bb2b18f3f683615324a4382b95446305 + +udevadm: settle - fix timeout + +The timeout wasn't working when settle was run as root: + # udevadm control --stop-exec-queue + # udevadm trigger + # udevadm settle --timeout=1 + ... (hangs) + +Signed-off-by: Alan Jenkins +--- + +diff --git a/udev/udevadm-settle.c b/udev/udevadm-settle.c +index 3b26f10..52d9c0b 100644 +--- a/udev/udevadm-settle.c ++++ b/udev/udevadm-settle.c +@@ -167,6 +167,7 @@ int udevadm_settle(struct udev *udev, int argc, char *argv[]) + sigprocmask(SIG_BLOCK, &mask, &oldmask); + if (udev_ctrl_send_settle(uctrl) > 0) + sigsuspend(&oldmask); ++ sigprocmask(SIG_SETMASK, &oldmask, NULL); + udev_ctrl_unref(uctrl); + } + } diff --git a/udev.git-f907449eee.patch b/udev.git-f907449eee.patch new file mode 100644 index 0000000..0f53331 --- /dev/null +++ b/udev.git-f907449eee.patch @@ -0,0 +1,54 @@ +From: Kay Sievers +Date: Tue, 21 Apr 2009 01:27:14 +0000 (+0200) +Subject: cdrom_id: add and use ID_CDROM_MEDIA to decide if we run vol_id +X-Git-Url: http://git.kernel.org/?p=linux%2Fhotplug%2Fudev.git;a=commitdiff_plain;h=f907449eee + +cdrom_id: add and use ID_CDROM_MEDIA to decide if we run vol_id + +Some broken mobile phones offer a faked cdrom drive with a media +without any tracks. +--- + +diff --git a/extras/cdrom_id/cdrom_id.c b/extras/cdrom_id/cdrom_id.c +index c578f12..371d6a2 100644 +--- a/extras/cdrom_id/cdrom_id.c ++++ b/extras/cdrom_id/cdrom_id.c +@@ -76,6 +76,7 @@ static unsigned int cd_mrw; + static unsigned int cd_mrw_w; + + /* 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; +@@ -325,6 +326,8 @@ static int cd_profiles(struct udev *udev, int fd) + return -1; + } + ++ cd_media = 1; ++ + switch (cur_profile) { + case 0x03: + case 0x04: +@@ -625,6 +628,8 @@ print: + if (cd_mrw_w) + printf("ID_CDROM_MRW_W=1\n"); + ++ if (cd_media) ++ printf("ID_CDROM_MEDIA=1\n"); + if (cd_media_mo) + printf("ID_CDROM_MEDIA_MO=1\n"); + if (cd_media_mrw) +diff --git a/rules/rules.d/60-persistent-storage.rules b/rules/rules.d/60-persistent-storage.rules +index 23c21f8..4095488 100644 +--- a/rules/rules.d/60-persistent-storage.rules ++++ b/rules/rules.d/60-persistent-storage.rules +@@ -55,7 +55,7 @@ ENV{DEVTYPE}=="partition", ENV{ID_PATH}=="?*", SYMLINK+="disk/by-path/$env{ID_PA + ENV{DEVTYPE}=="disk", KERNEL!="sd*|sr*", ATTR{removable}=="1", GOTO="persistent_storage_end" + + # probe filesystem metadata of optical drives which have a media inserted +-KERNEL=="sr*", ENV{ID_CDROM_MEDIA_TRACK_COUNT}=="?*", IMPORT{program}="vol_id --export --skip-raid --offset=$env{ID_CDROM_MEDIA_SESSION_LAST_OFFSET} $tempnode" ++KERNEL=="sr*", ENV{ID_CDROM_MEDIA}=="?*", IMPORT{program}="vol_id --export --skip-raid --offset=$env{ID_CDROM_MEDIA_SESSION_LAST_OFFSET} $tempnode" + + # probe filesystem metadata of disks + KERNEL!="sr*", IMPORT{program}="vol_id --export $tempnode" diff --git a/udev.spec b/udev.spec index e3e6e9f..c1602b7 100644 --- a/udev.spec +++ b/udev.spec @@ -6,7 +6,7 @@ Summary: A userspace implementation of devfs Name: udev Version: 141 -Release: 1%{?dist} +Release: 8%{?dist} License: GPLv2 Group: System Environment/Base Provides: udev-persistent = %{version}-%{release} @@ -18,6 +18,18 @@ Source3: udev-post.init Source4: fw_unit_symlinks.sh Source5: udev.sysconfig +Patch0: udev.git-f907449eee.patch +Patch1: udev.git-055e40edc647d8ccfc27c9cd3163ab5dbf63ed6c.patch +Patch2: udev.git-0c37798916bc87d72f5f1399d9e050307901db84.patch +Patch3: udev.git-b4fa1b67f86c9555cbb41c57774761730f6b8939.patch +Patch4: udev.git-55d8f5e208396589476583dad8f2a7f2db3e2ef5.patch +Patch5: udev.git-d6f0b22d574c6a5e5f3430be3fc619d4b2f46cd5.patch +Patch6: udev.git-d3c8231e738dd286591c1becc2f327ed55ed89d1.patch +Patch7: udev.git-f58a9099bb2b18f3f683615324a4382b95446305.patch +Patch8: Prioritize-dmraid-formats-over-md-raid.patch +Patch9: udev-141-max_short.patch +Patch10: udev-142-rfcomm.patch + Patch102: udev-118-sysconf.patch ExclusiveOS: Linux @@ -91,6 +103,18 @@ dynamic library, which provides access to udev device information. %prep %setup -q +%patch0 -p1 -b .git1 +%patch1 -p1 +%patch2 -p1 +%patch3 -p1 +%patch4 -p1 +%patch5 -p1 +%patch6 -p1 +%patch7 -p1 +%patch8 -p1 +%patch9 -p1 +%patch10 -p1 + %patch102 -p1 -b .sysconf %build @@ -174,6 +198,7 @@ for i in \ rules/packages/40-s390.rules \ %endif rules/packages/40-alsa.rules \ + rules/packages/40-isdn.rules \ rules/packages/64-md-raid.rules \ rules/packages/64-device-mapper.rules \ ; do @@ -192,6 +217,7 @@ mkdir -p -m 0755 $RPM_BUILD_ROOT%{firmwaredir} mkdir -p -m 0755 $RPM_BUILD_ROOT%{_sysconfdir}/modprobe.d cat > $RPM_BUILD_ROOT%{_sysconfdir}/modprobe.d/floppy-pnp.conf </dev/null || /usr/sbin/groupadd -g 18 dialout || : %post if [ "$1" -gt 1 -a -x /sbin/pidof ]; then + udevadm control --stop-exec-queue pid=$(/sbin/pidof -c udevd) - if [ -n "$pid" ]; then - kill $pid - /sbin/udevd -d - fi + while [ -n "$pid" ]; do + for p in $pid; do + kill $hard $p; + done + pid=$(/sbin/pidof -c udevd) + hard="-9" + done + /sbin/udevd -d + udevadm control --start-exec-queue fi /sbin/chkconfig --add udev-post @@ -379,6 +416,32 @@ rm -rf $RPM_BUILD_ROOT %changelog +* Tue Feb 2 2010 John W. Linville 141-8 +- rules: add rfcomm* to group dialout (bug #561354) + +* Mon Sep 14 2009 Harald Hoyer 141-7 +- fix scsi_id segfault (bug #516920) + +* Tue Aug 04 2009 Harald Hoyer 141-6 +- try to fix audio cdrom problems (bug #513495) + +* Tue Jul 14 2009 Harald Hoyer 141-5 +- add /dev/fuse to be created by start_udev +- add "udevlog" kernel command line option to redirect the + output of udevd to /dev/.udev/udev.log + +* Tue Jun 30 2009 Harald Hoyer 141-4 +- really try to kill udevd in %post (bug #481075) +- show "isw_raid_member" before "linux_raid_member" with vol_id (bug #499246) +- add new ACPI modalias for floppy module autoloading (bug #503308) +- add isdn capi rules (bug #507241) +- backport several bugfixes from git + +* Fri Apr 24 2009 Harald Hoyer 141-3 +- cdrom_id: add and use ID_CDROM_MEDIA to decide if we run vol_id + (bug #496298) +- Resolves: rhbz#496298 + * Tue Apr 14 2009 Harald Hoyer 141-1 - version 141