2003-09-06 09:29:13

by Mathieu LESNIAK

[permalink] [raw]
Subject: Fs corruption with swsusp in test4-mm6 ?



Sep 6 10:29:16 herrbach syslogd 1.4.1#11: restart.
Sep 6 10:29:16 herrbach kernel: klogd 1.4.1#11, log source = /proc/kmsg started.
Sep 6 10:29:16 herrbach kernel: Inspecting /boot/System.map-2.6.0-test4-mm6
Sep 6 10:29:17 herrbach kernel: Loaded 26011 symbols from /boot/System.map-2.6.0-test4-mm6.
Sep 6 10:29:17 herrbach kernel: Symbols match kernel version 2.6.0.
Sep 6 10:29:17 herrbach kernel: No module symbols loaded - kernel modules not enabled.
Sep 6 10:29:17 herrbach kernel: Linux version 2.6.0-test4-mm6 (root@athlon) (version gcc 3.3.2 20030831 (Debian prerelease)) #3 Sat Sep 6 10:17:01 CEST 2003
Sep 6 10:29:17 herrbach kernel: Video mode to be used for restore is 317
Sep 6 10:29:17 herrbach kernel: BIOS-provided physical RAM map:
Sep 6 10:29:17 herrbach kernel: BIOS-e820: 0000000000000000 - 000000000009f800 (usable)
Sep 6 10:29:17 herrbach kernel: BIOS-e820: 000000000009f800 - 00000000000a0000 (reserved)
Sep 6 10:29:17 herrbach kernel: BIOS-e820: 00000000000dc000 - 0000000000100000 (reserved)
Sep 6 10:29:17 herrbach kernel: BIOS-e820: 0000000000100000 - 000000000bf70000 (usable)
Sep 6 10:29:17 herrbach kernel: BIOS-e820: 000000000bf70000 - 000000000bf7f000 (ACPI data)
Sep 6 10:29:17 herrbach kernel: BIOS-e820: 000000000bf7f000 - 000000000bf80000 (ACPI NVS)
Sep 6 10:29:17 herrbach kernel: BIOS-e820: 000000000bf80000 - 000000000c000000 (reserved)
Sep 6 10:29:17 herrbach kernel: BIOS-e820: 000000001bf80000 - 000000001c000000 (reserved)
Sep 6 10:29:17 herrbach kernel: BIOS-e820: 00000000fff80000 - 0000000100000000 (reserved)
Sep 6 10:29:17 herrbach kernel: 191MB LOWMEM available.
Sep 6 10:29:17 herrbach kernel: On node 0 totalpages: 49008
Sep 6 10:29:17 herrbach kernel: DMA zone: 4096 pages, LIFO batch:1
Sep 6 10:29:17 herrbach kernel: Normal zone: 44912 pages, LIFO batch:10
Sep 6 10:29:17 herrbach kernel: HighMem zone: 0 pages, LIFO batch:1
Sep 6 10:29:17 herrbach kernel: DMI 2.3 present.
Sep 6 10:29:17 herrbach kernel: ACPI: RSDP (v000 PTLTD ) @ 0x000f6c90
Sep 6 10:29:17 herrbach kernel: ACPI: RSDT (v001 PTLTD RSDT 0x06040000 LTP 0x00000000) @ 0x0bf78eb1
Sep 6 10:29:17 herrbach kernel: ACPI: FADT (v001 ATI Salmon 0x06040000 ATI 0x000f4240) @ 0x0bf7ef64
Sep 6 10:29:17 herrbach kernel: ACPI: BOOT (v001 PTLTD $SBFTBL$ 0x06040000 LTP 0x00000001) @ 0x0bf7efd8
Sep 6 10:29:17 herrbach kernel: ACPI: DSDT (v001 ATI MS2_1535 0x06040000 MSFT 0x0100000e) @ 0x00000000
Sep 6 10:29:17 herrbach kernel: Building zonelist for node : 0
Sep 6 10:29:17 herrbach kernel: Kernel command line: BOOT_IMAGE=Linux ro root=302 hdc=ide-scsi
Sep 6 10:29:17 herrbach kernel: ide_setup: hdc=ide-scsi
Sep 6 10:29:17 herrbach kernel: current: c03ba9c0
Sep 6 10:29:17 herrbach kernel: current->thread_info: c0436000
Sep 6 10:29:17 herrbach kernel: Initializing CPU#0
Sep 6 10:29:17 herrbach kernel: PID hash table entries: 1024 (order 10: 8192 bytes)
Sep 6 10:29:17 herrbach kernel: Detected 1993.827 MHz processor.
Sep 6 10:29:17 herrbach kernel: Console: colour dummy device 80x25
Sep 6 10:29:17 herrbach kernel: Memory: 189768k/196032k available (2382k kernel code, 5616k reserved, 905k data, 152k init, 0k highmem)
Sep 6 10:29:17 herrbach kernel: zapping low mappings.
Sep 6 10:29:17 herrbach kernel: Calibrating delay loop... 3932.16 BogoMIPS
Sep 6 10:29:17 herrbach kernel: Dentry cache hash table entries: 32768 (order: 5, 131072 bytes)
Sep 6 10:29:17 herrbach kernel: Inode-cache hash table entries: 16384 (order: 4, 65536 bytes)
Sep 6 10:29:17 herrbach kernel: Mount-cache hash table entries: 512 (order: 0, 4096 bytes)
Sep 6 10:29:17 herrbach kernel: -> /dev
Sep 6 10:29:17 herrbach kernel: -> /dev/console
Sep 6 10:29:17 herrbach kernel: -> /root
Sep 6 10:29:17 herrbach kernel: CPU: After generic identify, caps: bfebf9ff 00000000 00000000 00000000
Sep 6 10:29:17 herrbach kernel: CPU: After vendor identify, caps: bfebf9ff 00000000 00000000 00000000
Sep 6 10:29:17 herrbach kernel: CPU: Trace cache: 12K uops, L1 D cache: 8K
Sep 6 10:29:17 herrbach kernel: CPU: L2 cache: 256K
Sep 6 10:29:17 herrbach kernel: CPU: After all inits, caps: bfebf9ff 00000000 00000000 00000080
Sep 6 10:29:17 herrbach kernel: Intel machine check architecture supported.
Sep 6 10:29:17 herrbach kernel: Intel machine check reporting enabled on CPU#0.
Sep 6 10:29:17 herrbach kernel: CPU#0: Intel P4/Xeon Extended MCE MSRs (12) available
Sep 6 10:29:17 herrbach kernel: CPU: Intel Mobile Intel(R) Celeron(R) CPU 2.00GHz stepping 07
Sep 6 10:29:17 herrbach kernel: Enabling fast FPU save and restore... done.
Sep 6 10:29:17 herrbach kernel: Enabling unmasked SIMD FPU exception support... done.
Sep 6 10:29:17 herrbach kernel: Checking 'hlt' instruction... OK.
Sep 6 10:29:17 herrbach kernel: POSIX conformance testing by UNIFIX
Sep 6 10:29:17 herrbach kernel: PM: Adding info for No Bus:legacy
Sep 6 10:29:17 herrbach kernel: Initializing RT netlink socket
Sep 6 10:29:17 herrbach kernel: PCI: PCI BIOS revision 2.10 entry at 0xfd89b, last bus=2
Sep 6 10:29:17 herrbach kernel: PCI: Using configuration type 1
Sep 6 10:29:17 herrbach kernel: mtrr: v2.0 (20020519)
Sep 6 10:29:17 herrbach kernel: ACPI: Subsystem revision 20030813
Sep 6 10:29:17 herrbach kernel: ACPI: Interpreter enabled
Sep 6 10:29:17 herrbach kernel: ACPI: Using PIC for interrupt routing
Sep 6 10:29:17 herrbach kernel: ACPI: PCI Root Bridge [PCI0] (00:00)
Sep 6 10:29:17 herrbach kernel: PCI: Probing PCI hardware (bus 00)
Sep 6 10:29:17 herrbach kernel: PM: Adding info for No Bus:pci0000:00
Sep 6 10:29:17 herrbach kernel: PM: Adding info for pci:0000:00:00.0
Sep 6 10:29:17 herrbach kernel: PM: Adding info for pci:0000:00:01.0
Sep 6 10:29:17 herrbach kernel: PM: Adding info for pci:0000:00:02.0
Sep 6 10:29:17 herrbach kernel: PM: Adding info for pci:0000:00:06.0
Sep 6 10:29:17 herrbach kernel: PM: Adding info for pci:0000:00:07.0
Sep 6 10:29:17 herrbach kernel: PM: Adding info for pci:0000:00:08.0
Sep 6 10:29:17 herrbach kernel: PM: Adding info for pci:0000:00:0a.0
Sep 6 10:29:17 herrbach kernel: PM: Adding info for pci:0000:00:10.0
Sep 6 10:29:17 herrbach kernel: PM: Adding info for pci:0000:00:11.0
Sep 6 10:29:17 herrbach kernel: PM: Adding info for pci:0000:00:12.0
Sep 6 10:29:17 herrbach kernel: PM: Adding info for pci:0000:01:05.0
Sep 6 10:29:17 herrbach kernel: ACPI: PCI Interrupt Routing Table [\_SB_.PCI0._PRT]
Sep 6 10:29:17 herrbach kernel: ACPI: PCI Interrupt Routing Table [\_SB_.PCI0.AGPB._PRT]
Sep 6 10:29:17 herrbach kernel: ACPI: PCI Interrupt Link [LNK0] (IRQs 7 10)
Sep 6 10:29:17 herrbach kernel: ACPI: PCI Interrupt Link [LNK1] (IRQs 7 *10)
Sep 6 10:29:17 herrbach kernel: ACPI: PCI Interrupt Link [LNK2] (IRQs 10)
Sep 6 10:29:17 herrbach kernel: ACPI: PCI Interrupt Link [LNK3] (IRQs 10)
Sep 6 10:29:17 herrbach kernel: ACPI: PCI Interrupt Link [LNK4] (IRQs 10)
Sep 6 10:29:17 herrbach kernel: ACPI: PCI Interrupt Link [LNK5] (IRQs 7 *11)
Sep 6 10:29:17 herrbach kernel: ACPI: PCI Interrupt Link [LNK6] (IRQs 10)
Sep 6 10:29:17 herrbach kernel: ACPI: PCI Interrupt Link [LNK7] (IRQs *5)
Sep 6 10:29:17 herrbach kernel: ACPI: PCI Interrupt Link [LNK8] (IRQs *10)
Sep 6 10:29:17 herrbach kernel: ACPI: Embedded Controller [EC0] (gpe 24)
Sep 6 10:29:17 herrbach kernel: Linux Plug and Play Support v0.97 (c) Adam Belay
Sep 6 10:29:17 herrbach kernel: PnPBIOS: Scanning system for PnP BIOS support...
Sep 6 10:29:17 herrbach kernel: PnPBIOS: Found PnP BIOS installation structure at 0xc00f6cc0
Sep 6 10:29:17 herrbach kernel: PnPBIOS: PnP BIOS version 1.0, entry 0xf0000:0xaff0, dseg 0x400
Sep 6 10:29:17 herrbach kernel: PM: Adding info for No Bus:pnp0
Sep 6 10:29:17 herrbach kernel: PM: Adding info for pnp:00:00
Sep 6 10:29:17 herrbach kernel: PM: Adding info for pnp:00:01
Sep 6 10:29:17 herrbach kernel: PM: Adding info for pnp:00:02
Sep 6 10:29:17 herrbach kernel: PM: Adding info for pnp:00:03
Sep 6 10:29:17 herrbach kernel: PM: Adding info for pnp:00:04
Sep 6 10:29:17 herrbach kernel: PM: Adding info for pnp:00:05
Sep 6 10:29:17 herrbach kernel: PM: Adding info for pnp:00:06
Sep 6 10:29:17 herrbach kernel: PM: Adding info for pnp:00:07
Sep 6 10:29:17 herrbach kernel: PM: Adding info for pnp:00:08
Sep 6 10:29:17 herrbach kernel: PM: Adding info for pnp:00:09
Sep 6 10:29:17 herrbach kernel: PM: Adding info for pnp:00:0a
Sep 6 10:29:17 herrbach kernel: PM: Adding info for pnp:00:0b
Sep 6 10:29:17 herrbach kernel: PM: Adding info for pnp:00:0c
Sep 6 10:29:17 herrbach kernel: PM: Adding info for pnp:00:0d
Sep 6 10:29:17 herrbach kernel: PM: Adding info for pnp:00:0f
Sep 6 10:29:17 herrbach kernel: PM: Adding info for pnp:00:10
Sep 6 10:29:17 herrbach kernel: PM: Adding info for pnp:00:13
Sep 6 10:29:17 herrbach kernel: PnPBIOS: 17 nodes reported by PnP BIOS; 17 recorded by driver
Sep 6 10:29:17 herrbach kernel: SCSI subsystem initialized
Sep 6 10:29:17 herrbach kernel: drivers/usb/core/usb.c: registered new driver usbfs
Sep 6 10:29:17 herrbach kernel: drivers/usb/core/usb.c: registered new driver hub
Sep 6 10:29:17 herrbach kernel: ACPI: PCI Interrupt Link [LNK8] enabled at IRQ 10
Sep 6 10:29:17 herrbach kernel: ACPI: PCI Interrupt Link [LNK7] enabled at IRQ 5
Sep 6 10:29:17 herrbach kernel: ACPI: PCI Interrupt Link [LNK6] enabled at IRQ 10
Sep 6 10:29:17 herrbach kernel: ACPI: PCI Interrupt Link [LNK5] enabled at IRQ 11
Sep 6 10:29:17 herrbach kernel: ACPI: No IRQ known for interrupt pin A of device 0000:00:10.0
Sep 6 10:29:17 herrbach kernel: ACPI: PCI Interrupt Link [LNK1] enabled at IRQ 10
Sep 6 10:29:17 herrbach kernel: ACPI: PCI Interrupt Link [LNK0] enabled at IRQ 10
Sep 6 10:29:17 herrbach kernel: PCI: Using ACPI for IRQ routing
Sep 6 10:29:17 herrbach kernel: PCI: if you experience problems, try using option 'pci=noacpi' or even 'acpi=off'
Sep 6 10:29:17 herrbach kernel: vesafb: framebuffer at 0xd8000000, mapped to 0xcc80c000, size 16384k
Sep 6 10:29:17 herrbach kernel: vesafb: mode is 1024x768x16, linelength=2048, pages=41
Sep 6 10:29:17 herrbach kernel: vesafb: protected mode interface info at c000:51bf
Sep 6 10:29:17 herrbach kernel: vesafb: scrolling: redraw
Sep 6 10:29:17 herrbach kernel: vesafb: directcolor: size=0:5:6:5, shift=0:11:5:0
Sep 6 10:29:17 herrbach kernel: fb0: VESA VGA frame buffer device
Sep 6 10:29:17 herrbach kernel: Console: switching to colour frame buffer device 128x48
Sep 6 10:29:17 herrbach kernel: pty: 256 Unix98 ptys configured
Sep 6 10:29:17 herrbach kernel: SBF: Simple Boot Flag extension found and enabled.
Sep 6 10:29:17 herrbach kernel: SBF: Setting boot flags 0x1
Sep 6 10:29:17 herrbach kernel: Machine check exception polling timer started.
Sep 6 10:29:17 herrbach kernel: powernow: AMD processor not detected.
Sep 6 10:29:17 herrbach kernel: cpufreq: P4/Xeon(TM) CPU On-Demand Clock Modulation available
Sep 6 10:29:17 herrbach kernel: cpufreq: Intel(R) SpeedStep(TM) for this chipset not (yet) available.
Sep 6 10:29:17 herrbach kernel: ikconfig 0.6 with /proc/config*
Sep 6 10:29:17 herrbach kernel: Initializing Cryptographic API
Sep 6 10:29:17 herrbach kernel: ACPI: AC Adapter [ACAD] (on-line)
Sep 6 10:29:17 herrbach kernel: ACPI: Battery Slot [BAT1] (battery absent)
Sep 6 10:29:17 herrbach kernel: ACPI: Power Button (FF) [PWRF]
Sep 6 10:29:17 herrbach kernel: ACPI: Lid Switch [LID]
Sep 6 10:29:17 herrbach kernel: ACPI: Processor [CPU0] (supports C1 C2, 8 throttling states)
Sep 6 10:29:17 herrbach kernel: ACPI: Thermal Zone [THRM] (38 C)
Sep 6 10:29:17 herrbach kernel: PM: Adding info for No Bus:pnp1
Sep 6 10:29:17 herrbach kernel: isapnp: Scanning for PnP cards...
Sep 6 10:29:17 herrbach kernel: isapnp: No Plug & Play device found
Sep 6 10:29:17 herrbach kernel: Real Time Clock Driver v1.12
Sep 6 10:29:17 herrbach kernel: [drm] Initialized radeon 1.9.0 20020828 on minor 0
Sep 6 10:29:17 herrbach kernel: Serial: 8250/16550 driver $Revision: 1.90 $ IRQ sharing disabled
Sep 6 10:29:17 herrbach kernel: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
Sep 6 10:29:17 herrbach kernel: PCI: Enabling device 0000:00:08.0 (0000 -> 0003)
Sep 6 10:29:17 herrbach kernel: ttyS1 at I/O 0x1428 (irq = 10) is a 8250
Sep 6 10:29:17 herrbach kernel: ttyS2 at I/O 0x1440 (irq = 10) is a 8250
Sep 6 10:29:17 herrbach kernel: ttyS3 at I/O 0x1450 (irq = 10) is a 8250
Sep 6 10:29:17 herrbach kernel: Using anticipatory scheduling io scheduler
Sep 6 10:29:17 herrbach kernel: floppy0: no floppy controllers found
Sep 6 10:29:17 herrbach kernel: RAMDISK driver initialized: 16 RAM disks of 4096K size 1024 blocksize
Sep 6 10:29:17 herrbach kernel: loop: loaded (max 8 devices)
Sep 6 10:29:17 herrbach kernel: nbd: registered device at major 43
Sep 6 10:29:17 herrbach kernel: natsemi dp8381x driver, version 1.07+LK1.0.17, Sep 27, 2002
Sep 6 10:29:17 herrbach kernel: originally by Donald Becker <[email protected]>
Sep 6 10:29:17 herrbach kernel: http://www.scyld.com/network/natsemi.html
Sep 6 10:29:17 herrbach kernel: 2.4.x kernel port by Jeff Garzik, Tjeerd Mulder
Sep 6 10:29:17 herrbach kernel: eth0: NatSemi DP8381[56] at 0xcd80f000, 00:0b:cd:a7:40:b4, IRQ 10.
Sep 6 10:29:17 herrbach kernel: Uniform Multi-Platform E-IDE driver Revision: 7.00alpha2
Sep 6 10:29:17 herrbach kernel: ide: Assuming 33MHz system bus speed for PIO modes; override with idebus=xx
Sep 6 10:29:17 herrbach kernel: ALI15X3: IDE controller at PCI slot 0000:00:10.0
Sep 6 10:29:17 herrbach kernel: ACPI: No IRQ known for interrupt pin A of device 0000:00:10.0
Sep 6 10:29:17 herrbach kernel: ALI15X3: chipset revision 196
Sep 6 10:29:17 herrbach kernel: ALI15X3: not 100%% native mode: will probe irqs later
Sep 6 10:29:17 herrbach kernel: ide0: BM-DMA at 0x2000-0x2007, BIOS settings: hda:DMA, hdb:pio
Sep 6 10:29:17 herrbach kernel: ide1: BM-DMA at 0x2008-0x200f, BIOS settings: hdc:pio, hdd:pio
Sep 6 10:29:17 herrbach kernel: hda: HITACHI_DK23EA-30, ATA DISK drive
Sep 6 10:29:17 herrbach kernel: PM: Adding info for No Bus:ide0
Sep 6 10:29:17 herrbach kernel: ide0 at 0x1f0-0x1f7,0x3f6 on irq 14
Sep 6 10:29:17 herrbach kernel: PM: Adding info for ide:0.0
Sep 6 10:29:17 herrbach kernel: hdc: HL-DT-STCD-RW/DVD DRIVE GCC-4241N, ATAPI CD/DVD-ROM drive
Sep 6 10:29:17 herrbach kernel: PM: Adding info for No Bus:ide1
Sep 6 10:29:17 herrbach kernel: ide1 at 0x170-0x177,0x376 on irq 15
Sep 6 10:29:17 herrbach kernel: PM: Adding info for ide:1.0
Sep 6 10:29:17 herrbach kernel: hda: max request size: 128KiB
Sep 6 10:29:17 herrbach kernel: hda: 58605120 sectors (30005 MB) w/2048KiB Cache, CHS=58140/16/63, UDMA(100)
Sep 6 10:29:17 herrbach kernel: hda: hda1 hda2 hda3
Sep 6 10:29:17 herrbach kernel: Console: switching to colour frame buffer device 128x48
Sep 6 10:29:17 herrbach kernel: Initializing USB Mass Storage driver...
Sep 6 10:29:17 herrbach kernel: drivers/usb/core/usb.c: registered new driver usb-storage
Sep 6 10:29:17 herrbach kernel: USB Mass Storage support registered.
Sep 6 10:29:17 herrbach kernel: drivers/usb/core/usb.c: registered new driver hiddev
Sep 6 10:29:17 herrbach kernel: drivers/usb/core/usb.c: registered new driver hid
Sep 6 10:29:17 herrbach kernel: drivers/usb/input/hid-core.c: v2.0:USB HID core driver
Sep 6 10:29:17 herrbach kernel: mice: PS/2 mouse device common for all mice
Sep 6 10:29:17 herrbach kernel: Synaptics Touchpad, model: 1
Sep 6 10:29:17 herrbach kernel: Firmware: 5.8
Sep 6 10:29:17 herrbach kernel: Sensor: 35
Sep 6 10:29:17 herrbach kernel: new absolute packet format
Sep 6 10:29:17 herrbach kernel: Touchpad has extended capability bits
Sep 6 10:29:17 herrbach kernel: -> multifinger detection
Sep 6 10:29:17 herrbach kernel: -> palm detection
Sep 6 10:29:17 herrbach kernel: input: Synaptics Synaptics TouchPad on isa0060/serio1
Sep 6 10:29:17 herrbach kernel: serio: i8042 AUX port at 0x60,0x64 irq 12
Sep 6 10:29:17 herrbach kernel: input: AT Set 2 keyboard on isa0060/serio0
Sep 6 10:29:17 herrbach kernel: serio: i8042 KBD port at 0x60,0x64 irq 1
Sep 6 10:29:17 herrbach kernel: Advanced Linux Sound Architecture Driver Version 0.9.6 (Wed Aug 20 20:27:13 2003 UTC).
Sep 6 10:29:17 herrbach kernel: ALSA device list:
Sep 6 10:29:17 herrbach kernel: No soundcards found.
Sep 6 10:29:17 herrbach kernel: NET4: Linux TCP/IP 1.0 for NET4.0
Sep 6 10:29:17 herrbach kernel: IP: routing cache hash table of 1024 buckets, 8Kbytes
Sep 6 10:29:17 herrbach kernel: TCP: Hash tables configured (established 16384 bind 32768)
Sep 6 10:29:17 herrbach kernel: Linux IP multicast router 0.06 plus PIM-SM
Sep 6 10:29:17 herrbach kernel: NET4: Unix domain sockets 1.0/SMP for Linux NET4.0.
Sep 6 10:29:17 herrbach kernel: cpufreq: No CPUs supporting ACPI performance management found.
Sep 6 10:29:17 herrbach kernel: BIOS EDD facility v0.09 2003-Jan-22, 1 devices found
Sep 6 10:29:17 herrbach kernel: PM: Reading swsusp image.
Sep 6 10:29:17 herrbach kernel: PM: Resume from disk failed.
Sep 6 10:29:17 herrbach kernel: ACPI: (supports S0 S3 S4 S5)
Sep 6 10:29:17 herrbach kernel: found reiserfs format "3.6" with standard journal
Sep 6 10:29:17 herrbach kernel: Reiserfs journal params: device hda2, size 8192, journal first block 18, max trans len 1024, max batch 900, max commit age 30, max trans age 30
Sep 6 10:29:17 herrbach kernel: reiserfs: checking transaction log (hda2) for (hda2)
Sep 6 10:29:17 herrbach kernel: Using r5 hash to sort names
Sep 6 10:29:17 herrbach kernel: VFS: Mounted root (reiserfs filesystem) readonly.
Sep 6 10:29:17 herrbach kernel: Freeing unused kernel memory: 152k freed
Sep 6 10:29:17 herrbach kernel: Adding 200804k swap on /dev/hda3. Priority:-1 extents:1
Sep 6 10:29:17 herrbach kernel: ohci-hcd: 2003 Feb 24 USB 1.1 'Open' Host Controller (OHCI) Driver (PCI)
Sep 6 10:29:17 herrbach kernel: ohci-hcd: block sizes: ed 64 td 64
Sep 6 10:29:17 herrbach kernel: ohci-hcd 0000:00:02.0: OHCI Host Controller
Sep 6 10:29:17 herrbach kernel: ohci-hcd 0000:00:02.0: irq 10, pci mem cd8db000
Sep 6 10:29:17 herrbach kernel: ohci-hcd 0000:00:02.0: new USB bus registered, assigned bus number 1
Sep 6 10:29:17 herrbach kernel: PM: Adding info for usb:usb1
Sep 6 10:29:17 herrbach kernel: PM: Adding info for usb:1-0:0
Sep 6 10:29:17 herrbach kernel: hub 1-0:0: USB hub found
Sep 6 10:29:17 herrbach kernel: hub 1-0:0: 4 ports detected
Sep 6 10:29:17 herrbach kernel: PM: Adding info for No Bus:ide-scsi
Sep 6 10:29:17 herrbach kernel: scsi0 : SCSI host adapter emulation for IDE ATAPI devices
Sep 6 10:29:17 herrbach kernel: PM: Adding info for No Bus:host0
Sep 6 10:29:17 herrbach kernel: Vendor: HL-DT-ST Model: RW/DVD GCC-4241N Rev: 0C27
Sep 6 10:29:17 herrbach kernel: Type: CD-ROM ANSI SCSI revision: 02
Sep 6 10:29:17 herrbach kernel: PM: Adding info for scsi:0:0:0:0
Sep 6 10:29:17 herrbach kernel: PCI: Enabling device 0000:00:06.0 (0005 -> 0007)
Sep 6 10:29:17 herrbach modprobe: FATAL: Module snd_card_1 not found.
Sep 6 10:29:17 herrbach modprobe: FATAL: Module snd_card_1 not found.
Sep 6 10:29:17 herrbach modprobe: FATAL: Module snd_card_2 not found.
Sep 6 10:29:17 herrbach modprobe: FATAL: Module snd_card_2 not found.
Sep 6 10:29:17 herrbach modprobe: FATAL: Module snd_card_3 not found.
Sep 6 10:29:17 herrbach modprobe: FATAL: Module snd_card_3 not found.
Sep 6 10:29:18 herrbach kernel: eth0: link up.
Sep 6 10:29:18 herrbach kernel: eth0: Setting full-duplex based on negotiated link capability.
Sep 6 10:29:18 herrbach ifplugd(eth0)[248]: Using interface eth0/00:0B:CD:A7:40:B4 with driver <natsemi> (version: 1.07+LK1.0.17)
Sep 6 10:29:18 herrbach ifplugd(eth0)[248]: Using detection mode: SIOCETHTOOL
Sep 6 10:29:18 herrbach ifplugd(eth0)[248]: ifplugd 0.15 successfully initialized, link beat detected.
Sep 6 10:29:18 herrbach ifplugd(eth0)[248]: Executing '/etc/ifplugd/ifplugd.action eth0 up'.
Sep 6 10:29:18 herrbach dhclient: Internet Software Consortium DHCP Client 2.0pl5
Sep 6 10:29:18 herrbach ifplugd(eth0)[248]: client: Internet Software Consortium DHCP Client 2.0pl5
Sep 6 10:29:18 herrbach dhclient: Copyright 1995, 1996, 1997, 1998, 1999 The Internet Software Consortium.
Sep 6 10:29:18 herrbach ifplugd(eth0)[248]: client: Copyright 1995, 1996, 1997, 1998, 1999 The Internet Software Consortium.
Sep 6 10:29:18 herrbach dhclient: All rights reserved.
Sep 6 10:29:18 herrbach ifplugd(eth0)[248]: client: All rights reserved.
Sep 6 10:29:18 herrbach dhclient:
Sep 6 10:29:18 herrbach dhclient: Please contribute if you find this software useful.
Sep 6 10:29:18 herrbach ifplugd(eth0)[248]: client: Please contribute if you find this software useful.
Sep 6 10:29:18 herrbach dhclient: For info, please visit http://www.isc.org/dhcp-contrib.html
Sep 6 10:29:18 herrbach ifplugd(eth0)[248]: client: For info, please visit http://www.isc.org/dhcp-contrib.html
Sep 6 10:29:18 herrbach dhclient:
Sep 6 10:29:19 herrbach dhclient: Listening on LPF/eth0/00:0b:cd:a7:40:b4
Sep 6 10:29:19 herrbach dhclient: Sending on LPF/eth0/00:0b:cd:a7:40:b4
Sep 6 10:29:19 herrbach dhclient: Sending on Socket/fallback/fallback-net
Sep 6 10:29:19 herrbach dhclient: DHCPREQUEST on eth0 to 255.255.255.255 port 67
Sep 6 10:29:19 herrbach ifplugd(eth0)[248]: client: Listening on LPF/eth0/00:0b:cd:a7:40:b4
Sep 6 10:29:19 herrbach ifplugd(eth0)[248]: client: Sending on LPF/eth0/00:0b:cd:a7:40:b4
Sep 6 10:29:19 herrbach ifplugd(eth0)[248]: client: Sending on Socket/fallback/fallback-net
Sep 6 10:29:19 herrbach ifplugd(eth0)[248]: client: DHCPREQUEST on eth0 to 255.255.255.255 port 67
Sep 6 10:29:19 herrbach dhclient: DHCPACK from 192.168.100.1
Sep 6 10:29:19 herrbach ifplugd(eth0)[248]: client: DHCPACK from 192.168.100.1
Sep 6 10:29:19 herrbach dhclient: bound to 192.168.100.8 -- renewal in 900 seconds.
Sep 6 10:29:19 herrbach ifplugd(eth0)[248]: client: bound to 192.168.100.8 -- renewal in 900 seconds.
Sep 6 10:29:19 herrbach ifplugd(eth0)[248]: Program executed successfully.
Sep 6 10:29:20 herrbach /usr/sbin/cron[285]: (CRON) INFO (pidfile fd = 3)
Sep 6 10:29:20 herrbach /usr/sbin/cron[286]: (CRON) STARTUP (fork ok)
Sep 6 10:29:20 herrbach /usr/sbin/cron[286]: (CRON) INFO (Running @reboot jobs)
Sep 6 10:29:23 herrbach kernel: Losing too many ticks!
Sep 6 10:29:23 herrbach kernel: TSC cannot be used as a timesource. (Are you running with SpeedStep?)
Sep 6 10:29:23 herrbach kernel: Falling back to a sane timesource.
Sep 6 10:30:42 herrbach kernel: Stopping tasks: ====================|
Sep 6 10:30:43 herrbach kernel: Freeing memory: ....|
Sep 6 10:30:43 herrbach kernel: hdc: start_power_step(step: 0)
Sep 6 10:30:43 herrbach kernel: hdc: completing PM request, suspend
Sep 6 10:30:43 herrbach kernel: hda: start_power_step(step: 0)
Sep 6 10:30:43 herrbach kernel: hda: start_power_step(step: 1)
Sep 6 10:30:43 herrbach kernel: hda: complete_power_step(step: 1, stat: 50, err: 0)
Sep 6 10:30:43 herrbach kernel: hda: completing PM request, suspend
Sep 6 10:30:43 herrbach kernel: eth0: remaining active for wake-on-lan
Sep 6 10:30:43 herrbach kernel: PM: Attempting to suspend to disk.
Sep 6 10:30:43 herrbach kernel: PM: snapshotting memory.
Sep 6 10:30:43 herrbach kernel: resume= option should be used to set suspend device/critical section: Counting pages to copy[nosave c0434000] (pages needed: 3692+512=4204 free: 45315)
Sep 6 10:30:43 herrbach kernel: Alloc pagedir
Sep 6 10:30:43 herrbach kernel: [nosave c0434000]<7>PM: Image restored successfully.
Sep 6 10:30:43 herrbach kernel: Freeing prev allocated pagedir
Sep 6 10:30:43 herrbach kernel: PCI: Enabling device 0000:00:06.0 (0005 -> 0007)
Sep 6 10:30:43 herrbach kernel: eth0: Setting full-duplex based on negotiated link capability.
Sep 6 10:30:43 herrbach kernel: hda: Wakeup request inited, waiting for !BSY...
Sep 6 10:30:43 herrbach kernel: hda: start_power_step(step: 1000)
Sep 6 10:30:43 herrbach kernel: blk: queue c12d6c00, I/O limit 4095Mb (mask 0xffffffff)
Sep 6 10:30:43 herrbach kernel: hda: completing PM request, resume
Sep 6 10:30:43 herrbach kernel: hdc: Wakeup request inited, waiting for !BSY...
Sep 6 10:30:43 herrbach kernel: hdc: start_power_step(step: 1000)
Sep 6 10:30:43 herrbach kernel: hdc: completing PM request, resume
Sep 6 10:30:43 herrbach kernel: Restarting tasks... done
Sep 6 10:30:51 herrbach kernel: vs-4080: reiserfs_free_block: free_block (hda2:95121)[dev:blocknr]: bit already cleared
Sep 6 10:30:51 herrbach kernel: vs-4080: reiserfs_free_block: free_block (hda2:95122)[dev:blocknr]: bit already cleared
Sep 6 10:30:58 herrbach kernel: vs-13060: reiserfs_update_sd: stat data of object [689 645 0x0 SD] (nlink == 1) not found (pos 25)
Sep 6 10:30:58 herrbach kernel: vs-13060: reiserfs_update_sd: stat data of object [689 652 0x0 SD] (nlink == 1) not found (pos 25)
Sep 6 10:31:17 herrbach last message repeated 9 times
Sep 6 10:31:21 herrbach shutdown[337]: shutting down for sy


Attachments:
syslog-fs_corruption (24.47 kB)

2003-09-06 21:22:11

by Pavel Machek

[permalink] [raw]
Subject: Re: Fs corruption with swsusp in test4-mm6 ?

Hi!


> I've tested the latest -mm6 kernel on a Compaq Presario 2157EA laptop
> (Celeron Mobile 2GHz)
> Everything worked fine until I tested suspend to disk. After resuming,
> I've got random messages about reiserfs problem on the console :
>
> vs-4080: reiserfs_free_block: free_block (hda2:95121)[dev:blocknr]: bit
> already cleared
> Sep 6 10:30:51 herrbach kernel: vs-4080: reiserfs_free_block:
> free_block (hda2:95122)[dev:blocknr]: bit already cleared
> Sep 6 10:30:58 herrbach kernel: vs-13060: reiserfs_update_sd: stat data
> of object [689 645 0x0 SD] (nlink == 1) not found (pos 25)
> Sep 6 10:30:58 herrbach kernel: vs-13060: reiserfs_update_sd: stat data
> of object [689 652 0x0 SD] (nlink == 1) not found (pos 25)
>
> Please find in attachement 1 syslog showing the suspend / resume cycle
> and the fs errors.

Be sure to reboot then run reiserfsck.

OHCI lacks suspend/resume support. Turn it off. ... ... but it should
not do this kind of corruption. Can you reproduce this without OHCI?
Can you try -test3?
Pavel

--
Horseback riding is like software...
...vgf orggre jura vgf serr.

2003-09-07 08:05:07

by Mathieu LESNIAK

[permalink] [raw]
Subject: Re: Fs corruption with swsusp in test4-mm6 ?

Hi,

Pavel Machek wrote:
> Hi!
>
>
>
>>I've tested the latest -mm6 kernel on a Compaq Presario 2157EA laptop
>>(Celeron Mobile 2GHz)
>>Everything worked fine until I tested suspend to disk. After resuming,
>>I've got random messages about reiserfs problem on the console :
>>
>>vs-4080: reiserfs_free_block: free_block (hda2:95121)[dev:blocknr]: bit
>>already cleared
>>Sep 6 10:30:51 herrbach kernel: vs-4080: reiserfs_free_block:
>>free_block (hda2:95122)[dev:blocknr]: bit already cleared
>>Sep 6 10:30:58 herrbach kernel: vs-13060: reiserfs_update_sd: stat data
>>of object [689 645 0x0 SD] (nlink == 1) not found (pos 25)
>>Sep 6 10:30:58 herrbach kernel: vs-13060: reiserfs_update_sd: stat data
>>of object [689 652 0x0 SD] (nlink == 1) not found (pos 25)
>>
>>Please find in attachement 1 syslog showing the suspend / resume cycle
>>and the fs errors.
>
>
> Be sure to reboot then run reiserfsck.
>
> OHCI lacks suspend/resume support. Turn it off. ... ... but it should
> not do this kind of corruption. Can you reproduce this without OHCI?
> Can you try -test3?
> Pavel
>


When I tested -test3 a few week ago, I hadn't got this problem.

Mathieu LESNIAK

2003-09-07 13:33:23

by Pavel Machek

[permalink] [raw]
Subject: Re: Fs corruption with swsusp in test4-mm6 ?

Hi!

> >>I've tested the latest -mm6 kernel on a Compaq Presario 2157EA laptop
> >>(Celeron Mobile 2GHz)
> >>Everything worked fine until I tested suspend to disk. After resuming,
> >>I've got random messages about reiserfs problem on the console :
> >>
> >>vs-4080: reiserfs_free_block: free_block (hda2:95121)[dev:blocknr]: bit
> >>already cleared
> >>Sep 6 10:30:51 herrbach kernel: vs-4080: reiserfs_free_block:
> >>free_block (hda2:95122)[dev:blocknr]: bit already cleared
> >>Sep 6 10:30:58 herrbach kernel: vs-13060: reiserfs_update_sd: stat data
> >>of object [689 645 0x0 SD] (nlink == 1) not found (pos 25)
> >>Sep 6 10:30:58 herrbach kernel: vs-13060: reiserfs_update_sd: stat data
> >>of object [689 652 0x0 SD] (nlink == 1) not found (pos 25)
> >>
> >>Please find in attachement 1 syslog showing the suspend / resume cycle
> >>and the fs errors.
> >
> >
> >Be sure to reboot then run reiserfsck.
> >
> >OHCI lacks suspend/resume support. Turn it off. ... ... but it should
> >not do this kind of corruption. Can you reproduce this without OHCI?
> >Can you try -test3?
>
> When I tested -test3 a few week ago, I hadn't got this problem.

Okay, try this patch, then invoke swsusp with this:

root@bug:~# cat swsusp.c
void
main(void)
{
reboot(0xD000FCE2, 0);
}
root@bug:~#

If it helps, it is patrick's swsusp changes, else it is patrick's
driver model changes or some driver bug.
Pavel

--- clean/kernel/power/main.c 2003-08-27 12:00:53.000000000 +0200
+++ linux/kernel/power/main.c 2003-09-04 13:48:08.000000000 +0200
@@ -172,31 +172,10 @@

static int pm_suspend_disk(void)
{
- int error;
-
pr_debug("PM: Attempting to suspend to disk.\n");
if (pm_disk_mode == PM_DISK_FIRMWARE)
return pm_ops->enter(PM_SUSPEND_DISK);
-
- if (!have_swsusp)
- return -EPERM;
-
- pr_debug("PM: snapshotting memory.\n");
- in_suspend = 1;
- if ((error = swsusp_save()))
- goto Done;
-
- if (in_suspend) {
- pr_debug("PM: writing image.\n");
- error = swsusp_write();
- if (!error)
- error = power_down(pm_disk_mode);
- pr_debug("PM: Power down failed.\n");
- } else
- pr_debug("PM: Image restored successfully.\n");
- swsusp_free();
- Done:
- return error;
+ return 0;
}


@@ -329,59 +308,17 @@

int pm_suspend(u32 state)
{
+ if ((state == PM_SUSPEND_DISK) && (pm_disk_mode != PM_DISK_FIRMWARE)) {
+ software_suspend();
+ return 0;
+ }
if (state > PM_SUSPEND_ON && state < PM_SUSPEND_MAX)
return enter_state(state);
return -EINVAL;
}

-
-/**
- * pm_resume - Resume from a saved image.
- *
- * Called as a late_initcall (so all devices are discovered and
- * initialized), we call swsusp to see if we have a saved image or not.
- * If so, we quiesce devices, the restore the saved image. We will
- * return above (in pm_suspend_disk() ) if everything goes well.
- * Otherwise, we fail gracefully and return to the normally
- * scheduled program.
- *
- */
-
-static int pm_resume(void)
-{
- int error;
-
- if (!have_swsusp)
- return 0;
-
- pr_debug("PM: Reading swsusp image.\n");
-
- if ((error = swsusp_read()))
- goto Done;
-
- pr_debug("PM: Preparing system for restore.\n");
-
- if ((error = suspend_prepare(PM_SUSPEND_DISK)))
- goto Free;
-
- pr_debug("PM: Restoring saved image.\n");
- swsusp_restore();
-
- pr_debug("PM: Restore failed, recovering.n");
- suspend_finish(PM_SUSPEND_DISK);
- Free:
- swsusp_free();
- Done:
- pr_debug("PM: Resume from disk failed.\n");
- return 0;
-}
-
-late_initcall(pm_resume);
-
-
decl_subsys(power,NULL,NULL);

