In principle, a filesystem may want to have ->sync_fs() called during sync(1) although it does not have a bdi (i.e. s_bdi is set to noop_backing_dev_info). Only writeback code really needs bdi set to something reasonable. So move the checks where they are more logical. Signed-off-by: Jan Kara <jack@xxxxxxx> --- fs/fs-writeback.c | 6 ++++++ fs/sync.c | 9 +-------- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c index 0f015a0..82a876b 100644 --- a/fs/fs-writeback.c +++ b/fs/fs-writeback.c @@ -1194,6 +1194,9 @@ void writeback_inodes_sb_nr(struct super_block *sb, unsigned long nr) .nr_pages = nr, }; + /* Nothing to do? */ + if (sb->s_bdi == &noop_backing_dev_info) + return; WARN_ON(!rwsem_is_locked(&sb->s_umount)); bdi_queue_work(sb->s_bdi, &work); wait_for_completion(&done); @@ -1272,6 +1275,9 @@ void sync_inodes_sb(struct super_block *sb) .done = &done, }; + /* Nothing to do? */ + if (sb->s_bdi == &noop_backing_dev_info) + return; WARN_ON(!rwsem_is_locked(&sb->s_umount)); bdi_queue_work(sb->s_bdi, &work); diff --git a/fs/sync.c b/fs/sync.c index f8f21d9..2f5bd52 100644 --- a/fs/sync.c +++ b/fs/sync.c @@ -63,13 +63,6 @@ int sync_filesystem(struct super_block *sb) if (sb->s_flags & MS_RDONLY) return 0; - /* - * This should be safe, as we require bdi backing to actually - * write out data in the first place. - */ - if (sb->s_bdi == &noop_backing_dev_info) - return 0; - __sync_filesystem(sb, 0); ret = __sync_blockdev(sb->s_bdev, 0); if (ret < 0) @@ -82,7 +75,7 @@ EXPORT_SYMBOL_GPL(sync_filesystem); static void sync_one_sb(struct super_block *sb, void *arg) { /* Avoid read-only filesystems and filesystems without backing device */ - if (!(sb->s_flags & MS_RDONLY) && sb->s_bdi != &noop_backing_dev_info) + if (!(sb->s_flags & MS_RDONLY)) __sync_filesystem(sb, *(int *)arg); } /* -- 1.7.1 -- 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