sb->s_op->sync_fs(sb, *(int *)arg);
 }
 
-static void sync_blkdev_one_sb(struct super_block *sb, void *arg)
+static void flush_one_bdev(struct block_device *bdev, void *arg)
 {
-       if (!(sb->s_flags & MS_RDONLY))
-               __sync_blockdev(sb->s_bdev, *(int *)arg);
+       __sync_blockdev(bdev, 0);
+}
+
+static void sync_one_bdev(struct block_device *bdev, void *arg)
+{
+       sync_blockdev(bdev);
 }
 
 /*
        wakeup_flusher_threads(0, WB_REASON_SYNC);
        iterate_supers(writeback_inodes_one_sb, NULL);
        iterate_supers(sync_fs_one_sb, &nowait);
-       iterate_supers(sync_blkdev_one_sb, &nowait);
+       iterate_bdevs(flush_one_bdev, NULL);
        iterate_supers(sync_inodes_one_sb, NULL);
        iterate_supers(sync_fs_one_sb, &wait);
-       iterate_supers(sync_blkdev_one_sb, &wait);
+       iterate_bdevs(sync_one_bdev, NULL);
        if (unlikely(laptop_mode))
                laptop_sync_completion();
        return 0;
         */
        iterate_supers(sync_inodes_one_sb, &nowait);
        iterate_supers(sync_fs_one_sb, &nowait);
-       iterate_supers(sync_blkdev_one_sb, &nowait);
+       iterate_bdevs(flush_one_bdev, NULL);
        iterate_supers(sync_inodes_one_sb, &nowait);
        iterate_supers(sync_fs_one_sb, &nowait);
-       iterate_supers(sync_blkdev_one_sb, &nowait);
+       iterate_bdevs(flush_one_bdev, NULL);
        printk("Emergency Sync complete\n");
        kfree(work);
 }