[vortex] NETDEV WATCHDOG: eth0: transmit timed out

Andrew Morton andrewm@uow.edu.au
Wed, 20 Jun 2001 09:51:27 +1000


Gerrit Hannaert wrote:
> 
> Thanks Andrew,
> 
> Unfortunately I've got a bit of a recursive problem it seems now:
> 
> I am trying out Mosix, and Mosix refuses to boot properly without SMP
> which appears to be a Linux bug. I reported this to the mosix list,
> Amnon Shiloh answered the following:
> 
> > The bug is in Linux-2.4.5, in the "ioctl_by_bdev" routine of "fs/block_dev.c":
> > it fails to initiailize the "inode_fake.i_bdev" field, which therefore contains
> > a totally random value and the rest is a matter of luck.  It just happened to
> > crash with MOSIX without SMP and not on other configurations.
> >
> > The fix is not trivial - well, in this particular case of the RAM-disk,
> > just to make it work we could place a dirty hack in the beginning of
> > "rd_ioctl":
> >         if(current->pid == 0)
> >                 return(0);
> 
> So you see, I'm a bit stuck. I need SMP enabled to boot Mosix properly
> (a 2.4.5 bug), but of course Mosix won't run reliably if the network
> cards won't run reliably (for which I would need a non-SMP kernel),
> which is also a linux bug.
> 
> Any creative suggestions? Would Linus/Alan Cox hear these pleas for
> help? Incidentally I have tried the newer -ac series kernels but Mosix
> wouldn't apply to them very cleanly, and I'm not really a C programmer.
> 

That's easy - just fix the ioctl_by_bdev() bug!

--- linux/fs/block_dev.c.orig	Mon May 28 12:40:12 2001
+++ linux/fs/block_dev.c	Mon May 28 12:40:12 2001
@@ -602,6 +602,7 @@
 	if (!bdev->bd_op->ioctl)
 		return -EINVAL;
 	inode_fake.i_rdev=rdev;
+	inode_fake.i_bdev=bdev;
 	init_waitqueue_head(&inode_fake.i_wait);
 	set_fs(KERNEL_DS);
 	res = bdev->bd_op->ioctl(&inode_fake, NULL, cmd, arg);

Then run with an uniprocessor kernel.