]> git.hungrycats.org Git - linux/commitdiff
[PATCH] swsusp fixes
authorPavel Machek <pavel@ucw.cz>
Fri, 24 May 2002 04:55:13 +0000 (21:55 -0700)
committerLinus Torvalds <torvalds@penguin.transmeta.com>
Fri, 24 May 2002 04:55:13 +0000 (21:55 -0700)
This kills unneccessary include from ide-disk.c, kills #ifdef from
reiserfs/journal.c, makes suspend_device local as it should be,
abstains from suspending devices two times in a row (typo), and makes
sure we do not run_task_queue() while we hold spinlock.

drivers/ide/ide-disk.c
fs/reiserfs/journal.c
kernel/suspend.c
mm/pdflush.c

index 6fdcb7a363653e0def8ceecde6ef7f3228fed2c5..d6cba782dc2c410051cdcaa2957c8f99e8d9f856 100644 (file)
@@ -27,7 +27,6 @@
 #include <linux/slab.h>
 #include <linux/delay.h>
 #include <linux/ide.h>
-#include <linux/suspend.h>
 
 #include <asm/byteorder.h>
 #include <asm/irq.h>
index cf4dd84fd758e1434c1019c6d954ba45a5f29264..b1ef9b65b704c3d00c031f765b51123200caea19 100644 (file)
@@ -1901,12 +1901,9 @@ static int reiserfs_journal_commit_thread(void *nullp) {
       break ;
     }
     wake_up(&reiserfs_commit_thread_done) ;
-#ifdef CONFIG_SOFTWARE_SUSPEND
-    if (current->flags & PF_FREEZE) {
-           refrigerator(PF_IOTHREAD);
-    } else
-#endif
-           interruptible_sleep_on_timeout(&reiserfs_commit_thread_wait, 5 * HZ) ;
+    if (current->flags & PF_FREEZE)
+      refrigerator(PF_IOTHREAD);
+    interruptible_sleep_on_timeout(&reiserfs_commit_thread_wait, 5 * HZ) ;
   }
   unlock_kernel() ;
   wake_up(&reiserfs_commit_thread_done) ;
index d0fde1a86046f7662380f4b055b7f585a8cd1c8b..1164db22cdb14ea19636affad2fb1957cec3ea9f 100644 (file)
@@ -409,15 +409,12 @@ static void lock_swapdevices(void) /* This is called after saving image so modif
        swap_list_lock();
        for(i = 0; i< MAX_SWAPFILES; i++)
                if(swapfile_used[i] == SWAPFILE_IGNORED) {
-//                     PRINTS( "device %s locked\n", swap_info[i].swap_file->d_name.name );
                        swap_info[i].flags ^= 0xFF; /* we make the device unusable. A new call to
                                                       lock_swapdevices can unlock the devices. */
                }
        swap_list_unlock();
 }
 
-kdev_t suspend_device;
-
 static int write_suspend_image(void)
 {
        int i;
@@ -425,6 +422,7 @@ static int write_suspend_image(void)
        int nr_pgdir_pages = SUSPEND_PD_PAGES(nr_copy_pages);
        union diskpage *cur,  *buffer = (union diskpage *)get_free_page(GFP_ATOMIC);
        unsigned long address;
+       kdev_t suspend_device;
 
        PRINTS( "Writing data to swap (%d pages): ", nr_copy_pages );
        for (i=0; i<nr_copy_pages; i++) {
@@ -809,7 +807,6 @@ static int suspend_save_image(void)
         *
         * Following line enforces not writing to disk until we choose.
         */
-       suspend_device = NODEV;                                 /* We do not want any writes, thanx */
        drivers_unsuspend();
        spin_unlock_irq(&suspend_pagedir_lock);
        PRINTS( "critical section/: done (%d pages copied)\n", nr_copy_pages );
@@ -899,13 +896,9 @@ static void do_magic_suspend_1(void)
 static void do_magic_suspend_2(void)
 {
        read_swapfiles();
-       if (!suspend_save_image()) {
-#if 1
-               suspend_power_down ();  /* FIXME: if suspend_power_down is commented out, console is lost after few suspends ?! */
-#endif
-       }
+       if (!suspend_save_image())
+               suspend_power_down();   /* FIXME: if suspend_power_down is commented out, console is lost after few suspends ?! */
 
-       suspend_device = NODEV;
        printk(KERN_WARNING "%sSuspend failed, trying to recover...\n", name_suspend);
        MDELAY(1000); /* So user can wait and report us messages if armageddon comes :-) */
 
@@ -944,9 +937,8 @@ void do_software_suspend(void)
                         * We sync here -- so you have consistent filesystem state when things go wrong.
                         * -- so that noone writes to disk after we do atomic copy of data.
                         */
-                       PRINTS( "Syncing disks before copy\n" );
+                       PRINTS("Syncing disks before copy\n");
                        do_suspend_sync();
-                       drivers_suspend();
                        if(drivers_suspend()==0)
                                do_magic(0);                    /* This function returns after machine woken up from resume */
                        PRINTR("Restarting processes...\n");
index 44d292959a192ba26b47b8be75e315246edad736..320559998a3befe4b2ac17caeb904acd5e8f9a75 100644 (file)
@@ -108,16 +108,16 @@ static int __pdflush(struct pdflush_work *my_work)
        for ( ; ; ) {
                struct pdflush_work *pdf;
 
-#ifdef CONFIG_SOFTWARE_SUSPEND
-               run_task_queue(&tq_bdflush);
-#endif
                list_add(&my_work->list, &pdflush_list);
                my_work->when_i_went_to_sleep = jiffies;
                set_current_state(TASK_INTERRUPTIBLE);
                spin_unlock_irq(&pdflush_lock);
 
+#ifdef CONFIG_SOFTWARE_SUSPEND
+               run_task_queue(&tq_bdflush);
                if (current->flags & PF_FREEZE)
                        refrigerator(PF_IOTHREAD);
+#endif
                schedule();
 
                preempt_enable();