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

Bug#320379: marked as done (Errors during initrd loading when / is on LVM over RAID)



Your message dated Mon, 21 Aug 2006 17:46:20 -0400
with message-id <20060821214620.GA6411@doctormoo.dyndns.org>
and subject line This bug is a fix to a dead part of the kernel
has caused the attached Bug report to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what I am
talking about this indicates a serious mail system misconfiguration
somewhere.  Please contact me immediately.)

Debian bug tracking system administrator
(administrator, Debian Bugs database)

--- Begin Message ---
Package: kernel
Tags: patch

After switching from a 2.4.27 to 2.6.8 kernel for an old desktop Iuse as
a server, I noticed the following messages on console and kern.log.
Note: the errors are not harmful, just ugly; the system boots normally.

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 error is a consequence of the error in devfs_mk_dir, so can
be ignored. The basic problem is that buf is empty.

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)

I've debugged using kernel version 2.6.8, but a check showed this code is
unchanged in 2.6.11 and 2.6.12.

Please review my reasoning. If I'm correct, the attached patch may fix
the errors (and fix the missing \n). If you think the patch is correct,
I would appreciate advice how best to get it upstream.
The other option would of course be that something is more fundamentally
broken and that disk->devfs_name should be filled in these cases, but
I doubt that.

Cheers,
FJP

--- 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: pgpIpCNjL3tGZ.pgp
Description: PGP signature


--- End Message ---
--- Begin Message ---
Since pre-2.6 kernels won't be in the next version of Debian, this bug is no
longer fixable (the affected code is totally gone).  Closing now.

If there is a similar bug in Linux 2.6, please file a new bug.

-- 
Nathanael Nerode  <neroden@fastmail.fm>

A thousand reasons. http://www.thousandreasons.org/
Lies, theft, war, kidnapping, torture, rape, murder...
Get me out of this fascist nightmare!

--- End Message ---

Reply to: