On Monday 14 August 2006 22:03, Laurent Riffard wrote: > Le 14.08.2006 21:16, Rafael J. Wysocki a écrit : > > On Monday 14 August 2006 19:48, Laurent Riffard wrote: > >> Le 14.08.2006 19:30, Rafael J. Wysocki a écrit : > >>> Hi, > >>> > >>> Thanks for the report. > >>> > >>> On Monday 14 August 2006 18:49, Laurent Riffard wrote: > >>>> Hello, > >>>> > >>>> I hit a BUG while I was trying to suspend to a swap device on LVM. > >>>> The call trace looks like this (see attached picture for detailed > >>>> stack trace): > >>>> > >>>> EIP is at _raw_spin_lock > >>>> Call Trace: > >>>> die > >>>> do_page_fault > >>>> error_code > >>>> _spin_lock_irq > >>>> generic_unplug_device > >>>> wait_on_bio_chain > >>>> swap_write_image > >>> This should be swap_write_page(). > >> right. > >>>> swsusp_write > >>>> pm_suspend_disk > >>>> enter_state > >>>> state_store > >>>> susbsys_attr_store > >>>> sysfs_write_file > >>>> vfs_write > >>>> sys_write > >>>> sysenter_past_esp > >>>> > >>>> It was Linux 2.6.18-rc4-mm1 booted with: > >>>> root=/dev/vglinux1/lvroot video=vesafb:mtrr splash=silent resume=/dev/mapper/vglinux1-lvswap init 1 > >>> Does the unpatched 2.6.18-rc4 work in this configuration? > >> Will try. > > > > Well, I'm afraid it won't work. > > guess what? 2.6.18-rc4 worked! Strange ... > > Can you please try the appended patch? > > Ok, I'll try on 2.6.18-rc4-mm1. > > > Rafael > > > > > > --- > > mm/swapfile.c | 3 ++- > > 1 file changed, 2 insertions(+), 1 deletion(-) > > > > Index: linux-2.6.18-rc4-mm1/mm/swapfile.c > > =================================================================== > > --- linux-2.6.18-rc4-mm1.orig/mm/swapfile.c 2006-08-13 14:54:43.000000000 +0200 > > +++ linux-2.6.18-rc4-mm1/mm/swapfile.c 2006-08-14 21:09:09.000000000 +0200 > > @@ -442,11 +442,12 @@ int swap_type_of(dev_t device) > > > > if (!(swap_info[i].flags & SWP_WRITEOK)) > > continue; > > + > > if (!device) { > > spin_unlock(&swap_lock); > > return i; > > } > > - inode = swap_info->swap_file->f_dentry->d_inode; > > + inode = swap_info[i].swap_file->f_dentry->d_inode; > > if (S_ISBLK(inode->i_mode) && > > device == MKDEV(imajor(inode), iminor(inode))) { > > spin_unlock(&swap_lock); > > Does it mean it was mistaken on swap device ? Yes. If your resume device is not the first swap, it won't work without the patch. > I did not pay attention on which swap device was online or not. Please do when you test it. ;-) Greetings, Rafael -- You never change things by fighting the existing reality. R. Buckminster Fuller