Skip to contentSkip to conversation

Make pmdisk suspend more reliable

PATCH In review Tony Lindgren 2 participants 3 messages Oct 12, 2003 – Oct 14, 2003

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 Make pmdisk suspend more reliable

Hi Patrick & all,

Here's a little patch to make pmdisk suspend to disk work on my old laptop. Basically at least the PMDISK_SIG never got to the disk, and finding the suspend image would fail without this patch. The patch is against linux-2.6.0-test7.

Pls cc me on any replies, I'm not on the list right now.

Regards,

Tony

kernel/power/pmdisk.c renamed from kernel/power/pmdisk.c-orig +4 -0
@@ -35,6 +35,7 @@
 
 
 extern int pmdisk_arch_suspend(int resume);
+extern int wakeup_bdflush(long nr_pages);
 
 #define __ADDRESS(x)  ((unsigned long) phys_to_virt(x))
 #define ADDRESS(x) __ADDRESS((x) << PAGE_SHIFT)
@@ -372,6 +373,9 @@
 		goto FreePagedir;
 
 	error = mark_swapfiles(prev);
+
+	/* Make sure the data gets to disk */
+	wakeup_bdflush(0);
  Done:
 	return error;
  FreePagedir:
#1 lore raw

kernel/power/pmdisk.c line 38

Quoted 7 lines · Tony Lindgren
kernel/power/pmdisk.c renamed from kernel/power/pmdisk.c-orig +1 -0
@@ -35,6 +35,7 @@
 
 
 extern int pmdisk_arch_suspend(int resume);
+extern int wakeup_bdflush(long nr_pages);

Prototypes in .c files is never a good idea. wakeup_bdflush is prototyped in include/linux/writeback.h

pmdisk_arch_suspend is expected to be implemented in assembler, which explain why it is prototypes locally.

Sam

#2 lore raw

Hi,

Quoted 7 lines · Sam Ravnborg
Quoted 2 lines · Tony Lindgren

extern int pmdisk_arch_suspend(int resume);
+extern int wakeup_bdflush(long nr_pages);

Prototypes in .c files is never a good idea. wakeup_bdflush is prototyped in include/linux/writeback.h

I guess you mean to #include <linux/writeback.h> instead of extern, or did I misunderstand what you meant?

There may be more to the suspend image not getting to the disk besides flushing, I'm now wondering if it works with IDE DMA enabled, but not without DMA. I'll try to investigate it a bit further.

Tony