[XFS] Resolve an issue with xfsbufd not getting along with swsusp.
authorNathan Scott <nathans@sgi.com>
Thu, 5 May 2005 20:30:13 +0000 (13:30 -0700)
committerChristoph Hellwig <hch@melbourne.sgi.com>
Thu, 5 May 2005 20:30:13 +0000 (13:30 -0700)
SGI Modid: xfs-linux:xfs-kern:22342a

Signed-off-by: Nathan Scott <nathans@sgi.com>
Signed-off-by: Christoph Hellwig <hch@sgi.com>
fs/xfs/linux-2.6/xfs_buf.c

index 23e0eb67fc25e012c291a6efd7fed62ec8b415bb..997963e5362234809dbd14b6a4a52eb1628a75d5 100644 (file)
@@ -1746,13 +1746,15 @@ STATIC DECLARE_COMPLETION(pagebuf_daemon_done);
 STATIC struct task_struct *pagebuf_daemon_task;
 STATIC int pagebuf_daemon_active;
 STATIC int force_flush;
-
+STATIC int force_sleep;
 
 STATIC int
 pagebuf_daemon_wakeup(
        int                     priority,
        unsigned int            mask)
 {
+       if (force_sleep)
+               return 0;
        force_flush = 1;
        barrier();
        wake_up_process(pagebuf_daemon_task);
@@ -1778,7 +1780,12 @@ pagebuf_daemon(
 
        INIT_LIST_HEAD(&tmp);
        do {
-               try_to_freeze(PF_FREEZE);
+               if (unlikely(current->flags & PF_FREEZE)) {
+                       force_sleep = 1;
+                       refrigerator(PF_FREEZE);
+               } else {
+                       force_sleep = 0;
+               }
 
                set_current_state(TASK_INTERRUPTIBLE);
                schedule_timeout((xfs_buf_timer_centisecs * HZ) / 100);