* kernel BUG under 2.6.1-mm5
@ 2004-01-21 22:23 Jim Faulkner
2004-01-21 22:48 ` Andrew Morton
0 siblings, 1 reply; 6+ messages in thread
From: Jim Faulkner @ 2004-01-21 22:23 UTC (permalink / raw)
To: linux-kernel; +Cc: akpm
Hello,
I am seeing some scary looking kernel bug entries in my dmesg under
2.6.1-mm5. Its behavior varies.... I first rebooted my machine under
2.6.1-mm5 remotely, and when I got home I found the computer frozen at the
bug screen.
However, I rebooted it, and I saw the bug in dmesg again, but the system
fully booted and was useable this time.
Now, I rebooted for a second time, and the bug shows up twice (!) in my
dmesg. It definately only showed up once under the last reboot. Even so,
the boot completed and my computer is useable (I'm typing this e-mail
under 2.6.1-mm5).
Since its the scariest looking, below is the 2 kernel bug reports from my
current boot. Under that I included my complete dmesg from the previous
boot, then I included alot more configuration information under that.
Please note I did not load the nvidia kernel module until AFTER boot time
(after I encountered these bugs).
thanks,
Jim Faulkner
----------------------------------------------
2 kernel bug entries from current boot
-----------------------------------------------
------------[ cut here ]------------
kernel BUG at fs/dcache.c:760!
invalid operand: 0000 [#1]
PREEMPT SMP
CPU: 0
EIP: 0060:[<c0179627>] Not tainted VLI
EFLAGS: 00010287
EIP is at d_instantiate+0x17/0x90
eax: f7baf200 ebx: c1b8bac0 ecx: 000021a4 edx: 00000000
esi: f7a4f868 edi: f7baf200 ebp: f7a4f840 esp: f7a79e3c
ds: 007b es: 007b ss: 0068
Process hotplug (pid: 24, threadinfo=f7a78000 task=c1b06d00)
Stack: 00000000 f7a992e4 c1b8bac0 c1b35940 f7a78000 f7a4f840 c01ad6de
f7a4f840
f7baf200 f7a4f840 f7a41e1c c1bbeb40 00000000 c1b06d00 c011f5b0
00000000
00000000 f7a96d00 c1b06d00 c011bb7d 00000000 c1b06d00 c011f5b0
00000000
Call Trace:
[<c01ad6de>] devfs_d_revalidate_wait+0xbe/0x1b0
[<c011f5b0>] default_wake_function+0x0/0x20
[<c011bb7d>] do_page_fault+0x32d/0x512
[<c011f5b0>] default_wake_function+0x0/0x20
[<c016e868>] do_lookup+0x68/0xb0
[<c016ede8>] link_path_walk+0x538/0xa30
[<c016fd03>] open_namei+0x83/0x420
[<c011b850>] do_page_fault+0x0/0x512
[<c040d4cb>] error_code+0x2f/0x38
[<c015e61e>] filp_open+0x3e/0x70
[<c015eb9b>] sys_open+0x5b/0x90
[<c040c992>] sysenter_past_esp+0x43/0x65
Code: 31 c0 e9 5b ff ff ff 8d b6 00 00 00 00 8d bc 27 00 00 00 00 55 57 56
53 83 ec 08 8b 6c 24 1c 8b 7c 24 20 8d 75 28 39 75 28 74 08 <0f> 0b f8 02
96 6e 42 c0 bb 00 e0 ff ff 21 e3 ff 43 14 31 c0 86
------------[ cut here ]------------
kernel BUG at fs/dcache.c:760!
invalid operand: 0000 [#2]
PREEMPT SMP
CPU: 0
EIP: 0060:[<c0179627>] Not tainted VLI
EFLAGS: 00010283
EIP is at d_instantiate+0x17/0x90
eax: f7baecc0 ebx: c1b20340 ecx: 000021b6 edx: 00000000
esi: f7a4f7a8 edi: f7baecc0 ebp: f7a4f780 esp: f7a65e3c
ds: 007b es: 007b ss: 0068
Process hotplug (pid: 25, threadinfo=f7a64000 task=f7a67980)
Stack: 00000000 f7ab84a4 c1b20340 c1b35940 f7a64000 f7a4f780 c01ad6de
f7a4f780
f7baecc0 f7a4f780 f7a3fe1c c1bbeb40 00000000 f7a67980 c011f5b0
00000000
00000000 f7a963c0 f7a67980 c011bb7d 00000000 f7a67980 c011f5b0
00000000
Call Trace:
[<c01ad6de>] devfs_d_revalidate_wait+0xbe/0x1b0
[<c011f5b0>] default_wake_function+0x0/0x20
[<c011bb7d>] do_page_fault+0x32d/0x512
[<c011f5b0>] default_wake_function+0x0/0x20
[<c016e868>] do_lookup+0x68/0xb0
[<c016ede8>] link_path_walk+0x538/0xa30
[<c016fd03>] open_namei+0x83/0x420
[<c011b850>] do_page_fault+0x0/0x512
[<c040d4cb>] error_code+0x2f/0x38
[<c015e61e>] filp_open+0x3e/0x70
[<c015eb9b>] sys_open+0x5b/0x90
[<c040c992>] sysenter_past_esp+0x43/0x65
Code: 31 c0 e9 5b ff ff ff 8d b6 00 00 00 00 8d bc 27 00 00 00 00 55 57 56
53 83 ec 08 8b 6c 24 1c 8b 7c 24 20 8d 75 28 39 75 28 74 08 <0f> 0b f8 02
96 6e 42 c0 bb 00 e0 ff ff 21 e3 ff 43 14 31 c0 86
------------------------------------------
complete dmesg output from previous boot
-----------------------------------------
98 ptys configured
Real Time Clock Driver v1.12
Non-volatile memory driver v1.2
hw_random: AMD768 system management I/O registers at 0x5000.
hw_random hardware driver 1.0.0 loaded
Serial: 8250/16550 driver $Revision: 1.90 $ 8 ports, IRQ sharing enabled
ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A
Using anticipatory io scheduler
Floppy drive(s): fd0 is 1.44M
FDC 0 is a post-1991 82077
eepro100.c:v1.09j-t 9/29/99 Donald Becker
http://www.scyld.com/network/eepro100.html
eepro100.c: $Revision: 1.36 $ 2000/11/17 Modified by Andrey V. Savochkin
<saw@saw.sw.com.sg> and others
eth0: OEM i82557/i82558 10/100 Ethernet, 00:0D:61:0C:1C:FE, IRQ 169.
Board assembly a30469-002, Physical connectors present: RJ45
Primary interface chip i82555 PHY #1.
General self-test: passed.
Serial sub-system self-test: passed.
Internal registers self-test: passed.
ROM checksum self-test: passed (0xb874c1d3).
PPP generic driver version 2.4.2
PPP Deflate Compression module registered
PPP BSD Compression module registered
NET: Registered protocol family 24
8139too Fast Ethernet driver 0.9.27
eth1: RealTek RTL8139 at 0xf8818000, 00:50:ba:b7:d8:c3, IRQ 177
eth1: Identified 8139 chip type 'RTL-8139C'
Linux video capture interface: v1.00
bttv: driver version 0.9.12 loaded
bttv: using 8 buffers with 2080k (520 pages) each for capture
bttv: Bt8xx card found (0).
bttv0: Bt878 (rev 17) at 0000:02:06.0, irq: 185, latency: 32, mmio:
0xf5000000
bttv0: detected: Hauppauge WinTV [card=10], PCI subsystem ID is 0070:13eb
bttv0: using: Hauppauge (bt878) [card=10,autodetected]
bttv0: gpio: en=00000000, out=00000000 in=00fffffb [init]
bttv0: Hauppauge/Voodoo msp34xx: reset line init [5]
bttv0: Hauppauge eeprom: model=38061, tuner=Philips FI1236 MK2 (2),
radio=no
bttv0: using tuner=2
bttv0: i2c: checking for MSP34xx @ 0x80... not found
bttv0: i2c: checking for TDA9875 @ 0xb0... not found
bttv0: i2c: checking for TDA7432 @ 0x8a... not found
bttv0: registered device video0
bttv0: registered device vbi0
bttv0: PLL: 28636363 => 35468950 .. ok
tvaudio: TV audio decoder + audio/video mux driver
tvaudio: known chips:
tda9840,tda9873h,tda9874h/a,tda9850,tda9855,tea6300,tea6420,tda8425,pic16c54
(PV951),ta8874z
ir-kbd-i2c: i2c IR (Hauppauge) detected at i2c-0/0-0018/ir0
tuner: chip found @ 0xc2
tuner: type set to 2 (Philips NTSC (FI1236,FM1236 and compatibles))
Uniform Multi-Platform E-IDE driver Revision: 7.00alpha2
ide: Assuming 33MHz system bus speed for PIO modes; override with
idebus=xx
AMD7441: IDE controller at PCI slot 0000:00:07.1
AMD7441: chipset revision 4
AMD7441: not 100% native mode: will probe irqs later
ide: Assuming 33MHz system bus speed for PIO modes; override with
idebus=xx
AMD7441: 0000:00:07.1 (rev 04) UDMA100 controller
ide0: BM-DMA at 0xf000-0xf007, BIOS settings: hda:DMA, hdb:pio
ide1: BM-DMA at 0xf008-0xf00f, BIOS settings: hdc:DMA, hdd:pio
hda: WDC WD1200JB-32EVA0, ATA DISK drive
ide0 at 0x1f0-0x1f7,0x3f6 on irq 14
hdc: Maxtor 96147H8, ATA DISK drive
ide1 at 0x170-0x177,0x376 on irq 15
PDC20276: IDE controller at PCI slot 0000:02:08.0
PDC20276: chipset revision 1
PDC20276: 100% native mode on irq 185
ide2: BM-DMA at 0xc000-0xc007, BIOS settings: hde:pio, hdf:pio
ide3: BM-DMA at 0xc008-0xc00f, BIOS settings: hdg:pio, hdh:pio
hde: WDC WD1200JB-32EVA0, ATA DISK drive
ide2 at 0xb000-0xb007,0xb402 on irq 185
hdg: WDC WD450AA-00BAA0, ATA DISK drive
hdh: WDC WD200BB-75AUA1, ATA DISK drive
ide3 at 0xb800-0xb807,0xbc02 on irq 185
hda: max request size: 1024KiB
hda: 234441648 sectors (120034 MB) w/8192KiB Cache, CHS=16383/255/63,
UDMA(100)
/dev/ide/host0/bus0/target0/lun0: p1
hdc: max request size: 128KiB
hdc: 120060864 sectors (61471 MB) w/2048KiB Cache, CHS=65535/16/63,
UDMA(100)
/dev/ide/host0/bus1/target0/lun0: p1
hde: max request size: 1024KiB
hde: 234441648 sectors (120034 MB) w/8192KiB Cache, CHS=16383/255/63,
UDMA(100)
/dev/ide/host2/bus0/target0/lun0: p1
hdg: max request size: 128KiB
hdg: 87930864 sectors (45020 MB) w/2048KiB Cache, CHS=65535/16/63,
UDMA(66)
/dev/ide/host2/bus1/target0/lun0: p1
hdh: max request size: 128KiB
hdh: 39102336 sectors (20020 MB) w/2048KiB Cache, CHS=38792/16/63,
UDMA(100)
/dev/ide/host2/bus1/target1/lun0: p1
scsi0 : Adaptec AIC7XXX EISA/VLB/PCI SCSI HBA DRIVER, Rev 6.2.36
<Adaptec 3960D Ultra160 SCSI adapter>
aic7899: Ultra160 Wide Channel A, SCSI Id=7, 32/253 SCBs
(scsi0:A:0): 40.000MB/s transfers (20.000MHz, offset 15, 16bit)
(scsi0:A:3): 20.000MB/s transfers (20.000MHz, offset 16)
(scsi0:A:6): 20.000MB/s transfers (20.000MHz, offset 16)
(scsi0:A:6): 10.000MB/s transfers (10.000MHz, offset 16)
Vendor: SEAGATE Model: ST39102LW Rev: 0006
Type: Direct-Access ANSI SCSI revision: 02
scsi0:A:0:0: Tagged Queuing enabled. Depth 253
Vendor: TOSHIBA Model: DVD-ROM SD-M1401 Rev: 1010
Type: CD-ROM ANSI SCSI revision: 02
Vendor: GENERIC Model: CRD-BP5 Rev: 7.42
Type: CD-ROM ANSI SCSI revision: 02
scsi1 : Adaptec AIC7XXX EISA/VLB/PCI SCSI HBA DRIVER, Rev 6.2.36
<Adaptec 3960D Ultra160 SCSI adapter>
aic7899: Ultra160 Wide Channel B, SCSI Id=7, 32/253 SCBs
(scsi1:A:0): 80.000MB/s transfers (40.000MHz, offset 31, 16bit)
(scsi1:A:2): 160.000MB/s transfers (80.000MHz DT, offset 127, 16bit)
Vendor: WDIGTL Model: WDE18310 ULTRA2 Rev: 1.30
Type: Direct-Access ANSI SCSI revision: 02
scsi1:A:0:0: Tagged Queuing enabled. Depth 253
Vendor: FUJITSU Model: MAN3367MP Rev: 2601
Type: Direct-Access ANSI SCSI revision: 03
scsi1:A:2:0: Tagged Queuing enabled. Depth 253
st: Version 20031228, fixed bufsize 32768, s/g segs 256
SCSI device sda: 17783240 512-byte hdwr sectors (9105 MB)
SCSI device sda: drive cache: write back
/dev/scsi/host0/bus0/target0/lun0: p1 p2
Attached scsi disk sda at scsi0, channel 0, id 0, lun 0
SCSI device sdb: 35761710 512-byte hdwr sectors (18310 MB)
SCSI device sdb: drive cache: write back
/dev/scsi/host1/bus0/target0/lun0: p1
Attached scsi disk sdb at scsi1, channel 0, id 0, lun 0
SCSI device sdc: 71771688 512-byte hdwr sectors (36747 MB)
SCSI device sdc: drive cache: write back
/dev/scsi/host1/bus0/target2/lun0: p1
Attached scsi disk sdc at scsi1, channel 0, id 2, lun 0
sr0: scsi3-mmc drive: 40x/40x cd/rw xa/form2 cdda tray
Uniform CD-ROM driver Revision: 3.20
Attached scsi CD-ROM sr0 at scsi0, channel 0, id 3, lun 0
sr1: scsi3-mmc drive: 40x/40x writer cd/rw xa/form2 cdda tray
Attached scsi CD-ROM sr1 at scsi0, channel 0, id 6, lun 0
Attached scsi generic sg0 at scsi0, channel 0, id 0, lun 0, type 0
Attached scsi generic sg1 at scsi0, channel 0, id 3, lun 0, type 5
Attached scsi generic sg2 at scsi0, channel 0, id 6, lun 0, type 5
Attached scsi generic sg3 at scsi1, channel 0, id 0, lun 0, type 0
Attached scsi generic sg4 at scsi1, channel 0, id 2, lun 0, type 0
ohci_hcd: 2003 Oct 13 USB 1.1 'Open' Host Controller (OHCI) Driver (PCI)
ohci_hcd: block sizes: ed 64 td 64
ohci_hcd 0000:02:00.0: OHCI Host Controller
ohci_hcd 0000:02:00.0: irq 193, pci mem f8832000
ohci_hcd 0000:02:00.0: new USB bus registered, assigned bus number 1
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 4 ports detected
Initializing USB Mass Storage driver...
drivers/usb/core/usb.c: registered new driver usb-storage
USB Mass Storage support registered.
drivers/usb/core/usb.c: registered new driver hiddev
drivers/usb/core/usb.c: registered new driver hid
drivers/usb/input/hid-core.c: v2.0:USB HID core driver
mice: PS/2 mouse device common for all mice
gameport: pci0000:02:04.1 speed 903 kHz
serio: i8042 AUX port at 0x60,0x64 irq 12
atkbd.c: Unknown key pressed (raw set 0, code 0x17e on isa0060/serio1).
atkbd.c: Use 'setkeycodes 7e <keycode>' to make it known.
serio: i8042 KBD port at 0x60,0x64 irq 1
i2c /dev entries driver
md: linear personality registered as nr 1
md: raid0 personality registered as nr 2
md: md driver 0.90.0 MAX_MD_DEVS=256, MD_SB_DISKS=27
Advanced Linux Sound Architecture Driver Version 1.0.1 (Tue Dec 30
10:04:14 2003 UTC).
request_module: failed /sbin/modprobe -- snd-card-0. error = -16
hub 1-0:1.0: new USB device on port 2, assigned address 2
hub 1-2:1.0: USB hub found
hub 1-2:1.0: 4 ports detected
ALSA device list:
#0: Sound Blaster Live! (rev.7) at 0xa000, irq 169
NET: Registered protocol family 2
IP: routing cache hash table of 8192 buckets, 64Kbytes
TCP: Hash tables configured (established 262144 bind 65536)
ip_conntrack version 2.1 (8191 buckets, 65528 max) - 304 bytes per
conntrack
ip_tables: (C) 2000-2002 Netfilter core team
ipt_recent v0.3.1: Stephen Frost <sfrost@snowman.net>.
http://snowman.net/projects/ipt_recent/
NET: Registered protocol family 1
NET: Registered protocol family 17
md: Autodetecting RAID arrays.
md: autorun ...
md: considering hdh1 ...
md: adding hdh1 ...
md: adding hdg1 ...
md: hde1 has different UUID to hdh1
md: hdc1 has different UUID to hdh1
md: hda1 has different UUID to hdh1
md: created md0
md: bind<hdg1>
md: bind<hdh1>
md: running: <hdh1><hdg1>
md: considering hde1 ...
md: adding hde1 ...
md: hdc1 has different UUID to hde1
md: adding hda1 ...
md: created md1
md: bind<hda1>
md: bind<hde1>
md: running: <hde1><hda1>
md1: setting max_sectors to 16, segment boundary to 4095
raid0: looking at hde1
raid0: comparing hde1(117218176) with hde1(117218176)
raid0: END
raid0: ==> UNIQUE
raid0: 1 zones
raid0: looking at hda1
raid0: comparing hda1(117218176) with hde1(117218176)
raid0: EQUAL
raid0: FINAL 1 zones
raid0: done.
raid0 : md_size is 234436352 blocks.
raid0 : conf->hash_spacing is 234436352 blocks.
raid0 : nb_zone is 1.
raid0 : Allocating 4 bytes for hash.
md: considering hdc1 ...
md: adding hdc1 ...
md: created md2
md: bind<hdc1>
md: running: <hdc1>
md2: setting max_sectors to 8, segment boundary to 2047
blk_queue_segment_boundary: set to minimum fff
raid0: looking at hdc1
raid0: comparing hdc1(60026752) with hdc1(60026752)
raid0: END
raid0: ==> UNIQUE
raid0: 1 zones
raid0: FINAL 1 zones
raid0: too few disks (1 of 2) - aborting!
md: pers->run() failed ...
md :do_md_run() returned -22
md: md2 stopped.
md: unbind<hdc1>
md: export_rdev(hdc1)
md: ... autorun DONE.
found reiserfs format "3.6" with standard journal
hub 1-2:1.0: new USB device on port 3, assigned address 3
input: USB HID v1.00 Keyboard [Mitsumi Electric Mitsumi USB Keyboard] on
usb-0000:02:00.0-2.3
Reiserfs journal params: device sda2, size 8192, journal first block 18,
max trans len 1024, max batch 900, max commit age 30, max trans age 30
reiserfs: checking transaction log (sda2) for (sda2)
Using r5 hash to sort names
VFS: Mounted root (reiserfs filesystem) readonly.
Mounted devfs on /dev
Freeing unused kernel memory: 204k freed
hub 1-2:1.0: new USB device on port 4, assigned address 4
input: USB HID v1.10 Mouse [Microsoft Microsoft 3-Button Mouse with
IntelliEye(TM)] on usb-0000:02:00.0-2.4
------------[ cut here ]------------
kernel BUG at fs/dcache.c:760!
invalid operand: 0000 [#1]
PREEMPT SMP
CPU: 0
EIP: 0060:[<c0179627>] Not tainted VLI
EFLAGS: 00010287
EIP is at d_instantiate+0x17/0x90
eax: f7baf200 ebx: c1b8bac0 ecx: 000021a4 edx: 00000000
esi: f7a47868 edi: f7baf200 ebp: f7a47840 esp: f7a65e3c
ds: 007b es: 007b ss: 0068
Process hotplug (pid: 25, threadinfo=f7a64000 task=f7a67980)
Stack: f7a7eec0 f7a992e4 c1b8bac0 c1b35940 f7a64000 f7a47840 c01ad6de
f7a47840
f7baf200 f7a47840 f7a41e1c c1bbeb40 00000000 f7a67980 c011f5b0
00000000
00000000 f7a96c40 f7a67980 c011bb7d 00000000 f7a67980 c011f5b0
00000000
Call Trace:
[<c01ad6de>] devfs_d_revalidate_wait+0xbe/0x1b0
[<c011f5b0>] default_wake_function+0x0/0x20
[<c011bb7d>] do_page_fault+0x32d/0x512
[<c011f5b0>] default_wake_function+0x0/0x20
[<c016e868>] do_lookup+0x68/0xb0
[<c016ede8>] link_path_walk+0x538/0xa30
[<c016fd03>] open_namei+0x83/0x420
[<c011b850>] do_page_fault+0x0/0x512
[<c040d4cb>] error_code+0x2f/0x38
[<c015e61e>] filp_open+0x3e/0x70
[<c015eb9b>] sys_open+0x5b/0x90
[<c040c992>] sysenter_past_esp+0x43/0x65
Code: 31 c0 e9 5b ff ff ff 8d b6 00 00 00 00 8d bc 27 00 00 00 00 55 57 56
53 83 ec 08 8b 6c 24 1c 8b 7c 24 20 8d 75 28 39 75 28 74 08 <0f> 0b f8 02
96 6e 42 c0 bb 00 e0 ff ff 21 e3 ff 43 14 31 c0 86
<6>Adding 2008084k swap on /dev/sda1. Priority:-1 extents:1
md: autorun ...
md: considering md0 ...
md: adding md0 ...
md: adding hdc1 ...
md: created md2
md: bind<hdc1>
md: bind<md0>
md: running: <md0><hdc1>
md2: setting max_sectors to 8, segment boundary to 2047
blk_queue_segment_boundary: set to minimum fff
raid0: looking at md0
raid0: comparing md0(63512640) with md0(63512640)
raid0: END
raid0: ==> UNIQUE
raid0: 1 zones
raid0: looking at hdc1
raid0: comparing hdc1(60026752) with md0(63512640)
raid0: NOT EQUAL
raid0: comparing hdc1(60026752) with hdc1(60026752)
raid0: END
raid0: ==> UNIQUE
raid0: 2 zones
raid0: FINAL 2 zones
raid0: zone 1
raid0: checking hdc1 ... nope.
raid0: checking md0 ... contained as device 0
(63512640) is smallest!.
raid0: zone->nb_dev: 1, size: 3485888
raid0: current zone offset: 63512640
raid0: done.
raid0 : md_size is 123539392 blocks.
raid0 : conf->hash_spacing is 120053504 blocks.
raid0 : nb_zone is 2.
raid0 : Allocating 8 bytes for hash.
md: ... autorun DONE.
found reiserfs format "3.6" with standard journal
Reiserfs journal params: device sdb1, size 8192, journal first block 18,
max trans len 1024, max batch 900, max commit age 30, max trans age 30
reiserfs: checking transaction log (sdb1) for (sdb1)
Using r5 hash to sort names
found reiserfs format "3.6" with standard journal
Reiserfs journal params: device sdc1, size 8192, journal first block 18,
max trans len 1024, max batch 900, max commit age 30, max trans age 30
reiserfs: checking transaction log (sdc1) for (sdc1)
Using r5 hash to sort names
found reiserfs format "3.6" with standard journal
Reiserfs journal params: device md1, size 8192, journal first block 18,
max trans len 1024, max batch 900, max commit age 30, max trans age 30
reiserfs: checking transaction log (md1) for (md1)
Using r5 hash to sort names
found reiserfs format "3.6" with standard journal
Reiserfs journal params: device md2, size 8192, journal first block 18,
max trans len 1024, max batch 900, max commit age 30, max trans age 30
reiserfs: checking transaction log (md2) for (md2)
Using r5 hash to sort names
btaudio: driver version 0.7 loaded [digital+analog]
btaudio: Bt878 (rev 17) at 02:06.1, irq: 185, latency: 32, mmio:
0xf5001000
btaudio: using card config "default"
btaudio: registered device dsp1 [digital]
btaudio: registered device dsp2 [analog]
btaudio: registered device mixer1
Linux agpgart interface v0.100 (c) Dave Jones
agpgart: Detected AMD 760MP chipset
agpgart: Maximum main memory to use for agp memory: 941M
agpgart: AGP aperture is 128M @ 0xe0000000
process `named' is using obsolete setsockopt SO_BSDCOMPAT
request_module: failed /sbin/modprobe -- ppp0. error = 256
blk: queue f7de4200, I/O limit 4095Mb (mask 0xffffffff)
blk: queue f7db3a00, I/O limit 4095Mb (mask 0xffffffff)
blk: queue f7db3200, I/O limit 4095Mb (mask 0xffffffff)
blk: queue f7da6a00, I/O limit 4095Mb (mask 0xffffffff)
blk: queue f7da6600, I/O limit 4095Mb (mask 0xffffffff)
eth1: link up, 10Mbps, half-duplex, lpa 0x0000
delta-9 root #
-------------------------------------------------
alot more configuration information
------------------------------------------------
delta-9 linux # scripts/ver_linux
If some fields are empty or look unusual you may have an old version.
Compare to the current minimal requirements in Documentation/Changes.
Linux delta-9 2.6.1-mm5 #1 SMP Wed Jan 21 15:59:08 EST 2004 i686 AMD
Athlon(tm) MP 2200+ AuthenticAMD GNU/Linux
Gnu C 3.3.2
Gnu make 3.80
util-linux 2.12
mount 2.12
module-init-tools 0.9.15-pre4
e2fsprogs 1.34
PPP 2.4.2
nfs-utils 1.0.6
Linux C Library 2.3.3
Dynamic linker (ldd) 2.3.3
Procps 3.1.12
Net-tools 1.60
Kbd 1.08
Sh-utils 5.0.91
Modules Loaded nvidia ipt_LOG amd_k7_agp agpgart btaudio
delta-9 linux # cat /proc/cpuinfo
processor : 0
vendor_id : AuthenticAMD
cpu family : 6
model : 8
model name : AMD Athlon(tm) MP 2200+
stepping : 1
cpu MHz : 1800.303
cache size : 256 KB
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 1
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca
cmov pat pse36 mmx fxsr sse syscall mp mmxext 3dnowext 3dnow
bogomips : 3547.13
processor : 1
vendor_id : AuthenticAMD
cpu family : 6
model : 8
model name : AMD Athlon(tm) MP
stepping : 1
cpu MHz : 1800.303
cache size : 256 KB
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 1
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca
cmov pat pse36 mmx fxsr sse syscall mp mmxext 3dnowext 3dnow
bogomips : 3596.28
delta-9 linux # cat /proc/modules
nvidia 2071816 12 - Live 0xf92a4000
ipt_LOG 5760 1 - Live 0xf8dcc000
amd_k7_agp 7820 1 - Live 0xf8d6d000
agpgart 32748 2 amd_k7_agp, Live 0xf8d78000
btaudio 17488 1 - Live 0xf8d67000
delta-9 linux # cat /proc/ioports
0000-001f : dma1
0020-0021 : pic1
0040-005f : timer
0060-006f : keyboard
0070-0077 : rtc
0080-008f : dma page reg
00a0-00a1 : pic2
00c0-00df : dma2
00f0-00ff : fpu
0170-0177 : ide1
01f0-01f7 : ide0
02f8-02ff : serial
0376-0376 : ide1
03c0-03df : vga+
03f6-03f6 : ide0
03f8-03ff : serial
0cf8-0cff : PCI conf1
a000-cfff : PCI Bus #02
a000-a01f : 0000:02:04.0
a000-a01f : EMU10K1
a400-a407 : 0000:02:04.1
a400-a407 : emu10k1-gp
a800-a8ff : 0000:02:05.0
a800-a8ff : 8139too
ac00-ac3f : 0000:02:07.0
ac00-ac3f : eepro100
b000-b007 : 0000:02:08.0
b000-b007 : ide2
b400-b403 : 0000:02:08.0
b402-b402 : ide2
b800-b807 : 0000:02:08.0
b800-b807 : ide3
bc00-bc03 : 0000:02:08.0
bc02-bc02 : ide3
c000-c00f : 0000:02:08.0
c000-c007 : ide2
c008-c00f : ide3
e000-e0ff : 0000:00:09.0
e400-e4ff : 0000:00:09.1
e800-e803 : 0000:00:00.0
f000-f00f : 0000:00:07.1
f000-f007 : ide0
f008-f00f : ide1
delta-9 linux # cat /proc/iomem
00000000-0009fbff : System RAM
0009fc00-0009ffff : reserved
000a0000-000bffff : Video RAM area
000d0000-000d55ff : Extension ROM
000d6000-000d87ff : Extension ROM
000f0000-000fffff : System ROM
00100000-3ffeffff : System RAM
00100000-0040d68b : Kernel code
0040d68c-0052793f : Kernel data
3fff0000-3fff2fff : ACPI Non-volatile Storage
3fff3000-3fffffff : ACPI Tables
e0000000-e7ffffff : 0000:00:00.0
e8000000-efffffff : PCI Bus #01
e8000000-efffffff : 0000:01:05.0
f0000000-f1ffffff : PCI Bus #01
f0000000-f0ffffff : 0000:01:05.0
f3000000-f4ffffff : PCI Bus #02
f4000000-f401ffff : 0000:02:07.0
f4020000-f4023fff : 0000:02:08.0
f4024000-f4024fff : 0000:02:00.0
f4024000-f4024fff : ohci_hcd
f4025000-f40250ff : 0000:02:05.0
f4025000-f40250ff : 8139too
f4026000-f4026fff : 0000:02:07.0
f4026000-f4026fff : eepro100
f5000000-f50fffff : PCI Bus #02
f5000000-f5000fff : 0000:02:06.0
f5000000-f5000fff : bttv0
f5001000-f5001fff : 0000:02:06.1
f5001000-f5001fff : btaudio
f5100000-f5100fff : 0000:00:09.1
f5100000-f5100fff : aic7xxx
f5101000-f5101fff : 0000:00:09.0
f5101000-f5101fff : aic7xxx
f5102000-f5102fff : 0000:00:00.0
fec00000-ffffffff : reserved
delta-9 linux # lspci -vvv
00:00.0 Host bridge: Advanced Micro Devices [AMD] AMD-760 MP [IGD4-2P]
System Controller (rev 11)
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop-
ParErr- Stepping- SERR- FastB2B-
Status: Cap+ 66Mhz+ UDF- FastB2B- ParErr- DEVSEL=medium >TAbort-
<TAbort- <MAbort+ >SERR- <PERR-
Latency: 32
Region 0: Memory at e0000000 (32-bit, prefetchable) [size=128M]
Region 1: Memory at f5102000 (32-bit, prefetchable) [size=4K]
Region 2: I/O ports at e800 [disabled] [size=4]
Capabilities: [a0] AGP version 2.0
Status: RQ=16 Iso- ArqSz=0 Cal=0 SBA+ ITACoh- GART64-
HTrans- 64bit- FW+ AGP3- Rate=x1,x2,x4
Command: RQ=1 ArqSz=0 Cal=0 SBA- AGP+ GART64- 64bit- FW+
Rate=x4
00:01.0 PCI bridge: Advanced Micro Devices [AMD] AMD-760 MP [IGD4-2P] AGP
Bridge (prog-if 00 [Normal decode])
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop-
ParErr- Stepping- SERR+ FastB2B-
Status: Cap- 66Mhz+ UDF- FastB2B- ParErr- DEVSEL=medium >TAbort-
<TAbort- <MAbort- >SERR- <PERR-
Latency: 32
Bus: primary=00, secondary=01, subordinate=01, sec-latency=32
I/O behind bridge: 0000f000-00000fff
Memory behind bridge: f0000000-f1ffffff
Prefetchable memory behind bridge: e8000000-efffffff
BridgeCtl: Parity- SERR+ NoISA+ VGA+ MAbort- >Reset- FastB2B-
00:07.0 ISA bridge: Advanced Micro Devices [AMD] AMD-768 [Opus] ISA (rev
05)
Control: I/O+ Mem+ BusMaster+ SpecCycle+ MemWINV- VGASnoop-
ParErr- Stepping- SERR- FastB2B-
Status: Cap- 66Mhz+ UDF- FastB2B- ParErr- DEVSEL=medium >TAbort-
<TAbort- <MAbort- >SERR- <PERR-
Latency: 0
00:07.1 IDE interface: Advanced Micro Devices [AMD] AMD-768 [Opus] IDE
(rev 04) (prog-if 8a [Master SecP PriP])
Control: I/O+ Mem- BusMaster+ SpecCycle- MemWINV- VGASnoop-
ParErr- Stepping- SERR- FastB2B-
Status: Cap- 66Mhz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort-
<TAbort- <MAbort- >SERR- <PERR-
Latency: 32
Region 4: I/O ports at f000 [size=16]
00:07.3 Bridge: Advanced Micro Devices [AMD] AMD-768 [Opus] ACPI (rev 03)
Control: I/O- Mem- BusMaster- SpecCycle- MemWINV- VGASnoop-
ParErr- Stepping- SERR- FastB2B-
Status: Cap- 66Mhz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort-
<TAbort- <MAbort- >SERR- <PERR-
00:09.0 SCSI storage controller: Adaptec AHA-3960D / AIC-7899A U160/m (rev
01)
Subsystem: Adaptec AHA-3960D U160/m
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop-
ParErr- Stepping- SERR- FastB2B-
Status: Cap+ 66Mhz+ UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort-
<TAbort- <MAbort- >SERR- <PERR-
Latency: 32 (10000ns min, 6250ns max), cache line size 08
Interrupt: pin A routed to IRQ 177
BIST result: 00
Region 0: I/O ports at e000 [disabled] [size=256]
Region 1: Memory at f5101000 (64-bit, non-prefetchable) [size=4K]
Expansion ROM at <unassigned> [disabled] [size=128K]
Capabilities: [dc] Power Management version 2
Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA
PME(D0-,D1-,D2-,D3hot-,D3cold-)
Status: D0 PME-Enable- DSel=0 DScale=0 PME-
00:09.1 SCSI storage controller: Adaptec AHA-3960D / AIC-7899A U160/m (rev
01)
Subsystem: Adaptec AHA-3960D U160/m
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop-
ParErr- Stepping- SERR- FastB2B-
Status: Cap+ 66Mhz+ UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort-
<TAbort- <MAbort- >SERR- <PERR-
Latency: 32 (10000ns min, 6250ns max), cache line size 08
Interrupt: pin B routed to IRQ 185
BIST result: 00
Region 0: I/O ports at e400 [disabled] [size=256]
Region 1: Memory at f5100000 (64-bit, non-prefetchable) [size=4K]
Expansion ROM at <unassigned> [disabled] [size=128K]
Capabilities: [dc] Power Management version 2
Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA
PME(D0-,D1-,D2-,D3hot-,D3cold-)
Status: D0 PME-Enable- DSel=0 DScale=0 PME-
00:10.0 PCI bridge: Advanced Micro Devices [AMD] AMD-768 [Opus] PCI (rev
05) (prog-if 00 [Normal decode])
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop-
ParErr- Stepping- SERR+ FastB2B-
Status: Cap- 66Mhz+ UDF- FastB2B- ParErr- DEVSEL=medium >TAbort-
<TAbort- <MAbort+ >SERR- <PERR-
Latency: 32
Bus: primary=00, secondary=02, subordinate=02, sec-latency=32
I/O behind bridge: 0000a000-0000cfff
Memory behind bridge: f3000000-f4ffffff
Prefetchable memory behind bridge: f5000000-f50fffff
BridgeCtl: Parity- SERR+ NoISA+ VGA- MAbort- >Reset- FastB2B-
01:05.0 VGA compatible controller: nVidia Corporation NV15GL [Quadro2 Pro]
(rev a4) (prog-if 00 [VGA])
Subsystem: nVidia Corporation: Unknown device 006d
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop-
ParErr- Stepping- SERR- FastB2B-
Status: Cap+ 66Mhz+ UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort-
<TAbort- <MAbort- >SERR- <PERR-
Latency: 248 (1250ns min, 250ns max)
Interrupt: pin A routed to IRQ 177
Region 0: Memory at f0000000 (32-bit, non-prefetchable) [size=16M]
Region 1: Memory at e8000000 (32-bit, prefetchable) [size=128M]
Expansion ROM at <unassigned> [disabled] [size=64K]
Capabilities: [60] Power Management version 1
Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA
PME(D0-,D1-,D2-,D3hot-,D3cold-)
Status: D0 PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [44] AGP version 2.0
Status: RQ=32 Iso- ArqSz=0 Cal=0 SBA- ITACoh- GART64-
HTrans- 64bit- FW+ AGP3- Rate=x1,x2,x4
Command: RQ=16 ArqSz=0 Cal=0 SBA- AGP+ GART64- 64bit- FW+
Rate=x4
02:00.0 USB Controller: Advanced Micro Devices [AMD] AMD-768 [Opus] USB
(rev 07) (prog-if 10 [OHCI])
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop-
ParErr- Stepping- SERR- FastB2B-
Status: Cap- 66Mhz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort-
<TAbort- <MAbort- >SERR- <PERR+
Latency: 32 (20000ns max), cache line size 08
Interrupt: pin D routed to IRQ 193
Region 0: Memory at f4024000 (32-bit, non-prefetchable) [size=4K]
02:04.0 Multimedia audio controller: Creative Labs SB Live! EMU10k1 (rev
07)
Subsystem: Creative Labs CT4832 SBLive! Value
Control: I/O+ Mem- BusMaster+ SpecCycle- MemWINV- VGASnoop-
ParErr- Stepping- SERR- FastB2B-
Status: Cap+ 66Mhz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort-
<TAbort- <MAbort- >SERR- <PERR-
Latency: 32 (500ns min, 5000ns max)
Interrupt: pin A routed to IRQ 169
Region 0: I/O ports at a000 [size=32]
Capabilities: [dc] Power Management version 1
Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=0mA
PME(D0-,D1-,D2-,D3hot-,D3cold-)
Status: D0 PME-Enable- DSel=0 DScale=0 PME-
02:04.1 Input device controller: Creative Labs SB Live! MIDI/Game Port
(rev 07)
Subsystem: Creative Labs Gameport Joystick
Control: I/O+ Mem- BusMaster+ SpecCycle- MemWINV- VGASnoop-
ParErr- Stepping- SERR- FastB2B-
Status: Cap+ 66Mhz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort-
<TAbort- <MAbort- >SERR- <PERR-
Latency: 32
Region 0: I/O ports at a400 [size=8]
Capabilities: [dc] Power Management version 1
Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=0mA
PME(D0-,D1-,D2-,D3hot-,D3cold-)
Status: D0 PME-Enable- DSel=0 DScale=0 PME-
02:05.0 Ethernet controller: D-Link System Inc RTL8139 Ethernet (rev 10)
Subsystem: D-Link System Inc DFE-530TX+ 10/100 Ethernet Adapter
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop-
ParErr- Stepping- SERR- FastB2B-
Status: Cap+ 66Mhz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort-
<TAbort- <MAbort- >SERR- <PERR-
Latency: 32 (8000ns min, 16000ns max)
Interrupt: pin A routed to IRQ 177
Region 0: I/O ports at a800 [size=256]
Region 1: Memory at f4025000 (32-bit, non-prefetchable) [size=256]
Capabilities: [50] Power Management version 2
Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=375mA
PME(D0-,D1+,D2+,D3hot+,D3cold+)
Status: D0 PME-Enable- DSel=0 DScale=0 PME-
02:06.0 Multimedia video controller: Brooktree Corporation Bt878 Video
Capture (rev 11)
Subsystem: Hauppauge computer works Inc. WinTV Series
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop-
ParErr- Stepping- SERR- FastB2B-
Status: Cap+ 66Mhz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort-
<TAbort- <MAbort- >SERR- <PERR-
Latency: 32 (4000ns min, 10000ns max)
Interrupt: pin A routed to IRQ 185
Region 0: Memory at f5000000 (32-bit, prefetchable) [size=4K]
Capabilities: [44] Vital Product Data
Capabilities: [4c] Power Management version 2
Flags: PMEClk- DSI+ D1- D2- AuxCurrent=0mA
PME(D0-,D1-,D2-,D3hot-,D3cold-)
Status: D0 PME-Enable- DSel=0 DScale=0 PME-
02:06.1 Multimedia controller: Brooktree Corporation Bt878 Audio Capture
(rev 11)
Subsystem: Hauppauge computer works Inc. WinTV Series
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop-
ParErr- Stepping- SERR- FastB2B-
Status: Cap+ 66Mhz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort-
<TAbort- <MAbort- >SERR- <PERR-
Latency: 32 (1000ns min, 63750ns max)
Interrupt: pin A routed to IRQ 185
Region 0: Memory at f5001000 (32-bit, prefetchable) [size=4K]
Capabilities: [44] Vital Product Data
Capabilities: [4c] Power Management version 2
Flags: PMEClk- DSI+ D1- D2- AuxCurrent=0mA
PME(D0-,D1-,D2-,D3hot-,D3cold-)
Status: D0 PME-Enable- DSel=0 DScale=0 PME-
02:07.0 Ethernet controller: Intel Corp. 82557/8/9 [Ethernet Pro 100] (rev
0d)
Subsystem: Intel Corp. EtherExpress PRO/100 Server Adapter
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop-
ParErr- Stepping- SERR- FastB2B-
Status: Cap+ 66Mhz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort-
<TAbort- <MAbort- >SERR- <PERR-
Latency: 32 (2000ns min, 14000ns max), cache line size 08
Interrupt: pin A routed to IRQ 169
Region 0: Memory at f4026000 (32-bit, non-prefetchable) [size=4K]
Region 1: I/O ports at ac00 [size=64]
Region 2: Memory at f4000000 (32-bit, non-prefetchable)
[size=128K]
Expansion ROM at <unassigned> [disabled] [size=64K]
Capabilities: [dc] Power Management version 2
Flags: PMEClk- DSI+ D1+ D2+ AuxCurrent=0mA
PME(D0+,D1+,D2+,D3hot+,D3cold+)
Status: D0 PME-Enable- DSel=0 DScale=2 PME-
02:08.0 RAID bus controller: Promise Technology, Inc. PDC20276 IDE (rev
01) (prog-if 85)
Subsystem: Giga-byte Technology: Unknown device b001
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop-
ParErr- Stepping- SERR- FastB2B-
Status: Cap+ 66Mhz+ UDF- FastB2B- ParErr- DEVSEL=slow >TAbort-
<TAbort- <MAbort- >SERR- <PERR-
Latency: 32 (1000ns min, 4500ns max), cache line size 08
Interrupt: pin A routed to IRQ 185
Region 0: I/O ports at b000 [size=8]
Region 1: I/O ports at b400 [size=4]
Region 2: I/O ports at b800 [size=8]
Region 3: I/O ports at bc00 [size=4]
Region 4: I/O ports at c000 [size=16]
Region 5: Memory at f4020000 (32-bit, non-prefetchable) [size=16K]
Capabilities: [60] Power Management version 1
Flags: PMEClk- DSI+ D1+ D2- AuxCurrent=0mA
PME(D0-,D1-,D2-,D3hot-,D3cold-)
Status: D0 PME-Enable- DSel=0 DScale=0 PME-
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: kernel BUG under 2.6.1-mm5
2004-01-21 22:23 kernel BUG under 2.6.1-mm5 Jim Faulkner
@ 2004-01-21 22:48 ` Andrew Morton
2004-01-26 15:30 ` Andrey Borzenkov
2004-02-01 19:09 ` Andrey Borzenkov
0 siblings, 2 replies; 6+ messages in thread
From: Andrew Morton @ 2004-01-21 22:48 UTC (permalink / raw)
To: Jim Faulkner; +Cc: linux-kernel, Andrey Borzenkov
Jim Faulkner <jfaulkne@ccs.neu.edu> wrote:
>
>
> Hello,
>
> I am seeing some scary looking kernel bug entries in my dmesg under
> 2.6.1-mm5.
> ...
> kernel BUG at fs/dcache.c:760!
> invalid operand: 0000 [#1]
> PREEMPT SMP
> CPU: 0
> EIP: 0060:[<c0179627>] Not tainted VLI
> EFLAGS: 00010287
> EIP is at d_instantiate+0x17/0x90
> eax: f7baf200 ebx: c1b8bac0 ecx: 000021a4 edx: 00000000
> esi: f7a4f868 edi: f7baf200 ebp: f7a4f840 esp: f7a79e3c
> ds: 007b es: 007b ss: 0068
> Process hotplug (pid: 24, threadinfo=f7a78000 task=c1b06d00)
> Stack: 00000000 f7a992e4 c1b8bac0 c1b35940 f7a78000 f7a4f840 c01ad6de
> f7a4f840
> f7baf200 f7a4f840 f7a41e1c c1bbeb40 00000000 c1b06d00 c011f5b0
> 00000000
> 00000000 f7a96d00 c1b06d00 c011bb7d 00000000 c1b06d00 c011f5b0
> 00000000
> Call Trace:
> [<c01ad6de>] devfs_d_revalidate_wait+0xbe/0x1b0
> [<c011f5b0>] default_wake_function+0x0/0x20
> [<c011bb7d>] do_page_fault+0x32d/0x512
> [<c011f5b0>] default_wake_function+0x0/0x20
> [<c016e868>] do_lookup+0x68/0xb0
> [<c016ede8>] link_path_walk+0x538/0xa30
> [<c016fd03>] open_namei+0x83/0x420
> [<c011b850>] do_page_fault+0x0/0x512
> [<c040d4cb>] error_code+0x2f/0x38
> [<c015e61e>] filp_open+0x3e/0x70
> [<c015eb9b>] sys_open+0x5b/0x90
> [<c040c992>] sysenter_past_esp+0x43/0x65
hmm. There was a patch in that area which I have subsequently dropped
because it was really fixing devfs problems in the wrong place.
Perhaps Andrey can ask you to test a subsequent patch if he takes another
look at this.
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: kernel BUG under 2.6.1-mm5
2004-01-21 22:48 ` Andrew Morton
@ 2004-01-26 15:30 ` Andrey Borzenkov
2004-01-26 21:22 ` Jim Faulkner
2004-02-01 19:09 ` Andrey Borzenkov
1 sibling, 1 reply; 6+ messages in thread
From: Andrey Borzenkov @ 2004-01-26 15:30 UTC (permalink / raw)
To: Andrew Morton, Jim Faulkner; +Cc: linux-kernel
[-- Attachment #1: Type: text/plain, Size: 1999 bytes --]
On Thursday 22 January 2004 01:48, Andrew Morton wrote:
> Jim Faulkner <jfaulkne@ccs.neu.edu> wrote:
> > Hello,
> >
> > I am seeing some scary looking kernel bug entries in my dmesg under
> > 2.6.1-mm5.
> > ...
> >
> > kernel BUG at fs/dcache.c:760!
> > invalid operand: 0000 [#1]
> > PREEMPT SMP
> > CPU: 0
> > EIP: 0060:[<c0179627>] Not tainted VLI
> > EFLAGS: 00010287
> > EIP is at d_instantiate+0x17/0x90
> > eax: f7baf200 ebx: c1b8bac0 ecx: 000021a4 edx: 00000000
> > esi: f7a4f868 edi: f7baf200 ebp: f7a4f840 esp: f7a79e3c
> > ds: 007b es: 007b ss: 0068
> > Process hotplug (pid: 24, threadinfo=f7a78000 task=c1b06d00)
> > Stack: 00000000 f7a992e4 c1b8bac0 c1b35940 f7a78000 f7a4f840 c01ad6de
> > f7a4f840
> > f7baf200 f7a4f840 f7a41e1c c1bbeb40 00000000 c1b06d00 c011f5b0
> > 00000000
> > 00000000 f7a96d00 c1b06d00 c011bb7d 00000000 c1b06d00 c011f5b0
> > 00000000
> > Call Trace:
> > [<c01ad6de>] devfs_d_revalidate_wait+0xbe/0x1b0
> > [<c011f5b0>] default_wake_function+0x0/0x20
> > [<c011bb7d>] do_page_fault+0x32d/0x512
> > [<c011f5b0>] default_wake_function+0x0/0x20
> > [<c016e868>] do_lookup+0x68/0xb0
> > [<c016ede8>] link_path_walk+0x538/0xa30
> > [<c016fd03>] open_namei+0x83/0x420
> > [<c011b850>] do_page_fault+0x0/0x512
> > [<c040d4cb>] error_code+0x2f/0x38
> > [<c015e61e>] filp_open+0x3e/0x70
> > [<c015eb9b>] sys_open+0x5b/0x90
> > [<c040c992>] sysenter_past_esp+0x43/0x65
>
> hmm. There was a patch in that area which I have subsequently dropped
> because it was really fixing devfs problems in the wrong place.
>
hmm ...
> Perhaps Andrey can ask you to test a subsequent patch if he takes another
> look at this.
please try this one. This basically does the same inside of devfs. It passed
usual sanity checks here; I cannot reproduce oops you have (do you have SMP
system?)
I appreciate if someone with more intimate knowledge of fs/namei.c comments if
conditions in devfs_d_revalidate_wait make sense.
-andrey
[-- Attachment #2: 2.6.2-rc2-devfs-d_revalidate-2.patch --]
[-- Type: text/x-diff, Size: 3939 bytes --]
--- linux-2.6.2-rc2/fs/devfs/base.c.nd 2004-01-26 13:25:38.000000000 +0300
+++ linux-2.6.2-rc2/fs/devfs/base.c 2004-01-26 15:52:11.000000000 +0300
@@ -676,6 +676,7 @@
#include <linux/smp.h>
#include <linux/rwsem.h>
#include <linux/sched.h>
+#include <linux/namei.h>
#include <asm/uaccess.h>
#include <asm/io.h>
@@ -2223,6 +2224,34 @@ static int devfs_d_revalidate_wait (stru
devfs_handle_t parent = get_devfs_entry_from_vfs_inode (dir);
struct devfs_lookup_struct *lookup_info = dentry->d_fsdata;
DECLARE_WAITQUEUE (wait, current);
+ int need_lock;
+
+ /*
+ * FIXME HACK
+ *
+ * make sure that
+ * d_instantiate always runs under lock
+ * we release i_sem lock before going to sleep
+ *
+ * unfortunately sometimes d_revalidate is called with
+ * and sometimes without i_sem lock held. The following checks
+ * attempt to deduce when we need to add (and drop resp.) lock
+ * here. This relies on current (2.6.2) calling coventions:
+ *
+ * lookup_hash is always run under i_sem and is passing NULL
+ * as nd
+ *
+ * open(...,O_CREATE,...) calls _lookup_hash under i_sem
+ * and sets flags to LOOKUP_OPEN|LOOKUP_CREATE
+ *
+ * all other invocations of ->d_revalidate seem to happen
+ * outside of i_sem
+ */
+ need_lock = nd &&
+ (!(nd->flags & LOOKUP_CREATE) || (nd->flags & LOOKUP_PARENT));
+
+ if (need_lock)
+ down(&dir->i_sem);
if ( is_devfsd_or_child (fs_info) )
{
@@ -2233,33 +2262,40 @@ static int devfs_d_revalidate_wait (stru
"(%s): dentry: %p inode: %p de: %p by: \"%s\"\n",
dentry->d_name.name, dentry, dentry->d_inode, de,
current->comm);
- if (dentry->d_inode) return 1;
+ if (dentry->d_inode)
+ goto out;
if (de == NULL)
{
read_lock (&parent->u.dir.lock);
de = _devfs_search_dir (parent, dentry->d_name.name,
dentry->d_name.len);
read_unlock (&parent->u.dir.lock);
- if (de == NULL) return 1;
+ if (de == NULL)
+ goto out;
lookup_info->de = de;
}
/* Create an inode, now that the driver information is available */
inode = _devfs_get_vfs_inode (dir->i_sb, de, dentry);
- if (!inode) return 1;
+ if (!inode)
+ goto out;
DPRINTK (DEBUG_I_LOOKUP,
"(%s): new VFS inode(%u): %p de: %p by: \"%s\"\n",
de->name, de->inode.ino, inode, de, current->comm);
d_instantiate (dentry, inode);
- return 1;
+ goto out;
}
- if (lookup_info == NULL) return 1; /* Early termination */
+ if (lookup_info == NULL)
+ goto out; /* Early termination */
read_lock (&parent->u.dir.lock);
if (dentry->d_fsdata)
{
set_current_state (TASK_UNINTERRUPTIBLE);
add_wait_queue (&lookup_info->wait_queue, &wait);
read_unlock (&parent->u.dir.lock);
+ /* at this point it is always (hopefully) locked */
+ up(&dir->i_sem);
schedule ();
+ down(&dir->i_sem);
/*
* This does not need nor should remove wait from wait_queue.
* Wait queue head is never reused - nothing is ever added to it
@@ -2271,6 +2307,10 @@ static int devfs_d_revalidate_wait (stru
}
else read_unlock (&parent->u.dir.lock);
+
+out:
+ if (need_lock)
+ up(&dir->i_sem);
return 1;
} /* End Function devfs_d_revalidate_wait */
@@ -2320,6 +2360,7 @@ static struct dentry *devfs_lookup (stru
revalidation */
up (&dir->i_sem);
wait_for_devfsd_finished (fs_info); /* If I'm not devfsd, must wait */
+ down (&dir->i_sem); /* Grab it again because them's the rules */
de = lookup_info.de;
/* If someone else has been so kind as to make the inode, we go home
early */
@@ -2349,7 +2390,6 @@ out:
dentry->d_fsdata = NULL;
wake_up (&lookup_info.wait_queue);
write_unlock (&parent->u.dir.lock);
- down (&dir->i_sem); /* Grab it again because them's the rules */
devfs_put (de);
return retval;
} /* End Function devfs_lookup */
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: kernel BUG under 2.6.1-mm5
2004-01-26 15:30 ` Andrey Borzenkov
@ 2004-01-26 21:22 ` Jim Faulkner
0 siblings, 0 replies; 6+ messages in thread
From: Jim Faulkner @ 2004-01-26 21:22 UTC (permalink / raw)
To: Andrey Borzenkov; +Cc: Andrew Morton, linux-kernel
On Mon, 26 Jan 2004, Andrey Borzenkov wrote:
> On Thursday 22 January 2004 01:48, Andrew Morton wrote:
> > Jim Faulkner <jfaulkne@ccs.neu.edu> wrote:
> > > Hello,
> > >
> > > I am seeing some scary looking kernel bug entries in my dmesg under
> > > 2.6.1-mm5.
> > > ...
> > >
> > > kernel BUG at fs/dcache.c:760!
> > > invalid operand: 0000 [#1]
> > > PREEMPT SMP
> > > CPU: 0
> > > EIP: 0060:[<c0179627>] Not tainted VLI
> > > EFLAGS: 00010287
> > > EIP is at d_instantiate+0x17/0x90
> > > eax: f7baf200 ebx: c1b8bac0 ecx: 000021a4 edx: 00000000
> > > esi: f7a4f868 edi: f7baf200 ebp: f7a4f840 esp: f7a79e3c
> > > ds: 007b es: 007b ss: 0068
> > > Process hotplug (pid: 24, threadinfo=f7a78000 task=c1b06d00)
> > > Stack: 00000000 f7a992e4 c1b8bac0 c1b35940 f7a78000 f7a4f840 c01ad6de
> > > f7a4f840
> > > f7baf200 f7a4f840 f7a41e1c c1bbeb40 00000000 c1b06d00 c011f5b0
> > > 00000000
> > > 00000000 f7a96d00 c1b06d00 c011bb7d 00000000 c1b06d00 c011f5b0
> > > 00000000
> > > Call Trace:
> > > [<c01ad6de>] devfs_d_revalidate_wait+0xbe/0x1b0
> > > [<c011f5b0>] default_wake_function+0x0/0x20
> > > [<c011bb7d>] do_page_fault+0x32d/0x512
> > > [<c011f5b0>] default_wake_function+0x0/0x20
> > > [<c016e868>] do_lookup+0x68/0xb0
> > > [<c016ede8>] link_path_walk+0x538/0xa30
> > > [<c016fd03>] open_namei+0x83/0x420
> > > [<c011b850>] do_page_fault+0x0/0x512
> > > [<c040d4cb>] error_code+0x2f/0x38
> > > [<c015e61e>] filp_open+0x3e/0x70
> > > [<c015eb9b>] sys_open+0x5b/0x90
> > > [<c040c992>] sysenter_past_esp+0x43/0x65
> >
> > hmm. There was a patch in that area which I have subsequently dropped
> > because it was really fixing devfs problems in the wrong place.
> >
> hmm ...
>
> > Perhaps Andrey can ask you to test a subsequent patch if he takes another
> > look at this.
>
> please try this one. This basically does the same inside of devfs. It passed
> usual sanity checks here; I cannot reproduce oops you have (do you have SMP
> system?)
>
> I appreciate if someone with more intimate knowledge of fs/namei.c comments if
> conditions in devfs_d_revalidate_wait make sense.
>
> -andrey
>
Yes, I have an SMP system.
Your patch works! I applied it to 2.6.2-rc1-mm1 (which is the last -mm
version that doesn't kernel panic on me because of an unrelated bug), and
the "kernel BUG" warning has gone away.
thanks!
Jim Faulkner
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: kernel BUG under 2.6.1-mm5
2004-01-21 22:48 ` Andrew Morton
2004-01-26 15:30 ` Andrey Borzenkov
@ 2004-02-01 19:09 ` Andrey Borzenkov
2004-02-04 15:40 ` Christoph Hellwig
1 sibling, 1 reply; 6+ messages in thread
From: Andrey Borzenkov @ 2004-02-01 19:09 UTC (permalink / raw)
To: Andrew Morton; +Cc: Jim Faulkner, linux-kernel
[-- Attachment #1: Type: text/plain, Size: 1999 bytes --]
On Wed, Jan 21, 2004 at 02:48:04PM -0800, Andrew Morton wrote:
> Jim Faulkner <jfaulkne@ccs.neu.edu> wrote:
> >
> >
> > Hello,
> >
> > I am seeing some scary looking kernel bug entries in my dmesg under
> > 2.6.1-mm5.
> > ...
>
> > kernel BUG at fs/dcache.c:760!
> > invalid operand: 0000 [#1]
> > PREEMPT SMP
> > CPU: 0
> > EIP: 0060:[<c0179627>] Not tainted VLI
> > EFLAGS: 00010287
> > EIP is at d_instantiate+0x17/0x90
> > eax: f7baf200 ebx: c1b8bac0 ecx: 000021a4 edx: 00000000
> > esi: f7a4f868 edi: f7baf200 ebp: f7a4f840 esp: f7a79e3c
> > ds: 007b es: 007b ss: 0068
> > Process hotplug (pid: 24, threadinfo=f7a78000 task=c1b06d00)
> > Stack: 00000000 f7a992e4 c1b8bac0 c1b35940 f7a78000 f7a4f840 c01ad6de
> > f7a4f840
> > f7baf200 f7a4f840 f7a41e1c c1bbeb40 00000000 c1b06d00 c011f5b0
> > 00000000
> > 00000000 f7a96d00 c1b06d00 c011bb7d 00000000 c1b06d00 c011f5b0
> > 00000000
> > Call Trace:
> > [<c01ad6de>] devfs_d_revalidate_wait+0xbe/0x1b0
> > [<c011f5b0>] default_wake_function+0x0/0x20
> > [<c011bb7d>] do_page_fault+0x32d/0x512
> > [<c011f5b0>] default_wake_function+0x0/0x20
> > [<c016e868>] do_lookup+0x68/0xb0
> > [<c016ede8>] link_path_walk+0x538/0xa30
> > [<c016fd03>] open_namei+0x83/0x420
> > [<c011b850>] do_page_fault+0x0/0x512
> > [<c040d4cb>] error_code+0x2f/0x38
> > [<c015e61e>] filp_open+0x3e/0x70
> > [<c015eb9b>] sys_open+0x5b/0x90
> > [<c040c992>] sysenter_past_esp+0x43/0x65
>
> hmm. There was a patch in that area which I have subsequently dropped
> because it was really fixing devfs problems in the wrong place.
>
> Perhaps Andrey can ask you to test a subsequent patch if he takes another
> look at this.
>
>
good. here is extended version that includes the same fix + some
cleanup. It removes dead code, removes long obsolete attempt to manage
module refcounting, unifies bdev and cdev - they are treated equal now.
andrew please consider for -mm for testing.
More cleanup will follow.
-andrey
[-- Attachment #2: 2.6.2-rc3-devfs_cleanup-0.patch --]
[-- Type: text/plain, Size: 26205 bytes --]
diff -Nrup ../tmp/linux-2.6.2-rc3/fs/devfs/base.c linux-2.6.2-rc2/fs/devfs/base.c
--- ../tmp/linux-2.6.2-rc3/fs/devfs/base.c 2004-01-28 21:35:07.000000000 +0300
+++ linux-2.6.2-rc2/fs/devfs/base.c 2004-02-01 17:03:51.557348456 +0300
@@ -676,6 +676,7 @@
#include <linux/smp.h>
#include <linux/rwsem.h>
#include <linux/sched.h>
+#include <linux/namei.h>
#include <asm/uaccess.h>
#include <asm/io.h>
@@ -685,9 +686,7 @@
#include <asm/bitops.h>
#include <asm/atomic.h>
-#include "internal.h"
-
-#define DEVFS_VERSION "1.22 (20021013)"
+#define DEVFS_VERSION "2004-01-31"
#define DEVFS_NAME "devfs"
@@ -762,18 +761,6 @@ struct directory_type
unsigned char no_more_additions:1;
};
-struct bdev_type
-{
- dev_t dev;
-};
-
-struct cdev_type
-{
- struct file_operations *ops;
- dev_t dev;
- unsigned char autogen:1;
-};
-
struct symlink_type
{
unsigned int length; /* Not including the NULL-termimator */
@@ -801,8 +788,7 @@ struct devfs_entry
union
{
struct directory_type dir;
- struct bdev_type bdev;
- struct cdev_type cdev;
+ dev_t dev;
struct symlink_type symlink;
const char *name; /* Only used for (mode == 0) */
}
@@ -813,7 +799,7 @@ struct devfs_entry
struct devfs_inode inode;
umode_t mode;
unsigned short namelen; /* I think 64k+ filenames are a way off... */
- unsigned char vfs_deletable:1;/* Whether the VFS may delete the entry */
+ unsigned char vfs:1;/* Whether the VFS may delete the entry */
char name[1]; /* This is just a dummy: the allocated array
is bigger. This is NULL-terminated */
};
@@ -925,8 +911,6 @@ static void devfs_put (devfs_handle_t de
de->name, de, de->parent,
de->parent ? de->parent->name : "no parent");
if ( S_ISLNK (de->mode) ) kfree (de->u.symlink.linkname);
- if ( S_ISCHR (de->mode) && de->u.cdev.autogen )
- devfs_dealloc_devnum (de->mode, de->u.cdev.dev);
WRITE_ENTRY_MAGIC (de, 0);
#ifdef CONFIG_DEVFS_DEBUG
spin_lock (&stat_lock);
@@ -1063,46 +1047,40 @@ static int _devfs_append_entry (devfs_ha
return retval;
} /* End Function _devfs_append_entry */
-
/**
* _devfs_get_root_entry - Get the root devfs entry.
*
* Returns the root devfs entry on success, else %NULL.
+ *
+ * TODO it must be called asynchronously due to the fact
+ * that devfs is initialized relatively late. Proper way
+ * is to remove module_init from init_devfs_fs and manually
+ * call it early enough during system init
*/
-static struct devfs_entry *_devfs_get_root_entry (void)
+static struct devfs_entry *_devfs_get_root_entry(void)
{
- struct devfs_entry *new;
- static spinlock_t root_lock = SPIN_LOCK_UNLOCKED;
+ struct devfs_entry *new;
+ static spinlock_t root_lock = SPIN_LOCK_UNLOCKED;
- /* Always ensure the root is created */
- if (root_entry) return root_entry;
- if ( ( new = _devfs_alloc_entry (NULL, 0,MODE_DIR) ) == NULL ) return NULL;
- spin_lock (&root_lock);
- if (root_entry)
- {
- spin_unlock (&root_lock);
- devfs_put (new);
- return (root_entry);
- }
- root_entry = new;
- spin_unlock (&root_lock);
- /* And create the entry for ".devfsd" */
- if ( ( new = _devfs_alloc_entry (".devfsd", 0, S_IFCHR |S_IRUSR |S_IWUSR) )
- == NULL ) return NULL;
- new->u.cdev.dev = devfs_alloc_devnum (S_IFCHR |S_IRUSR |S_IWUSR);
- new->u.cdev.ops = &devfsd_fops;
- _devfs_append_entry (root_entry, new, NULL);
-#ifdef CONFIG_DEVFS_DEBUG
- if ( ( new = _devfs_alloc_entry (".stat", 0, S_IFCHR | S_IRUGO | S_IWUGO) )
- == NULL ) return NULL;
- new->u.cdev.dev = devfs_alloc_devnum (S_IFCHR | S_IRUGO | S_IWUGO);
- new->u.cdev.ops = &stat_fops;
- _devfs_append_entry (root_entry, new, NULL);
-#endif
- return root_entry;
-} /* End Function _devfs_get_root_entry */
+ if (root_entry)
+ return root_entry;
+
+ new = _devfs_alloc_entry(NULL, 0, MODE_DIR);
+ if (new == NULL )
+ return NULL;
+
+ spin_lock(&root_lock);
+ if (root_entry) {
+ spin_unlock(&root_lock);
+ devfs_put(new);
+ return root_entry;
+ }
+ root_entry = new;
+ spin_unlock(&root_lock);
+ return root_entry;
+} /* End Function _devfs_get_root_entry */
/**
* _devfs_descend - Descend down a tree using the next component name.
@@ -1237,6 +1215,7 @@ static devfs_handle_t _devfs_walk_path (
}
if (S_ISLNK (de->mode) && traverse_symlink)
{ /* Need to follow the link: this is a stack chomper */
+ /* FIXME what if it puts outside of mounted tree? */
link = _devfs_walk_path (dir, de->u.symlink.linkname,
de->u.symlink.length, TRUE);
devfs_put (de);
@@ -1444,27 +1423,19 @@ static void devfsd_notify (struct devfs_
current->egid, &fs_info);
}
-int devfs_mk_bdev(dev_t dev, umode_t mode, const char *fmt, ...)
+static int devfs_mk_dev(dev_t dev, umode_t mode, const char *fmt, va_list args)
{
struct devfs_entry *dir = NULL, *de;
char buf[64];
- va_list args;
int error, n;
- va_start(args, fmt);
- n = vsnprintf(buf, 64, fmt, args);
- if (n >= 64 || !buf[0]) {
- printk(KERN_WARNING "%s: invalid format string\n",
- __FUNCTION__);
+ n = vsnprintf(buf, sizeof(buf), fmt, args);
+ if (n >= sizeof(buf) || !buf[0]) {
+ printk(KERN_WARNING "%s: invalid format string %s\n",
+ __FUNCTION__, fmt);
return -EINVAL;
}
- if (!S_ISBLK(mode)) {
- printk(KERN_WARNING "%s: invalide mode (%u) for %s\n",
- __FUNCTION__, mode, buf);
- return -EINVAL;
- }
-
de = _devfs_prepare_leaf(&dir, buf, mode);
if (!de) {
printk(KERN_WARNING "%s: could not prepare leaf for %s\n",
@@ -1472,7 +1443,7 @@ int devfs_mk_bdev(dev_t dev, umode_t mod
return -ENOMEM; /* could be more accurate... */
}
- de->u.bdev.dev = dev;
+ de->u.dev = dev;
error = _devfs_append_entry(dir, de, NULL);
if (error) {
@@ -1487,50 +1458,35 @@ int devfs_mk_bdev(dev_t dev, umode_t mod
return error;
}
+int devfs_mk_bdev(dev_t dev, umode_t mode, const char *fmt, ...)
+{
+ va_list args;
+
+ if (!S_ISBLK(mode)) {
+ printk(KERN_WARNING "%s: invalide mode (%u) for %s\n",
+ __FUNCTION__, mode, fmt);
+ return -EINVAL;
+ }
+
+ va_start(args, fmt);
+ return devfs_mk_dev(dev, mode, fmt, args);
+}
+
EXPORT_SYMBOL(devfs_mk_bdev);
int devfs_mk_cdev(dev_t dev, umode_t mode, const char *fmt, ...)
{
- struct devfs_entry *dir = NULL, *de;
- char buf[64];
va_list args;
- int error, n;
-
- va_start(args, fmt);
- n = vsnprintf(buf, 64, fmt, args);
- if (n >= 64 || !buf[0]) {
- printk(KERN_WARNING "%s: invalid format string\n",
- __FUNCTION__);
- return -EINVAL;
- }
if (!S_ISCHR(mode)) {
printk(KERN_WARNING "%s: invalide mode (%u) for %s\n",
- __FUNCTION__, mode, buf);
+ __FUNCTION__, mode, fmt);
return -EINVAL;
}
- de = _devfs_prepare_leaf(&dir, buf, mode);
- if (!de) {
- printk(KERN_WARNING "%s: could not prepare leaf for %s\n",
- __FUNCTION__, buf);
- return -ENOMEM; /* could be more accurate... */
- }
-
- de->u.cdev.dev = dev;
-
- error = _devfs_append_entry(dir, de, NULL);
- if (error) {
- printk(KERN_WARNING "%s: could not append to parent for %s\n",
- __FUNCTION__, buf);
- goto out;
- }
-
- devfsd_notify(de, DEVFSD_NOTIFY_REGISTERED);
- out:
- devfs_put(dir);
- return error;
+ va_start(args, fmt);
+ return devfs_mk_dev(dev, mode, fmt, args);
}
EXPORT_SYMBOL(devfs_mk_cdev);
@@ -1663,7 +1619,7 @@ int devfs_mk_symlink(const char *from, c
err = devfs_do_symlink(NULL, from, to, &de);
if (!err) {
- de->vfs_deletable = TRUE;
+ de->vfs = TRUE;
devfsd_notify(de, DEVFSD_NOTIFY_REGISTERED);
}
@@ -1732,8 +1688,8 @@ void devfs_remove(const char *fmt, ...)
int n;
va_start(args, fmt);
- n = vsnprintf(buf, 64, fmt, args);
- if (n < 64 && buf[0]) {
+ n = vsnprintf(buf, sizeof(buf), fmt, args);
+ if (n < sizeof(buf) && buf[0]) {
devfs_handle_t de = _devfs_find_entry(NULL, buf, 0);
if (!de) {
@@ -1784,33 +1740,6 @@ static int devfs_generate_path (devfs_ha
return pos;
} /* End Function devfs_generate_path */
-
-/**
- * devfs_get_ops - Get the device operations for a devfs entry.
- * @de: The handle to the device entry.
- *
- * Returns a pointer to the device operations on success, else NULL.
- * The use count for the module owning the operations will be incremented.
- */
-
-static struct file_operations *devfs_get_ops (devfs_handle_t de)
-{
- struct file_operations *ops = de->u.cdev.ops;
- struct module *owner;
-
- if (!ops)
- return NULL;
- owner = ops->owner;
- read_lock (&de->parent->u.dir.lock); /* Prevent module from unloading */
- if ( (de->next == de) || !try_module_get (owner) )
- { /* Entry is already unhooked or module is unloading */
- read_unlock (&de->parent->u.dir.lock);
- return NULL;
- }
- read_unlock (&de->parent->u.dir.lock); /* Module can continue unloading*/
- return ops;
-} /* End Function devfs_get_ops */
-
/**
* devfs_setup - Process kernel boot options.
* @str: The boot options after the "devfs=".
@@ -1876,7 +1805,6 @@ static int __init devfs_setup (char *str
__setup("devfs=", devfs_setup);
-EXPORT_SYMBOL(devfs_put);
EXPORT_SYMBOL(devfs_mk_symlink);
EXPORT_SYMBOL(devfs_mk_dir);
EXPORT_SYMBOL(devfs_remove);
@@ -1996,6 +1924,7 @@ static struct inode *_devfs_get_vfs_inod
iput (inode);
return NULL;
}
+ /* FIXME where is devfs_put? */
inode->u.generic_ip = devfs_get (de);
inode->i_ino = de->inode.ino;
DPRINTK (DEBUG_I_GET, "(%d): VFS inode: %p devfs_entry: %p\n",
@@ -2003,26 +1932,25 @@ static struct inode *_devfs_get_vfs_inod
inode->i_blocks = 0;
inode->i_blksize = FAKE_BLOCK_SIZE;
inode->i_op = &devfs_iops;
- inode->i_fop = &devfs_fops;
- if ( S_ISCHR (de->mode) )
- {
- inode->i_rdev = de->u.cdev.dev;
- }
- else if ( S_ISBLK (de->mode) )
- init_special_inode(inode, de->mode, de->u.bdev.dev);
- else if ( S_ISFIFO (de->mode) )
- inode->i_fop = &def_fifo_fops;
- else if ( S_ISDIR (de->mode) )
- {
- inode->i_op = &devfs_dir_iops;
- inode->i_fop = &devfs_dir_fops;
- }
- else if ( S_ISLNK (de->mode) )
- {
- inode->i_op = &devfs_symlink_iops;
- inode->i_size = de->u.symlink.length;
- }
inode->i_mode = de->mode;
+ if (S_ISDIR(de->mode)) {
+ inode->i_op = &devfs_dir_iops;
+ inode->i_fop = &devfs_dir_fops;
+ } else if (S_ISLNK(de->mode)) {
+ inode->i_op = &devfs_symlink_iops;
+ inode->i_size = de->u.symlink.length;
+ } else if (S_ISCHR(de->mode) || S_ISBLK(de->mode)) {
+ init_special_inode(inode, de->mode, de->u.dev);
+ } else if (S_ISFIFO(de->mode) || S_ISSOCK(de->mode)) {
+ init_special_inode(inode, de->mode, 0);
+ } else {
+ PRINTK("(%s): unknown mode %o de: %p\n",
+ de->name, de->mode, de);
+ iput(inode);
+ devfs_put(de);
+ return NULL;
+ }
+
inode->i_uid = de->inode.uid;
inode->i_gid = de->inode.gid;
inode->i_atime = de->inode.atime;
@@ -2098,29 +2026,37 @@ static int devfs_readdir (struct file *f
return stored;
} /* End Function devfs_readdir */
+/* Open devfs specific special files */
static int devfs_open (struct inode *inode, struct file *file)
{
- int err = -ENODEV;
- struct devfs_entry *de;
- struct file_operations *ops;
+ int err;
+ int minor = MINOR(inode->i_rdev);
+ struct file_operations *old_fops, *new_fops;
- de = get_devfs_entry_from_vfs_inode (inode);
- if (de == NULL) return -ENODEV;
- if ( S_ISDIR (de->mode) ) return 0;
- file->private_data = de->info;
- if (S_ISCHR(inode->i_mode)) {
- ops = devfs_get_ops (de); /* Now have module refcount */
- file->f_op = ops;
- if (file->f_op)
- {
- lock_kernel ();
- err = file->f_op->open ? (*file->f_op->open) (inode, file) : 0;
- unlock_kernel ();
+ switch (minor) {
+ case 0: /* /dev/.devfsd */
+ new_fops = fops_get(&devfsd_fops);
+ break;
+#ifdef CONFIG_DEVFS_DEBUG
+ case 1: /* /dev/.stat */
+ new_fops = fops_get(&stat_fops);
+ break;
+#endif
+ default:
+ return -ENODEV;
}
- else
- err = chrdev_open (inode, file);
- }
- return err;
+
+ if (new_fops == NULL)
+ return -ENODEV;
+ old_fops = file->f_op;
+ file->f_op = new_fops;
+ err = new_fops->open ? new_fops->open(inode, file) : 0;
+ if (err) {
+ file->f_op = old_fops;
+ fops_put(new_fops);
+ } else
+ fops_put(old_fops);
+ return err;
} /* End Function devfs_open */
static struct file_operations devfs_fops =
@@ -2132,7 +2068,6 @@ static struct file_operations devfs_dir_
{
.read = generic_read_dir,
.readdir = devfs_readdir,
- .open = devfs_open,
};
@@ -2223,6 +2158,34 @@ static int devfs_d_revalidate_wait (stru
devfs_handle_t parent = get_devfs_entry_from_vfs_inode (dir);
struct devfs_lookup_struct *lookup_info = dentry->d_fsdata;
DECLARE_WAITQUEUE (wait, current);
+ int need_lock;
+
+ /*
+ * FIXME HACK
+ *
+ * make sure that
+ * d_instantiate always runs under lock
+ * we release i_sem lock before going to sleep
+ *
+ * unfortunately sometimes d_revalidate is called with
+ * and sometimes without i_sem lock held. The following checks
+ * attempt to deduce when we need to add (and drop resp.) lock
+ * here. This relies on current (2.6.2) calling coventions:
+ *
+ * lookup_hash is always run under i_sem and is passing NULL
+ * as nd
+ *
+ * open(...,O_CREATE,...) calls _lookup_hash under i_sem
+ * and sets flags to LOOKUP_OPEN|LOOKUP_CREATE
+ *
+ * all other invocations of ->d_revalidate seem to happen
+ * outside of i_sem
+ */
+ need_lock = nd &&
+ (!(nd->flags & LOOKUP_CREATE) || (nd->flags & LOOKUP_PARENT));
+
+ if (need_lock)
+ down(&dir->i_sem);
if ( is_devfsd_or_child (fs_info) )
{
@@ -2233,33 +2196,40 @@ static int devfs_d_revalidate_wait (stru
"(%s): dentry: %p inode: %p de: %p by: \"%s\"\n",
dentry->d_name.name, dentry, dentry->d_inode, de,
current->comm);
- if (dentry->d_inode) return 1;
+ if (dentry->d_inode)
+ goto out;
if (de == NULL)
{
read_lock (&parent->u.dir.lock);
de = _devfs_search_dir (parent, dentry->d_name.name,
dentry->d_name.len);
read_unlock (&parent->u.dir.lock);
- if (de == NULL) return 1;
+ if (de == NULL)
+ goto out;
lookup_info->de = de;
}
/* Create an inode, now that the driver information is available */
inode = _devfs_get_vfs_inode (dir->i_sb, de, dentry);
- if (!inode) return 1;
+ if (!inode)
+ goto out;
DPRINTK (DEBUG_I_LOOKUP,
"(%s): new VFS inode(%u): %p de: %p by: \"%s\"\n",
de->name, de->inode.ino, inode, de, current->comm);
d_instantiate (dentry, inode);
- return 1;
+ goto out;
}
- if (lookup_info == NULL) return 1; /* Early termination */
+ if (lookup_info == NULL)
+ goto out; /* Early termination */
read_lock (&parent->u.dir.lock);
if (dentry->d_fsdata)
{
set_current_state (TASK_UNINTERRUPTIBLE);
add_wait_queue (&lookup_info->wait_queue, &wait);
read_unlock (&parent->u.dir.lock);
+ /* at this point it is always (hopefully) locked */
+ up(&dir->i_sem);
schedule ();
+ down(&dir->i_sem);
/*
* This does not need nor should remove wait from wait_queue.
* Wait queue head is never reused - nothing is ever added to it
@@ -2271,6 +2241,10 @@ static int devfs_d_revalidate_wait (stru
}
else read_unlock (&parent->u.dir.lock);
+
+out:
+ if (need_lock)
+ up(&dir->i_sem);
return 1;
} /* End Function devfs_d_revalidate_wait */
@@ -2320,6 +2294,7 @@ static struct dentry *devfs_lookup (stru
revalidation */
up (&dir->i_sem);
wait_for_devfsd_finished (fs_info); /* If I'm not devfsd, must wait */
+ down (&dir->i_sem); /* Grab it again because them's the rules */
de = lookup_info.de;
/* If someone else has been so kind as to make the inode, we go home
early */
@@ -2349,7 +2324,6 @@ out:
dentry->d_fsdata = NULL;
wake_up (&lookup_info.wait_queue);
write_unlock (&parent->u.dir.lock);
- down (&dir->i_sem); /* Grab it again because them's the rules */
devfs_put (de);
return retval;
} /* End Function devfs_lookup */
@@ -2364,7 +2338,7 @@ static int devfs_unlink (struct inode *d
de = get_devfs_entry_from_vfs_inode (inode);
DPRINTK (DEBUG_I_UNLINK, "(%s): de: %p\n", dentry->d_name.name, de);
if (de == NULL) return -ENOENT;
- if (!de->vfs_deletable) return -EPERM;
+ if (!de->vfs) return -EPERM;
write_lock (&de->parent->u.dir.lock);
unhooked = _devfs_unhook (de);
write_unlock (&de->parent->u.dir.lock);
@@ -2392,7 +2366,7 @@ static int devfs_symlink (struct inode *
DPRINTK (DEBUG_DISABLED, "(%s): errcode from <devfs_do_symlink>: %d\n",
dentry->d_name.name, err);
if (err < 0) return err;
- de->vfs_deletable = TRUE;
+ de->vfs = TRUE;
de->inode.uid = current->euid;
de->inode.gid = current->egid;
de->inode.atime = CURRENT_TIME;
@@ -2421,7 +2395,7 @@ static int devfs_mkdir (struct inode *di
if (parent == NULL) return -ENOENT;
de = _devfs_alloc_entry (dentry->d_name.name, dentry->d_name.len, mode);
if (!de) return -ENOMEM;
- de->vfs_deletable = TRUE;
+ de->vfs = TRUE;
if ( ( err = _devfs_append_entry (parent, de, NULL) ) != 0 )
return err;
de->inode.uid = current->euid;
@@ -2451,7 +2425,7 @@ static int devfs_rmdir (struct inode *di
de = get_devfs_entry_from_vfs_inode (inode);
if (de == NULL) return -ENOENT;
if ( !S_ISDIR (de->mode) ) return -ENOTDIR;
- if (!de->vfs_deletable) return -EPERM;
+ if (!de->vfs) return -EPERM;
/* First ensure the directory is empty and will stay that way */
write_lock (&de->u.dir.lock);
if (de->u.dir.first) err = -ENOTEMPTY;
@@ -2485,11 +2459,9 @@ static int devfs_mknod (struct inode *di
if (parent == NULL) return -ENOENT;
de = _devfs_alloc_entry (dentry->d_name.name, dentry->d_name.len, mode);
if (!de) return -ENOMEM;
- de->vfs_deletable = TRUE;
- if (S_ISCHR (mode))
- de->u.cdev.dev = rdev;
- else if (S_ISBLK (mode))
- de->u.bdev.dev = rdev;
+ de->vfs = TRUE;
+ if (S_ISCHR(mode) || S_ISBLK(mode))
+ de->u.dev = rdev;
if ( ( err = _devfs_append_entry (parent, de, NULL) ) != 0 )
return err;
de->inode.uid = current->euid;
@@ -2642,12 +2614,9 @@ static ssize_t devfsd_read (struct file
info->uid = entry->uid;
info->gid = entry->gid;
de = entry->de;
- if (S_ISCHR(de->mode)) {
- info->major = MAJOR(de->u.cdev.dev);
- info->minor = MINOR(de->u.cdev.dev);
- } else if (S_ISBLK (de->mode)) {
- info->major = MAJOR(de->u.bdev.dev);
- info->minor = MINOR(de->u.bdev.dev);
+ if (S_ISCHR(de->mode) || S_ISBLK(de->mode)) {
+ info->major = MAJOR(de->u.dev);
+ info->minor = MINOR(de->u.dev);
}
pos = devfs_generate_path (de, info->devname, DEVFS_PATHLEN);
if (pos < 0) return pos;
@@ -2809,30 +2778,53 @@ static ssize_t stat_read (struct file *f
} /* End Function stat_read */
#endif
-
-static int __init init_devfs_fs (void)
+static int __init init_devfs_fs(void)
{
- int err;
+ int err;
+ int major;
+ struct devfs_entry *devfsd;
+#ifdef CONFIG_DEVFS_DEBUG
+ struct devfs_entry *stat;
+#endif
+
+ if (_devfs_get_root_entry() == NULL)
+ return -ENOMEM;
- printk (KERN_INFO "%s: v%s Richard Gooch (rgooch@atnf.csiro.au)\n",
- DEVFS_NAME, DEVFS_VERSION);
- devfsd_buf_cache = kmem_cache_create ("devfsd_event",
+ printk(KERN_INFO "%s: %s Richard Gooch (rgooch@atnf.csiro.au)\n",
+ DEVFS_NAME, DEVFS_VERSION);
+ devfsd_buf_cache = kmem_cache_create("devfsd_event",
sizeof (struct devfsd_buf_entry),
0, 0, NULL, NULL);
- if (!devfsd_buf_cache) OOPS ("(): unable to allocate event slab\n");
+ if (!devfsd_buf_cache)
+ OOPS("(): unable to allocate event slab\n");
#ifdef CONFIG_DEVFS_DEBUG
- devfs_debug = devfs_debug_init;
- printk (KERN_INFO "%s: devfs_debug: 0x%0x\n", DEVFS_NAME, devfs_debug);
+ devfs_debug = devfs_debug_init;
+ printk(KERN_INFO "%s: devfs_debug: 0x%0x\n", DEVFS_NAME, devfs_debug);
#endif
- printk (KERN_INFO "%s: boot_options: 0x%0x\n", DEVFS_NAME, boot_options);
- err = register_filesystem (&devfs_fs_type);
- if (!err)
- {
- struct vfsmount *devfs_mnt = kern_mount (&devfs_fs_type);
- err = PTR_ERR (devfs_mnt);
- if ( !IS_ERR (devfs_mnt) ) err = 0;
- }
- return err;
+ printk(KERN_INFO "%s: boot_options: 0x%0x\n", DEVFS_NAME, boot_options);
+
+ /* register special device for devfsd communication */
+ major = register_chrdev(0, "devfs", &devfs_fops);
+ if (major < 0)
+ return major;
+
+ /* And create the entry for ".devfsd" */
+ devfsd = _devfs_alloc_entry(".devfsd", 0, S_IFCHR|S_IRUSR|S_IWUSR);
+ if (devfsd == NULL )
+ return -ENOMEM;
+ devfsd->u.dev = MKDEV(major, 0);
+ _devfs_append_entry(root_entry, devfsd, NULL);
+
+#ifdef CONFIG_DEVFS_DEBUG
+ stat = _devfs_alloc_entry(".stat", 0, S_IFCHR|S_IRUGO);
+ if (stat == NULL )
+ return -ENOMEM;
+ stat->u.dev = MKDEV(major, 1);
+ _devfs_append_entry (root_entry, stat, NULL);
+#endif
+
+ err = register_filesystem(&devfs_fs_type);
+ return err;
} /* End Function init_devfs_fs */
void __init mount_devfs_fs (void)
diff -Nrup ../tmp/linux-2.6.2-rc3/fs/devfs/internal.h linux-2.6.2-rc2/fs/devfs/internal.h
--- ../tmp/linux-2.6.2-rc3/fs/devfs/internal.h 2003-12-18 05:59:25.000000000 +0300
+++ linux-2.6.2-rc2/fs/devfs/internal.h 1970-01-01 03:00:00.000000000 +0300
@@ -1,3 +0,0 @@
-
-extern dev_t devfs_alloc_devnum(umode_t mode);
-extern void devfs_dealloc_devnum(umode_t mode, dev_t devnum);
diff -Nrup ../tmp/linux-2.6.2-rc3/fs/devfs/util.c linux-2.6.2-rc2/fs/devfs/util.c
--- ../tmp/linux-2.6.2-rc3/fs/devfs/util.c 2003-12-18 05:58:56.000000000 +0300
+++ linux-2.6.2-rc2/fs/devfs/util.c 2004-02-01 16:59:55.105294632 +0300
@@ -72,7 +72,6 @@
#include <linux/vmalloc.h>
#include <linux/genhd.h>
#include <asm/bitops.h>
-#include "internal.h"
int devfs_register_tape(const char *name)
@@ -96,161 +95,3 @@ void devfs_unregister_tape(int num)
}
EXPORT_SYMBOL(devfs_unregister_tape);
-
-struct major_list
-{
- spinlock_t lock;
- unsigned long bits[256 / BITS_PER_LONG];
-};
-#if BITS_PER_LONG == 32
-# define INITIALISER64(low,high) (low), (high)
-#else
-# define INITIALISER64(low,high) ( (unsigned long) (high) << 32 | (low) )
-#endif
-
-/* Block majors already assigned:
- 0-3, 7-9, 11-63, 65-99, 101-113, 120-127, 199, 201, 240-255
- Total free: 122
-*/
-static struct major_list block_major_list =
-{SPIN_LOCK_UNLOCKED,
- {INITIALISER64 (0xfffffb8f, 0xffffffff), /* Majors 0-31, 32-63 */
- INITIALISER64 (0xfffffffe, 0xff03ffef), /* Majors 64-95, 96-127 */
- INITIALISER64 (0x00000000, 0x00000000), /* Majors 128-159, 160-191 */
- INITIALISER64 (0x00000280, 0xffff0000), /* Majors 192-223, 224-255 */
- }
-};
-
-/* Char majors already assigned:
- 0-7, 9-151, 154-158, 160-211, 216-221, 224-230, 240-255
- Total free: 19
-*/
-static struct major_list char_major_list =
-{SPIN_LOCK_UNLOCKED,
- {INITIALISER64 (0xfffffeff, 0xffffffff), /* Majors 0-31, 32-63 */
- INITIALISER64 (0xffffffff, 0xffffffff), /* Majors 64-95, 96-127 */
- INITIALISER64 (0x7cffffff, 0xffffffff), /* Majors 128-159, 160-191 */
- INITIALISER64 (0x3f0fffff, 0xffff007f), /* Majors 192-223, 224-255 */
- }
-};
-
-
-/**
- * devfs_alloc_major - Allocate a major number.
- * @mode: The file mode (must be block device or character device).
- * Returns the allocated major, else -1 if none are available.
- * This routine is thread safe and does not block.
- */
-
-
-struct minor_list
-{
- int major;
- unsigned long bits[256 / BITS_PER_LONG];
- struct minor_list *next;
-};
-
-static struct device_list {
- struct minor_list *first;
- struct minor_list *last;
- int none_free;
-} block_list, char_list;
-
-static DECLARE_MUTEX(device_list_mutex);
-
-
-/**
- * devfs_alloc_devnum - Allocate a device number.
- * @mode: The file mode (must be block device or character device).
- *
- * Returns the allocated device number, else NODEV if none are available.
- * This routine is thread safe and may block.
- */
-
-dev_t devfs_alloc_devnum(umode_t mode)
-{
- struct device_list *list;
- struct major_list *major_list;
- struct minor_list *entry;
- int minor;
-
- if (S_ISCHR(mode)) {
- major_list = &char_major_list;
- list = &char_list;
- } else {
- major_list = &block_major_list;
- list = &block_list;
- }
-
- down(&device_list_mutex);
- if (list->none_free)
- goto out_unlock;
-
- for (entry = list->first; entry; entry = entry->next) {
- minor = find_first_zero_bit (entry->bits, 256);
- if (minor >= 256)
- continue;
- goto out_done;
- }
-
- /* Need to allocate a new major */
- entry = kmalloc (sizeof *entry, GFP_KERNEL);
- if (!entry)
- goto out_full;
- memset(entry, 0, sizeof *entry);
-
- spin_lock(&major_list->lock);
- entry->major = find_first_zero_bit(major_list->bits, 256);
- if (entry->major >= 256) {
- spin_unlock(&major_list->lock);
- kfree(entry);
- goto out_full;
- }
- __set_bit(entry->major, major_list->bits);
- spin_unlock(&major_list->lock);
-
- if (!list->first)
- list->first = entry;
- else
- list->last->next = entry;
- list->last = entry;
-
- minor = 0;
- out_done:
- __set_bit(minor, entry->bits);
- up(&device_list_mutex);
- return MKDEV(entry->major, minor);
- out_full:
- list->none_free = 1;
- out_unlock:
- up(&device_list_mutex);
- return 0;
-}
-
-
-/**
- * devfs_dealloc_devnum - Dellocate a device number.
- * @mode: The file mode (must be block device or character device).
- * @devnum: The device number.
- *
- * This routine is thread safe and may block.
- */
-
-void devfs_dealloc_devnum(umode_t mode, dev_t devnum)
-{
- struct device_list *list = S_ISCHR(mode) ? &char_list : &block_list;
- struct minor_list *entry;
-
- if (!devnum)
- return;
-
- down(&device_list_mutex);
- for (entry = list->first; entry; entry = entry->next) {
- if (entry->major == MAJOR(devnum)) {
- if (__test_and_clear_bit(MINOR(devnum), entry->bits))
- list->none_free = 0;
- break;
- }
- }
- up(&device_list_mutex);
-}
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: kernel BUG under 2.6.1-mm5
2004-02-01 19:09 ` Andrey Borzenkov
@ 2004-02-04 15:40 ` Christoph Hellwig
0 siblings, 0 replies; 6+ messages in thread
From: Christoph Hellwig @ 2004-02-04 15:40 UTC (permalink / raw)
To: Andrey Borzenkov; +Cc: Andrew Morton, Jim Faulkner, linux-kernel
> good. here is extended version that includes the same fix + some
> cleanup. It removes dead code, removes long obsolete attempt to manage
> module refcounting, unifies bdev and cdev - they are treated equal now.
>
> andrew please consider for -mm for testing.
>
> More cleanup will follow.
-struct bdev_type
-{
- dev_t dev;
-};
-
-struct cdev_type
-{
- struct file_operations *ops;
- dev_t dev;
- unsigned char autogen:1;
-};
Okay, this cleanup is nice, but could you separate it from the bugfixes?
+ * TODO it must be called asynchronously due to the fact
+ * that devfs is initialized relatively late. Proper way
+ * is to remove module_init from init_devfs_fs and manually
+ * call it early enough during system init
What about doing this? This lazy initialization scheme always
bothere me..
+ /*
+ * FIXME HACK
+ *
+ * make sure that
+ * d_instantiate always runs under lock
+ * we release i_sem lock before going to sleep
+ *
+ * unfortunately sometimes d_revalidate is called with
+ * and sometimes without i_sem lock held. The following checks
+ * attempt to deduce when we need to add (and drop resp.) lock
+ * here. This relies on current (2.6.2) calling coventions:
+ *
+ * lookup_hash is always run under i_sem and is passing NULL
+ * as nd
+ *
+ * open(...,O_CREATE,...) calls _lookup_hash under i_sem
+ * and sets flags to LOOKUP_OPEN|LOOKUP_CREATE
+ *
+ * all other invocations of ->d_revalidate seem to happen
+ * outside of i_sem
+ */
+ need_lock = nd &&
+ (!(nd->flags & LOOKUP_CREATE) || (nd->flags & LOOKUP_PARENT));
+
+ if (need_lock)
+ down(&dir->i_sem);
Yikes! Don't do such hacks, they will stop working sooner or later.
I'd rather add i_sem to all calls to ->d_revalidate in a way that punish
filesystems not having ->d_revalidate than such a hack
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2004-02-04 15:40 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-01-21 22:23 kernel BUG under 2.6.1-mm5 Jim Faulkner
2004-01-21 22:48 ` Andrew Morton
2004-01-26 15:30 ` Andrey Borzenkov
2004-01-26 21:22 ` Jim Faulkner
2004-02-01 19:09 ` Andrey Borzenkov
2004-02-04 15:40 ` Christoph Hellwig
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox