diff options
Diffstat (limited to 'fs/super.c')
-rw-r--r-- | fs/super.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/fs/super.c b/fs/super.c index cb20744ec789..ed080c417167 100644 --- a/fs/super.c +++ b/fs/super.c | |||
@@ -458,7 +458,6 @@ void sync_filesystems(int wait) | |||
458 | if (sb->s_flags & MS_RDONLY) | 458 | if (sb->s_flags & MS_RDONLY) |
459 | continue; | 459 | continue; |
460 | sb->s_need_sync_fs = 1; | 460 | sb->s_need_sync_fs = 1; |
461 | async_synchronize_full_special(&sb->s_async_list); | ||
462 | } | 461 | } |
463 | 462 | ||
464 | restart: | 463 | restart: |
@@ -471,6 +470,7 @@ restart: | |||
471 | sb->s_count++; | 470 | sb->s_count++; |
472 | spin_unlock(&sb_lock); | 471 | spin_unlock(&sb_lock); |
473 | down_read(&sb->s_umount); | 472 | down_read(&sb->s_umount); |
473 | async_synchronize_full_special(&sb->s_async_list); | ||
474 | if (sb->s_root && (wait || sb->s_dirt)) | 474 | if (sb->s_root && (wait || sb->s_dirt)) |
475 | sb->s_op->sync_fs(sb, wait); | 475 | sb->s_op->sync_fs(sb, wait); |
476 | up_read(&sb->s_umount); | 476 | up_read(&sb->s_umount); |
@@ -810,6 +810,7 @@ int get_sb_bdev(struct file_system_type *fs_type, | |||
810 | } | 810 | } |
811 | 811 | ||
812 | s->s_flags |= MS_ACTIVE; | 812 | s->s_flags |= MS_ACTIVE; |
813 | bdev->bd_super = s; | ||
813 | } | 814 | } |
814 | 815 | ||
815 | return simple_set_mnt(mnt, s); | 816 | return simple_set_mnt(mnt, s); |
@@ -829,6 +830,7 @@ void kill_block_super(struct super_block *sb) | |||
829 | struct block_device *bdev = sb->s_bdev; | 830 | struct block_device *bdev = sb->s_bdev; |
830 | fmode_t mode = sb->s_mode; | 831 | fmode_t mode = sb->s_mode; |
831 | 832 | ||
833 | bdev->bd_super = 0; | ||
832 | generic_shutdown_super(sb); | 834 | generic_shutdown_super(sb); |
833 | sync_blockdev(bdev); | 835 | sync_blockdev(bdev); |
834 | close_bdev_exclusive(bdev, mode); | 836 | close_bdev_exclusive(bdev, mode); |