re
 Fatal: Duplicate "disk =" definition for /dev/sdb
which seems to be root of all this ...

patch 16_geometry is at fault: cleverly, the stat is omitted when the
disk is declared inaccessible. too bad, that disks are identified by
their device number, which is only determined by a stat. ergo, an
uninited var is used, which happens to still contain the value from
the previous disk entry.

the patch was supposed to fix bug #379518.
not checking the partition table is obvious, but it is beyond me why the
device node must not be stat()ed.
the attached patch Works For Me (TM).
#! /bin/sh -e
##
## All lines beginning with `## DP:' are a description of the patch.
## DP: Make sure that disks marked 'inaccessible' do not have their
## DP: partition tables checked. Fixes #379518.
## DP: Doesn't fix the crash on missing /dev nodes, unfortunately.

[ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts
patch_opts="${patch_opts:--f --no-backup-if-mismatch}"

if [ $# -ne 1 ]; then
    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument
"
    exit 1
fi
case "$1" in
       -patch) patch $patch_opts -p1 < $0;;
       -unpatch) patch $patch_opts -p1 -R < $0;;
        *)
                echo >&2 "`basename $0`: script expects -patch|-unpatch
 as argument"
                exit 1;;
esac

exit 0
@DPATCH@

diff -urN lilo-22.7.3.orig/geometry.c lilo-22.7.3/geometry.c
--- lilo-22.7.3.orig/geometry.c 2006-12-03 20:12:42.009282000 +0000
+++ lilo-22.7.3/geometry.c      2006-12-03 20:23:23.960349187 +0000
@@ -381,7 +381,8 @@
         die("do_disk: stat %s: %s",disk,strerror(errno));
     }
     if (!S_ISBLK(st.st_mode) || 
-       (has_partitions(st.st_rdev) && (MINOR(st.st_rdev) & 
P_MASK(st.st_rdev))))
+       (!cfg_get_flag(cf_disk,"inaccessible") &&
+        has_partitions(st.st_rdev) && (MINOR(st.st_rdev) & 
P_MASK(st.st_rdev))))
                die(" '%s' is not a whole disk device",disk);
 
     entry = alloc_t(DT_ENTRY);

Reply via email to