lkml.org 
[lkml]   [2005]   [Jul]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
From
Subject[patch] 2.6.8 Errors during initrd loading with / on LVM over RAID
Date
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;
}
[unhandled content-type:application/pgp-signature]
\
 
 \ /
  Last update: 2005-07-30 21:55    [W:0.194 / U:0.092 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site