writeback: add missing requeue_io in writeback_inodes_wb
authorChristoph Hellwig <hch@lst.de>
Wed, 9 Jun 2010 12:28:43 +0000 (14:28 +0200)
committerJens Axboe <jaxboe@fusionio.com>
Fri, 11 Jun 2010 10:58:08 +0000 (12:58 +0200)
In "writeback: fix writeback_inodes_wb from writeback_inodes_sb" I
accidentally removed the requeue_io if we need to skip a superblock
because we can't pin it.  Add it back, otherwise we're getting spurious
lockups after multiple xfstests runs.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
fs/fs-writeback.c

index 0079bf5..3a066e9 100644 (file)
@@ -643,8 +643,10 @@ static void writeback_inodes_wb(struct bdi_writeback *wb,
 
                        ret = writeback_sb_inodes(sb, wb, wbc);
                } else {
-                       if (!pin_sb_for_writeback(sb))
+                       if (!pin_sb_for_writeback(sb)) {
+                               requeue_io(inode);
                                continue;
+                       }
                        ret = writeback_sb_inodes(sb, wb, wbc);
                        drop_super(sb);
                }