diff options
Diffstat (limited to 'fs/super.c')
| -rw-r--r-- | fs/super.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/fs/super.c b/fs/super.c index 30294218fa63..e20b5580afd5 100644 --- a/fs/super.c +++ b/fs/super.c | |||
| @@ -666,6 +666,16 @@ static int test_bdev_super(struct super_block *s, void *data) | |||
| 666 | return (void *)s->s_bdev == data; | 666 | return (void *)s->s_bdev == data; |
| 667 | } | 667 | } |
| 668 | 668 | ||
| 669 | static void bdev_uevent(struct block_device *bdev, enum kobject_action action) | ||
| 670 | { | ||
| 671 | if (bdev->bd_disk) { | ||
| 672 | if (bdev->bd_part) | ||
| 673 | kobject_uevent(&bdev->bd_part->kobj, action); | ||
| 674 | else | ||
| 675 | kobject_uevent(&bdev->bd_disk->kobj, action); | ||
| 676 | } | ||
| 677 | } | ||
| 678 | |||
| 669 | struct super_block *get_sb_bdev(struct file_system_type *fs_type, | 679 | struct super_block *get_sb_bdev(struct file_system_type *fs_type, |
| 670 | int flags, const char *dev_name, void *data, | 680 | int flags, const char *dev_name, void *data, |
| 671 | int (*fill_super)(struct super_block *, void *, int)) | 681 | int (*fill_super)(struct super_block *, void *, int)) |
| @@ -707,8 +717,10 @@ struct super_block *get_sb_bdev(struct file_system_type *fs_type, | |||
| 707 | up_write(&s->s_umount); | 717 | up_write(&s->s_umount); |
| 708 | deactivate_super(s); | 718 | deactivate_super(s); |
| 709 | s = ERR_PTR(error); | 719 | s = ERR_PTR(error); |
| 710 | } else | 720 | } else { |
| 711 | s->s_flags |= MS_ACTIVE; | 721 | s->s_flags |= MS_ACTIVE; |
| 722 | bdev_uevent(bdev, KOBJ_MOUNT); | ||
| 723 | } | ||
| 712 | } | 724 | } |
| 713 | 725 | ||
| 714 | return s; | 726 | return s; |
| @@ -724,6 +736,7 @@ void kill_block_super(struct super_block *sb) | |||
| 724 | { | 736 | { |
| 725 | struct block_device *bdev = sb->s_bdev; | 737 | struct block_device *bdev = sb->s_bdev; |
| 726 | 738 | ||
| 739 | bdev_uevent(bdev, KOBJ_UMOUNT); | ||
| 727 | generic_shutdown_super(sb); | 740 | generic_shutdown_super(sb); |
| 728 | sync_blockdev(bdev); | 741 | sync_blockdev(bdev); |
| 729 | close_bdev_excl(bdev); | 742 | close_bdev_excl(bdev); |
