|
@@ -85,10 +85,14 @@ static void sync_fs_one_sb(struct super_block *sb, void *arg)
|
|
|
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);
|
|
|
}
|
|
|
|
|
|
/*
|
|
@@ -102,10 +106,10 @@ SYSCALL_DEFINE0(sync)
|
|
|
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;
|
|
@@ -121,10 +125,10 @@ static void do_sync_work(struct work_struct *work)
|
|
|
*/
|
|
|
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);
|
|
|
}
|