-
#define power_attr(_name) \
static struct subsys_attribute _name##_attr = { \
.attr = { \
--- clean/kernel/power/swsusp.c 2003-08-27 12:00:53.000000000 +0200
+++ linux/kernel/power/swsusp.c 2003-09-05 11:41:20.000000000 +0200
@@ -5,7 +5,8 @@
* machine suspend feature using pretty near only high-level routines
*
* Copyright (C) 1998-2001 Gabor Kuti <[email protected]>
- * Copyright (C) 1998,2001,2002 Pavel Machek <[email protected]>
+ * Copyright (C) 1998,2001-2003 Pavel Machek <[email protected]>
+ * Copyright (C) 2003 Patrick Mochel <[email protected]>
*
* I'd like to thank the following people for their work:
*
@@ -65,7 +66,9 @@

#include "power.h"

-unsigned char software_suspend_enabled = 1;
+extern long sys_sync(void);
+
+unsigned char software_suspend_enabled = 0;

#define __ADDRESS(x) ((unsigned long) phys_to_virt(x))
#define ADDRESS(x) __ADDRESS((x) << PAGE_SHIFT)
@@ -83,11 +86,14 @@
static int pagedir_order_check;
static int nr_copy_pages_check;

-static char resume_file[256]; /* For resume= kernel option */
+static int resume_status;
+static char resume_file[256] = ""; /* For resume= kernel option */
static dev_t resume_device;
/* Local variables that should not be affected by save */
unsigned int nr_copy_pages __nosavedata = 0;

+static int pm_suspend_state;
+
/* Suspend pagedir is allocated before final copy, therefore it
must be freed after resume

@@ -347,10 +353,15 @@
int pfn;
struct page *page;

+#ifdef CONFIG_DISCONTIGMEM
+ panic("Discontingmem not supported");
+#else
BUG_ON (max_pfn != num_physpages);
-
+#endif
for (pfn = 0; pfn < max_pfn; pfn++) {
page = pfn_to_page(pfn);
+ if (PageHighMem(page))
+ panic("Swsusp not supported on highmem boxes. Send 1GB of RAM to <[email protected]> and try again ;-).");

if (!PageReserved(page)) {
if (PageNosave(page))
@@ -435,6 +446,74 @@
return pagedir;
}

+static int prepare_suspend_processes(void)
+{
+ sys_sync(); /* Syncing needs pdflushd, so do it before stopping processes */
+ if (freeze_processes()) {
+ printk( KERN_ERR "Suspend failed: Not all processes stopped!\n" );
+ thaw_processes();
+ return 1;
+ }
+ return 0;
+}
+
+/*
+ * Try to free as much memory as possible, but do not OOM-kill anyone
+ *
+ * Notice: all userland should be stopped at this point, or livelock is possible.
+ */
+static void free_some_memory(void)
+{
+ printk("Freeing memory: ");
+ while (shrink_all_memory(10000))
+ printk(".");
+ printk("|\n");
+}
+
+/* Make disk drivers accept operations, again */
+static void drivers_unsuspend(void)
+{
+ device_resume();
+}
+
+/* Called from process context */
+static int drivers_suspend(void)
+{
+ device_suspend(4);
+ if(!pm_suspend_state) {
+ if(pm_send_all(PM_SUSPEND,(void *)3)) {
+ printk(KERN_WARNING "Problem while sending suspend event\n");
+ return(1);
+ }
+ pm_suspend_state=1;
+ } else
+ printk(KERN_WARNING "PM suspend state already raised\n");
+ device_power_down(4);
+ return(0);
+}
+
+#define RESUME_PHASE1 1 /* Called from interrupts disabled */
+#define RESUME_PHASE2 2 /* Called with interrupts enabled */
+#define RESUME_ALL_PHASES (RESUME_PHASE1 | RESUME_PHASE2)
+static void drivers_resume(int flags)
+{
+ if (flags & RESUME_PHASE1) {
+ dpm_power_up();
+ }
+ if (flags & RESUME_PHASE2) {
+ device_resume();
+ if(pm_suspend_state) {
+ if(pm_send_all(PM_RESUME,(void *)0))
+ printk(KERN_WARNING "Problem while sending resume event\n");
+ pm_suspend_state=0;
+ } else
+ printk(KERN_WARNING "PM suspend state wasn't raised\n");
+
+#ifdef SUSPEND_CONSOLE
+ update_screen(fg_console); /* Hmm, is this the problem? */
+#endif
+ }
+}

static int suspend_prepare_image(void)
{
@@ -488,14 +567,12 @@
return 0;
}

-static int suspend_save_image(void)
+static void suspend_save_image(void)
{
- int error;
-
- device_resume();
+ drivers_unsuspend();

lock_swapdevices();
- error = write_suspend_image();
+ write_suspend_image();
lock_swapdevices(); /* This will unlock ignored swap devices since writing is finished */

/* It is important _NOT_ to umount filesystems at this point. We want
@@ -503,7 +580,29 @@
* filesystem clean: it is not. (And it does not matter, if we resume
* correctly, we'll mark system clean, anyway.)
*/
- return error;
+}
+
+static void suspend_power_down(void)
+{
+ extern int C_A_D;
+ C_A_D = 0;
+ printk(KERN_EMERG "%s%s Trying to power down.\n", name_suspend, TEST_SWSUSP ? "Disable TEST_SWSUSP. NOT ": "");
+#ifdef CONFIG_VT
+ PRINTK(KERN_EMERG "shift_state: %04x\n", shift_state);
+ mdelay(1000);
+ if (TEST_SWSUSP ^ (!!(shift_state & (1 << KG_CTRL))))
+ machine_restart(NULL);
+ else
+#endif
+ {
+ device_shutdown();
+ machine_power_off();
+ }
+
+ printk(KERN_EMERG "%sProbably not capable for powerdown. System halted.\n", name_suspend);
+ machine_halt();
+ while (1);
+ /* NOTREACHED */
}

/*
@@ -515,21 +614,32 @@
barrier();
mb();
spin_lock_irq(&suspend_pagedir_lock); /* Done to disable interrupts */
+
PRINTK( "Waiting for DMAs to settle down...\n");
- /* We do not want some readahead with DMA to corrupt our memory, right?
- Do it with disabled interrupts for best effect. That way, if some
- driver scheduled DMA, we have good chance for DMA to finish ;-). */
- mdelay(1000);
+ mdelay(1000); /* We do not want some readahead with DMA to corrupt our memory, right?
+ Do it with disabled interrupts for best effect. That way, if some
+ driver scheduled DMA, we have good chance for DMA to finish ;-). */
}

void do_magic_resume_2(void)
{
BUG_ON (nr_copy_pages_check != nr_copy_pages);
BUG_ON (pagedir_order_check != pagedir_order);
-
- /* Even mappings of "global" things (vmalloc) need to be fixed */
- __flush_tlb_global();
+
+ __flush_tlb_global(); /* Even mappings of "global" things (vmalloc) need to be fixed */
+
+ PRINTK( "Freeing prev allocated pagedir\n" );
+ free_suspend_pagedir((unsigned long) pagedir_save);
spin_unlock_irq(&suspend_pagedir_lock);
+ drivers_resume(RESUME_ALL_PHASES);
+
+ PRINTK( "Fixing swap signatures... " );
+ mark_swapfiles(((swp_entry_t) {0}), MARK_SWAP_RESUME);
+ PRINTK( "ok\n" );
+
+#ifdef SUSPEND_CONSOLE
+ update_screen(fg_console); /* Hmm, is this the problem? */
+#endif
}

/* do_magic() is implemented in arch/?/kernel/suspend_asm.S, and basically does:
@@ -554,28 +664,92 @@
{
mb();
barrier();
+ BUG_ON(in_atomic());
spin_lock_irq(&suspend_pagedir_lock);
}

-int do_magic_suspend_2(void)
+void do_magic_suspend_2(void)
{
int is_problem;
read_swapfiles();
is_problem = suspend_prepare_image();
spin_unlock_irq(&suspend_pagedir_lock);
- if (!is_problem)
- return suspend_save_image();
+ if (!is_problem) {
+ kernel_fpu_end(); /* save_processor_state() does kernel_fpu_begin, and we need to revert it in order to pass in_atomic() checks */
+ BUG_ON(in_atomic());
+ suspend_save_image();
+ suspend_power_down(); /* FIXME: if suspend_power_down is commented out, console is lost after few suspends ?! */
+ }
+
printk(KERN_EMERG "%sSuspend failed, trying to recover...\n", name_suspend);
+ MDELAY(1000); /* So user can wait and report us messages if armageddon comes :-) */
+
barrier();
mb();
+ spin_lock_irq(&suspend_pagedir_lock); /* Done to disable interrupts */
mdelay(1000);
- return -EFAULT;
+
+ free_pages((unsigned long) pagedir_nosave, pagedir_order);
+ spin_unlock_irq(&suspend_pagedir_lock);
+ mark_swapfiles(((swp_entry_t) {0}), MARK_SWAP_RESUME);
+}
+
+static void do_software_suspend(void)
+{
+ printk("Doing software_suspend()\n");
+ arch_prepare_suspend();
+ if (pm_prepare_console())
+ printk( "%sCan't allocate a console... proceeding\n", name_suspend);
+ if (!prepare_suspend_processes()) {
+
+ /* At this point, all user processes and "dangerous"
+ kernel threads are stopped. Free some memory, as we
+ need half of memory free. */
+
+ free_some_memory();
+
+ /* No need to invalidate any vfsmnt list --
+ * they will be valid after resume, anyway.
+ */
+ blk_run_queues();
+
+ /* Save state of all device drivers, and stop them. */
+ if(drivers_suspend()==0)
+ /* If stopping device drivers worked, we proceed basically into
+ * suspend_save_image.
+ *
+ * do_magic(0) returns after system is resumed.
+ *
+ * do_magic() copies all "used" memory to "free" memory, then
+ * unsuspends all device drivers, and writes memory to disk
+ * using normal kernel mechanism.
+ */
+ do_magic(0);
+ thaw_processes();
+ }
+ software_suspend_enabled = 1;
+ MDELAY(1000);
+ pm_restore_console();
+}
+
+/*
+ * This is main interface to the outside world. It needs to be
+ * called from process context.
+ */
+void software_suspend(void)
+{
+ if(!software_suspend_enabled)
+ return;
+
+ software_suspend_enabled = 0;
+ might_sleep();
+ do_software_suspend();
}

