Hi Jan, I got this error for !CONFIG_BLOCK builds: fs/sync.c:110:2: error: implicit declaration of function 'iterate_bdevs' [-Werror=implicit-function-declaration] Thanks, Fengguang On Tue, Jul 03, 2012 at 04:45:32PM +0200, Jan Kara wrote: > In case block device does not have filesystem mounted on it, sys_sync will just > ignore it and doesn't writeout its dirty pages. This is because writeback code > avoids writing inodes from superblock without backing device and > blockdev_superblock is such a superblock. Since it's unexpected that sync > doesn't writeout dirty data for block devices be nice to users and change the > behavior to do so. So now we iterate over all block devices on blockdev_super > instead of iterating over all superblocks when syncing block devices. > > Reviewed-by: Christoph Hellwig <hch@xxxxxx> > Signed-off-by: Jan Kara <jack@xxxxxxx> > --- > fs/sync.c | 18 +++++++++++------- > 1 files changed, 11 insertions(+), 7 deletions(-) > > diff --git a/fs/sync.c b/fs/sync.c > index 867bf78..ea6e818 100644 > --- a/fs/sync.c > +++ b/fs/sync.c > @@ -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); > } > -- > 1.7.1 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/ -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html