struct inode *inode;
        long progress;
        struct blk_plug plug;
+       bool queued = false;
 
        blk_start_plug(&plug);
        for (;;) {
                        dirtied_before = jiffies;
 
                trace_writeback_start(wb, work);
-               if (list_empty(&wb->b_io))
+               if (list_empty(&wb->b_io)) {
                        queue_io(wb, work, dirtied_before);
+                       queued = true;
+               }
                if (work->sb)
                        progress = writeback_sb_inodes(work->sb, wb, work);
                else
                 * mean the overall work is done. So we keep looping as long
                 * as made some progress on cleaning pages or inodes.
                 */
-               if (progress) {
+               if (progress || !queued) {
                        spin_unlock(&wb->list_lock);
                        continue;
                }