/* More restore stuff */

/* FIXME: Why not memcpy(to, from, 1<<pagedir_order*PAGE_SIZE)? */
-static void __init copy_pagedir(suspend_pagedir_t *to, suspend_pagedir_t *from)
+static void copy_pagedir(suspend_pagedir_t *to, suspend_pagedir_t *from)
{
int i;
char *topointer=(char *)to, *frompointer=(char *)from;
@@ -592,8 +766,8 @@
/*
* Returns true if given address/order collides with any orig_address
*/
-static int __init does_collide_order(suspend_pagedir_t *pagedir,
- unsigned long addr, int order)
+static int does_collide_order(suspend_pagedir_t *pagedir, unsigned long addr,
+ int order)
{
int i;
unsigned long addre = addr + (PAGE_SIZE<<order);
@@ -610,7 +784,7 @@
* We check here that pagedir & pages it points to won't collide with pages
* where we're going to restore from the loaded pages later
*/
-static int __init check_pagedir(void)
+static int check_pagedir(void)
{
int i;

@@ -628,7 +802,7 @@
return 0;
}

-static int __init relocate_pagedir(void)
+static int relocate_pagedir(void)
{
/*
* We have to avoid recursion (not to overflow kernel stack),
@@ -678,13 +852,13 @@
* I really don't think that it's foolproof but more than nothing..
*/

-static int __init sanity_check_failed(char *reason)
+static int sanity_check_failed(char *reason)
{
printk(KERN_ERR "%s%s\n",name_resume,reason);
return -EPERM;
}

-static int __init sanity_check(struct suspend_header *sh)
+static int sanity_check(struct suspend_header *sh)
{
if(sh->version_code != LINUX_VERSION_CODE)
return sanity_check_failed("Incorrect kernel version");
@@ -701,8 +875,7 @@
return 0;
}

-static int __init bdev_read_page(struct block_device *bdev,
- long pos, void *buf)
+static int bdev_read_page(struct block_device *bdev, long pos, void *buf)
{
struct buffer_head *bh;
BUG_ON (pos%PAGE_SIZE);
@@ -716,10 +889,31 @@
return 0;
}

+static int bdev_write_page(struct block_device *bdev, long pos, void *buf)
+{
+#if 0
+ struct buffer_head *bh;
+ BUG_ON (pos%PAGE_SIZE);
+ bh = __bread(bdev, pos/PAGE_SIZE, PAGE_SIZE);
+ if (!bh || (!bh->b_data)) {
+ return -1;
+ }
+ memcpy(bh->b_data, buf, PAGE_SIZE); /* FIXME: may need kmap() */
+ BUG_ON(!buffer_uptodate(bh));
+ generic_make_request(WRITE, bh);
+ if (!buffer_uptodate(bh))
+ printk(KERN_CRIT "%sWarning %s: Fixing swap signatures unsuccessful...\n", name_resume, resume_file);
+ wait_on_buffer(bh);
+ brelse(bh);
+ return 0;
+#endif
+ printk(KERN_CRIT "%sWarning %s: Fixing swap signatures unimplemented...\n", name_resume, resume_file);
+ return 0;
+}
+
extern dev_t __init name_to_dev_t(const char *line);

-static int __init read_suspend_image(struct block_device *bdev,
- union diskpage *cur)
+static int __read_suspend_image(struct block_device *bdev, union diskpage *cur, int noresume)
{
swp_entry_t next;
int i, nr_pgdir_pages;
@@ -744,9 +938,18 @@
else if (!memcmp("S2",cur->swh.magic.magic,2))
memcpy(cur->swh.magic.magic,"SWAPSPACE2",10);
else {
- printk("swsusp: %s: Unable to find suspended-data signature (%.10s - misspelled?\n",
+ if (noresume)
+ return -EINVAL;
+ panic("%sUnable to find suspended-data signature (%.10s - misspelled?\n",
name_resume, cur->swh.magic.magic);
- return -EFAULT;
+ }
+ if (noresume) {
+ /* We don't do a sanity check here: we want to restore the swap
+ whatever version of kernel made the suspend image;
+ We need to write swap, but swap is *not* enabled so
+ we must write the device directly */
+ printk("%s: Fixing swap signatures %s...\n", name_resume, resume_file);
+ bdev_write_page(bdev, 0, cur);
}

printk( "%sSignature found, resuming\n", name_resume );
@@ -796,115 +999,125 @@
return 0;
}

-/**
- * swsusp_save - Snapshot memory
- */
-
-int swsusp_save(void)
-{
-#if defined (CONFIG_HIGHMEM) || defined (COFNIG_DISCONTIGMEM)
- printk("swsusp is not supported with high- or discontig-mem.\n");
- return -EPERM;
-#endif
- return 0;
-}
-
-
-/**
- * swsusp_write - Write saved memory image to swap.
- *
- * do_magic(0) returns after system is resumed.
- *
- * do_magic() copies all "used" memory to "free" memory, then
- * unsuspends all device drivers, and writes memory to disk
- * using normal kernel mechanism.
- */
-
-int swsusp_write(void)
-{
- arch_prepare_suspend();
- return do_magic(0);
-}
-
-
-/**
- * swsusp_read - Read saved image from swap.
- */
-
-int __init swsusp_read(void)
+static int read_suspend_image(const char * specialfile, int noresume)
{
union diskpage *cur;
+ unsigned long scratch_page = 0;
int error;
char b[BDEVNAME_SIZE];

- if (!strlen(resume_file))
- return -ENOENT;
-
- resume_device = name_to_dev_t(resume_file);
- printk("swsusp: Resume From Partition: %s, Device: %s\n",
- resume_file, __bdevname(resume_device, b));
-
- cur = (union diskpage *)get_zeroed_page(GFP_ATOMIC);
+ resume_device = name_to_dev_t(specialfile);
+ scratch_page = get_zeroed_page(GFP_ATOMIC);
+ cur = (void *) scratch_page;
if (cur) {
struct block_device *bdev;
+ printk("Resuming from device %s\n",
+ __bdevname(resume_device, b));
bdev = open_by_devnum(resume_device, FMODE_READ, BDEV_RAW);
- if (!IS_ERR(bdev)) {
+ if (IS_ERR(bdev)) {
+ error = PTR_ERR(bdev);
+ } else {
set_blocksize(bdev, PAGE_SIZE);
- error = read_suspend_image(bdev, cur);
+ error = __read_suspend_image(bdev, cur, noresume);
blkdev_put(bdev, BDEV_RAW);
- } else
- error = PTR_ERR(bdev);
- free_page((unsigned long)cur);
- } else
- error = -ENOMEM;
+ }
+ } else error = -ENOMEM;

- if (!error)
- PRINTK("Reading resume file was successful\n");
- else
- printk( "%sError %d resuming\n", name_resume, error );
+ if (scratch_page)
+ free_page(scratch_page);
+ switch (error) {
+ case 0:
+ PRINTK("Reading resume file was successful\n");
+ break;
+ case -EINVAL:
+ break;
+ case -EIO:
+ printk( "%sI/O error\n", name_resume);
+ break;
+ case -ENOENT:
+ printk( "%s%s: No such file or directory\n", name_resume, specialfile);
+ break;
+ case -ENOMEM:
+ printk( "%sNot enough memory\n", name_resume);
+ break;
+ default:
+ printk( "%sError %d resuming\n", name_resume, error );
+ }
MDELAY(1000);
return error;
}

-
/**
- * swsusp_restore - Replace running kernel with saved image.
+ * software_resume - Resume from a saved image.
+ *
+ * Called as a late_initcall (so all devices are discovered and
+ * initialized), we call swsusp to see if we have a saved image or not.
+ * If so, we quiesce devices, the restore the saved image. We will
+ * return above (in pm_suspend_disk() ) if everything goes well.
+ * Otherwise, we fail gracefully and return to the normally
+ * scheduled program.
+ *
*/
-
-int __init swsusp_restore(void)
+static void software_resume(void)
{
- return do_magic(1);
-}
+ if (num_online_cpus() > 1) {
+ printk(KERN_WARNING "Software Suspend has malfunctioning SMP support. Disabled :(\n");
+ return;
+ }
+ /* We enable the possibility of machine suspend */
+ software_suspend_enabled = 1;
+ if (!resume_status)
+ return;

+ printk( "%s", name_resume );
+ if (resume_status == NORESUME) {
+ if(resume_file[0])
+ read_suspend_image(resume_file, 1);
+ printk( "disabled\n" );
+ return;
+ }
+ MDELAY(1000);

-/**
- * swsusp_free - Free memory allocated to hold snapshot.
- */
+ if (pm_prepare_console())
+ printk("swsusp: Can't allocate a console... proceeding\n");

-int swsusp_free(void)
-{
- PRINTK( "Freeing prev allocated pagedir\n" );
- free_suspend_pagedir((unsigned long) pagedir_save);
+ if (!resume_file[0] && resume_status == RESUME_SPECIFIED) {
+ printk( "suspension device unspecified\n" );
+ return;
+ }

- PRINTK( "Fixing swap signatures... " );
- mark_swapfiles(((swp_entry_t) {0}), MARK_SWAP_RESUME);
- PRINTK( "ok\n" );
- return 0;
+ printk( "resuming from %s\n", resume_file);
+ if (read_suspend_image(resume_file, 0))
+ goto read_failure;
+ do_magic(1);
+ panic("This never returns");
+
+read_failure:
+ pm_restore_console();
+ return;
}

+late_initcall(software_resume);
+
static int __init resume_setup(char *str)
{
- if (strlen(str))
- strncpy(resume_file, str, 255);
+ if (resume_status == NORESUME)
+ return 1;
+
+ strncpy( resume_file, str, 255 );
+ resume_status = RESUME_SPECIFIED;
+
return 1;
}

static int __init noresume_setup(char *str)
{
- resume_file[0] = '\0';
+ resume_status = NORESUME;
return 1;
}

__setup("noresume", noresume_setup);
__setup("resume=", resume_setup);

+EXPORT_SYMBOL(software_suspend);
+EXPORT_SYMBOL(software_suspend_enabled);
--- clean/include/linux/suspend.h 2003-08-27 12:00:50.000000000 +0200
+++ linux/include/linux/suspend.h 2003-09-03 21:00:56.000000000 +0200
@@ -8,7 +8,11 @@
#include <linux/notifier.h>
#include <linux/config.h>
#include <linux/init.h>
-#include <linux/pm.h>
+
+extern unsigned char software_suspend_enabled;
+
+#define NORESUME 1
+#define RESUME_SPECIFIED 2

#ifdef CONFIG_SOFTWARE_SUSPEND
/* page backup entry */
@@ -45,30 +49,61 @@
/* mm/page_alloc.c */
extern void drain_local_pages(void);

+/* kernel/suspend.c */
+extern void software_suspend(void);
+extern void software_resume(void);
+
+extern int register_suspend_notifier(struct notifier_block *);
+extern int unregister_suspend_notifier(struct notifier_block *);
+
extern unsigned int nr_copy_pages __nosavedata;
extern suspend_pagedir_t *pagedir_nosave __nosavedata;

+/* Communication between kernel/suspend.c and arch/i386/suspend.c */
+
+extern void do_magic_resume_1(void);
+extern void do_magic_resume_2(void);
+extern void do_magic_suspend_1(void);
+extern void do_magic_suspend_2(void);
+
/* Communication between acpi and arch/i386/suspend.c */

extern void do_suspend_lowlevel(int resume);
extern void do_suspend_lowlevel_s4bios(int resume);

#else /* CONFIG_SOFTWARE_SUSPEND */
-static inline int software_suspend(void)
+static inline void software_suspend(void)
{
+ printk("Warning: fake suspend called\n");
return -EPERM;
}
+#define software_resume() do { } while(0)
+#define register_suspend_notifier(a) do { } while(0)
+#define unregister_suspend_notifier(a) do { } while(0)
#endif /* CONFIG_SOFTWARE_SUSPEND */


#ifdef CONFIG_PM
extern void refrigerator(unsigned long);
+extern int freeze_processes(void);
+extern void thaw_processes(void);
+
+extern int pm_prepare_console(void);
+extern void pm_restore_console(void);

#else
static inline void refrigerator(unsigned long flag)
{

}
+static inline int freeze_processes(void)
+{
+ return 0;
+}
+static inline void thaw_processes(void)
+{
+
+}
#endif /* CONFIG_PM */

#endif /* _LINUX_SWSUSP_H */
--- clean/kernel/sys.c 2003-08-27 12:00:53.000000000 +0200
+++ linux/kernel/sys.c 2003-09-05 11:43:30.000000000 +0200
@@ -456,8 +456,11 @@

#ifdef CONFIG_SOFTWARE_SUSPEND
case LINUX_REBOOT_CMD_SW_SUSPEND:
- if (!pm_suspend(PM_SUSPEND_DISK))
- break;
+ if (!software_suspend_enabled) {
+ unlock_kernel();
+ return -EAGAIN;
+ }
+ software_suspend();
do_exit(0);
break;
#endif


--
When do you have a heart between your knees?
[Johanka's followup: and *two* hearts?]

2003-09-08 19:44:41

by Patrick Mochel

[permalink] [raw]
Subject: Re: Fs corruption with swsusp in test4-mm6 ?


> I've tested the latest -mm6 kernel on a Compaq Presario 2157EA laptop
> (Celeron Mobile 2GHz)
> Everything worked fine until I tested suspend to disk. After resuming,
> I've got random messages about reiserfs problem on the console :

Definitely not good.

> vs-4080: reiserfs_free_block: free_block (hda2:95121)[dev:blocknr]: bit
> already cleared
> Sep 6 10:30:51 herrbach kernel: vs-4080: reiserfs_free_block:
> free_block (hda2:95122)[dev:blocknr]: bit already cleared
> Sep 6 10:30:58 herrbach kernel: vs-13060: reiserfs_update_sd: stat data
> of object [689 645 0x0 SD] (nlink == 1) not found (pos 25)
> Sep 6 10:30:58 herrbach kernel: vs-13060: reiserfs_update_sd: stat data
> of object [689 652 0x0 SD] (nlink == 1) not found (pos 25)

Could someone that is familar with reiserfs comment as to what exactly is
happening?

Mathieu, did you notice this with any of the earlier -test4-mm6 kernels,
or just -mm6?

Thanks,


Pat

2003-09-08 20:10:07

by Mathieu LESNIAK

[permalink] [raw]
Subject: Re: Fs corruption with swsusp in test4-mm6 ?

Patrick Mochel wrote:
>>vs-4080: reiserfs_free_block: free_block (hda2:95121)[dev:blocknr]: bit
>>already cleared
>>Sep 6 10:30:51 herrbach kernel: vs-4080: reiserfs_free_block:
>>free_block (hda2:95122)[dev:blocknr]: bit already cleared
>>Sep 6 10:30:58 herrbach kernel: vs-13060: reiserfs_update_sd: stat data
>>of object [689 645 0x0 SD] (nlink == 1) not found (pos 25)
>>Sep 6 10:30:58 herrbach kernel: vs-13060: reiserfs_update_sd: stat data
>>of object [689 652 0x0 SD] (nlink == 1) not found (pos 25)
>
>
> Could someone that is familar with reiserfs comment as to what exactly is
> happening?
>
> Mathieu, did you notice this with any of the earlier -test4-mm6 kernels,
> or just -mm6?
>
> Thanks,
>
>
> Pat
>

Hi,

I haven't tested previous -test4-mm patches before this one, so I
couldn't tell you :(
In addition, as I said to Pavel in private mail, this laptop is not
mine, and I won't be able to execute more tests on it.

Mathieu LESNIAK

2003-09-08 20:14:20

by Patrick Mochel

[permalink] [raw]
Subject: Re: Fs corruption with swsusp in test4-mm6 ?


> I haven't tested previous -test4-mm patches before this one, so I
> couldn't tell you :(
> In addition, as I said to Pavel in private mail, this laptop is not
> mine, and I won't be able to execute more tests on it.

Ah. I'm sorry to hear that. Thanks for testing anyway.

If someone has tested suspend-to-disk while using reiserfs, I would be
very interested to hear if they have or have not had success.. (For the
record, I use ext3 and have not seen any comparable problems).

Thanks,


Pat