usb: atm: speedtch: use new hex_to_bin() method
[safe/jmp/linux-2.6] / fs / fs-writeback.c
index 76f546d..ea8592b 100644 (file)
@@ -42,10 +42,10 @@ struct wb_writeback_args {
        long nr_pages;
        struct super_block *sb;
        enum writeback_sync_modes sync_mode;
-       int for_kupdate:1;
-       int range_cyclic:1;
-       int for_background:1;
-       int sb_pinned:1;
+       unsigned int for_kupdate:1;
+       unsigned int range_cyclic:1;
+       unsigned int for_background:1;
+       unsigned int sb_pinned:1;
 };
 
 /*
@@ -409,11 +409,11 @@ static void inode_wait_for_writeback(struct inode *inode)
        wait_queue_head_t *wqh;
 
        wqh = bit_waitqueue(&inode->i_state, __I_SYNC);
-       do {
+        while (inode->i_state & I_SYNC) {
                spin_unlock(&inode_lock);
                __wait_on_bit(wqh, &wq, inode_wait, TASK_UNINTERRUPTIBLE);
                spin_lock(&inode_lock);
-       } while (inode->i_state & I_SYNC);
+       }
 }
 
 /*
@@ -978,8 +978,13 @@ int bdi_writeback_task(struct bdi_writeback *wb)
                if (dirty_writeback_interval) {
                        wait_jiffies = msecs_to_jiffies(dirty_writeback_interval * 10);
                        schedule_timeout_interruptible(wait_jiffies);
-               } else
-                       schedule();
+               } else {
+                       set_current_state(TASK_INTERRUPTIBLE);
+                       if (list_empty_careful(&wb->bdi->work_list) &&
+                           !kthread_should_stop())
+                               schedule();
+                       __set_current_state(TASK_RUNNING);
+               }
 
                try_to_freeze();
        }