[PATCH] devfs Oops while re-reading part.table (fwd)

From: Andrzej Krzysztofowicz (kufel!ankry)
Date: Mon Mar 06 2000 - 19:58:21 EST


>From ankry Tue Mar 7 01:49:45 2000
Return-Path: <ankry>
Received: (from ankry@localhost)
        by kufel.dom (8.9.3/8.9.3) id BAA00657
        for ankry; Tue, 7 Mar 2000 01:49:44 +0100
From: Andrzej Krzysztofowicz <ankry@kufel.dom>
Message-Id: <200003070049.BAA00657@kufel.dom>
Subject: [PATCH] devfs Oops while re-reading part.table
To: ankry@kufel.dom
Date: Tue, 7 Mar 2000 01:49:44 +0100 (CET)
X-Mailer: ELM [version 2.5 PL0pre8]
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

Hi,
  devfs oopses while re-reading DOS partition tables containing some second
level partitions (*BSD, x86 solaris, unixware; extended is safe). Oops and
patch against 2.3.50pre2 follows...
   Andrzej

*****************************************************************************
Mar 7 01:14:06 kufel kernel: /dev/ide/host0/bus1/target0/lun0: p1 p2 p3
Mar 7 01:14:06 kufel kernel: ide/host0/bus1/target0/lun0/part3: <unixware: p5 p6 >
Mar 7 01:14:06 kufel kernel: Unable to handle kernel paging request at virtual address 31737562
Mar 7 01:14:06 kufel kernel: printing eip:
Mar 7 01:14:06 kufel kernel: 31737562
Mar 7 01:14:06 kufel kernel: *pde = 00000000
Mar 7 01:14:06 kufel kernel: Oops: 0000
Mar 7 01:14:06 kufel kernel: CPU: 0
Mar 7 01:14:06 kufel kernel: EIP: 0010:[<31737562>]
Mar 7 01:14:06 kufel kernel: EFLAGS: 00010282
Mar 7 01:14:06 kufel kernel: eax: 00000003 ebx: c2a46800 ecx: c393e000 edx: c393ff80
Mar 7 01:14:06 kufel kernel: esi: c2a469de edi: 00000003 ebp: 00000003 esp: c2aa5dfc
Mar 7 01:14:06 kufel kernel: ds: 0018 es: 0018 ss: 0018
Mar 7 01:14:06 kufel kernel: Process fdisk (pid: 449, stackpage=c2aa5000)
Mar 7 01:14:06 kufel kernel: Stack: 7261742f 30746567 6e756c2f 61702f30 00337472 c114cbc0 0000494c 000000ff
Mar 7 01:14:06 kufel kernel: 00000001 00000001 0000003f c2a46800 c2a50760 c1141600 c013e783 c114cbc0
Mar 7 01:14:06 kufel kernel: 00001600 00000000 00000001 00000000 c114cbc0 00000040 00813300 00000000
Mar 7 01:14:06 kufel kernel: Call Trace: [<c013e783>] [<c013ebab>] [<c015a113>] [<c015b638>] [<c010f1f2>] [<c011157b>] [<c01311f3>]
Mar 7 01:14:06 kufel kernel: [<c0136bd0>] [<c01311d0>] [<c01095c8>]
Mar 7 01:14:06 kufel kernel: Code: Bad EIP value.

8818 symbols from /usr/src/kernel/2.3/linux/System.map

EIP: 0x31737562 ???
trace: 0xc013e783 t check_partition+0xd7/0x11c
trace: 0xc013ebab T grok_partitions+0x6b/0xa4
trace: 0xc015a113 T ide_revalidate_disk+0x13b/0x15c
trace: 0xc015b638 t ide_ioctl+0x2dc/0x6d8
trace: 0xc010f1f2 T do_page_fault+0x172/0x4c0
trace: 0xc011157b T schedule+0x277/0x3ac
trace: 0xc01311f3 t blkdev_ioctl+0x23/0x30
trace: 0xc0136bd0 T sys_ioctl+0x1a8/0x1d0
trace: 0xc01311d0 t blkdev_ioctl+0x0/0x30
trace: 0xc01095c8 T system_call+0x34/0x38
/tmp/decode-oops.c:1: warning: overflow in implicit constant conversion
code: 00000000 <oops>:
code: 0: ad lods %ds:(%esi),%eax
code: 1: 0e push %cs

*******************************************************************************
--- linux/fs/partitions/msdos.c~ Tue Mar 7 01:19:51 2000
+++ linux/fs/partitions/msdos.c Tue Mar 7 01:34:00 2000
@@ -191,7 +191,11 @@
                 brelse(bh);
                 return;
         }
+#ifdef CONFIG_DEVFS_FS
+ printk(" p%d: <solaris:", (minor & ((1 << hd->minor_shift) - 1)));
+#else
         printk(" %s: <solaris:", disk_name(hd, minor, buf));
+#endif
         if(v->v_version != 1) {
                 printk(" cannot handle version %ld vtoc>\n", v->v_version);
                 brelse(bh);
@@ -276,7 +280,11 @@
                 brelse(bh);
                 return;
         }
+#ifdef CONFIG_DEVFS_FS
+ printk(" p%d:", (minor & ((1 << hd->minor_shift) - 1)));
+#else
         printk(" %s:", disk_name(hd, minor, buf));
+#endif
         printk((type == OPENBSD_PARTITION) ? " <openbsd:" :
                (type == NETBSD_PARTITION) ? " <netbsd:" : " <bsd:");
 
@@ -319,7 +327,11 @@
                 brelse(bh);
                 return;
         }
+#ifdef CONFIG_DEVFS_FS
+ printk(" p%d: <unixware:", (minor & ((1 << hd->minor_shift) - 1)));
+#else
         printk(" %s: <unixware:", disk_name(hd, minor, buf));
+#endif
         p = &l->vtoc.v_slice[1];
         /* I omit the 0th slice as it is the same as whole disk. */
         while (p - &l->vtoc.v_slice[0] < UNIXWARE_NUMSLICE) {

-- 
=======================================================================
  Andrzej M. Krzysztofowicz               ankry@mif.pg.gda.pl
  tel.  (0-58) 347 14 61
Wydz.Fizyki Technicznej i Matematyki Stosowanej Politechniki Gdanskiej

- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Tue Mar 07 2000 - 21:00:21 EST