[patch] 2.6.8 Errors during initrd loading with / on LVM over RAID

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I'm aware that devfs is being removed in 2.6.13, but this patch may still 
interest maintainers of older versions.
I've debugged this problem using kernel version 2.6.8, but a check showed 
this code is unchanged in 2.6.12. My system is Debian Sarge.

During boot using an initrd on a system having / on LVM over RAID, I 
noticed the following messages on console and in /var/log/kern.log: 

kernel: Inspecting /boot/System.map-2.6.8-2-686
kernel: Loaded 27390 symbols from /boot/System.map-2.6.8-2-686.
kernel: Symbols match kernel version 2.6.8.
kernel: No module symbols loaded - kernel modules not enabled.
kernel: ould not append to parent for /disc
kernel: devfs_mk_dir: invalid argument.<4>devfs_mk_dev: could not append 
to parent for /disc
last message repeated 151 times


Cleaned for a missing \n in a printk and with added debug printk's in
fs/devfs/base.c, this looks like:
kernel: devfs_mk_dir: invalid argument, buf: .
kernel: _devfs_append_entry: -EEXIST for :disc
kernel: devfs_mk_dev: could not append to parent for /disc
(repeated)

The last two errors are a consequence of the error in devfs_mk_dir, so
can be ignored. The basic problem is that buf is empty when devfs_mk_dir
is called.

Tracing back I ended up in fs/partitions/check.c, which has the following
code in function register_disk:

        /* No minors to use for partitions */
        if (disk->minors == 1) {
                if (disk->devfs_name[0] != '\0')
                        devfs_add_disk(disk);
                return;
        }

        /* always add handle for the whole disk */
        devfs_add_partitioned(disk);

This looks unlogical: why does the first statement check for empty
disk->devfs_name and is the second one called blindly?

Changing the last statement to:
        if (disk->devfs_name[0] != '\0')
                devfs_add_partitioned(disk);
        else
                printk(KERN_WARNING "%s: No devfs_name for %s.\n", 
__FUNCTION__, disk->disk_name);
resulted in the errors disappearing and the following log output:

kernel: register_disk: No devfs_name for md_d0.
kernel: register_disk: No devfs_name for md_d64.
kernel: register_disk: No devfs_name for md_d128.
kernel: register_disk: No devfs_name for md_d192.
kernel: register_disk: No devfs_name for md_d4.
kernel: register_disk: No devfs_name for md_d68.
kernel: register_disk: No devfs_name for md_d132.
kernel: register_disk: No devfs_name for md_d196.
(repeated to md_d255)

The attached patch fixes the problem (and adds the missing \n).

--- fs/partitions/check.c.orig	2005-05-19 12:52:23.000000000 +0200
+++ fs/partitions/check.c	2005-07-29 00:36:04.523385998 +0200
@@ -348,7 +348,8 @@
 	}
 
 	/* always add handle for the whole disk */
-	devfs_add_partitioned(disk);
+	if (disk->devfs_name[0] != '\0')
+		devfs_add_partitioned(disk);
 
 	/* No such device (e.g., media were just removed) */
 	if (!get_capacity(disk))
--- fs/devfs/base.c.orig	2005-07-29 00:32:03.329992027 +0200
+++ fs/devfs/base.c	2005-07-29 00:32:52.000008934 +0200
@@ -1644,7 +1644,7 @@
 	va_start(args, fmt);
 	n = vsnprintf(buf, 64, fmt, args);
 	if (n >= 64 || !buf[0]) {
-		printk(KERN_WARNING "%s: invalid argument.", __FUNCTION__);
+		printk(KERN_WARNING "%s: invalid argument.\n", __FUNCTION__);
 		return -EINVAL;
 	}
 

Attachment: pgp0Z7rBPgKIy.pgp
Description: PGP signature


[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]
  Powered by Linux