--- ./src/rule_generator/write_cd_rules.orig	2012-01-28 18:15:46.958827013 -0600
+++ ./src/rule_generator/write_cd_rules	2013-01-17 22:58:27.294859303 -0600
@@ -3,7 +3,8 @@
 # This script is run if an optical drive lacks a rule for persistent naming.
 #
 # It adds symlinks for optical drives based on the device class determined
-# by cdrom_id and used ID_PATH to identify the device.
+# by cdrom_id and uses ID_SERIAL or ID_MODEL and ID_REVISION to
+# identify the device.
 
 # (C) 2006 Marco d'Itri <md@Linux.IT>
 #
@@ -66,37 +67,16 @@
         exit 1
 fi
 
-if [ "$1" ]; then
-        METHOD="$1"
+# ID_PATH is gone from the ata subsystem used in recent kernels, so
+# always use the by-id method:
+if [ "$ID_SERIAL" ]; then
+        RULE="ENV{ID_SERIAL}==\"$ID_SERIAL\""
+elif [ "$ID_MODEL" -a "$ID_REVISION" ]; then
+        RULE="ENV{ID_MODEL}==\"$ID_MODEL\", ENV{ID_REVISION}==\"$ID_REVISION\""
 else
-        METHOD='by-path'
-fi
-
-case "$METHOD" in
-        by-path)
-        if [ -z "$ID_PATH" ]; then
-                echo "$DEVPATH not supported by path_id. by-id may work." >&2
-                exit 1
-        fi
-        RULE="ENV{ID_PATH}==\"$ID_PATH\""
-        ;;
-
-        by-id)
-        if [ "$ID_SERIAL" ]; then
-                RULE="ENV{ID_SERIAL}==\"$ID_SERIAL\""
-        elif [ "$ID_MODEL" -a "$ID_REVISION" ]; then
-                RULE="ENV{ID_MODEL}==\"$ID_MODEL\", ENV{ID_REVISION}==\"$ID_REVISION\""
-        else
-                echo "$DEVPATH not supported by ata_id. by-path may work." >&2
-                exit 1
-        fi
-        ;;
-
-        *)
-        echo "Invalid argument (must be either by-path or by-id)." >&2
+        echo "$DEVPATH not supported by ata_id.  Unable to generate persistent rules." >&2
         exit 1
-        ;;
-esac
+fi
 
 # Prevent concurrent processes from modifying the file at the same time.
 lock_rules_file
@@ -105,18 +85,62 @@
 choose_rules_file
 
 link_num=$(find_next_available 'cdrom[0-9]*')
+[ "$link_num" = "" ] && link_num=0
 
 match="SUBSYSTEM==\"block\", ENV{ID_CDROM}==\"?*\", $RULE"
 
-comment="$ID_MODEL ($ID_PATH)"
-
+comment="$ID_MODEL ($ID_SERIAL)"
         write_rule "$match" "cdrom$link_num" "$comment"
-[ "$ID_CDROM_CD_R" -o "$ID_CDROM_CD_RW" ] && \
-        write_rule "$match" "cdrw$link_num"
-[ "$ID_CDROM_DVD" ] && \
-        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"
+        if [ "$link_num" = "0" ]; then
+                write_rule "$match" "cdrom"
+        fi
+
+        if [ "$ID_CDROM_CD_R" ]; then
+                write_rule "$match" "cdr$link_num"
+                if [ "$link_num" = "0" ]; then
+                        write_rule "$match" "cdr"
+                fi
+
+                write_rule "$match" "cdwriter$link_num"
+                if [ "$link_num" = "0" ]; then
+                        write_rule "$match" "cdwriter"
+                fi
+
+                if [ "$ID_CDROM_CD_RW" ]; then
+                        write_rule "$match" "cdrw$link_num"
+                        if [ "$link_num" = "0" ]; then
+                                write_rule "$match" "cdrw"
+                        fi
+                fi
+
+                if [ "$link_num" = "0" ]; then
+                        write_rule "$match" "writer"
+                fi
+        fi
+
+        if [  "$ID_CDROM_DVD" ]; then
+                write_rule "$match" "dvd$link_num"
+                if [ "$link_num" = "0" ]; then
+                        write_rule "$match" "dvd"
+                fi
+
+                if [ "$ID_CDROM_DVD_R" -o "$ID_CDROM_DVD_RW" -o "$ID_CDROM_DVD_RAM" ]; then
+                        write_rule "$match" "dvdr$link_num"
+                        if [ "$link_num" = "0" ]; then
+                                write_rule "$match" "dvdr"
+                        fi
+
+                        write_rule "$match" "dvdrw$link_num"
+                        if [ "$link_num" = "0" ]; then
+                                write_rule "$match" "dvdrw"
+                        fi
+
+                        write_rule "$match" "dvdwriter$link_num"
+                        if [ "$link_num" = "0" ]; then
+                                write_rule "$match" "dvdwriter"
+                        fi
+                fi
+        fi
 echo >> $RULES_FILE
 
 unlock_rules_file
