Loading Documentation/feature-removal-schedule.txt +9 −0 Original line number Original line Diff line number Diff line Loading @@ -171,3 +171,12 @@ Why: The ISA interface is faster and should be always available. The I2C probing is also known to cause trouble in at least one case (see probing is also known to cause trouble in at least one case (see bug #5889.) bug #5889.) Who: Jean Delvare <khali@linux-fr.org> Who: Jean Delvare <khali@linux-fr.org> --------------------------- What: mount/umount uevents When: February 2007 Why: These events are not correct, and do not properly let userspace know when a file system has been mounted or unmounted. Userspace should poll the /proc/mounts file instead to detect this properly. Who: Greg Kroah-Hartman <gregkh@suse.de> fs/super.c +14 −1 Original line number Original line Diff line number Diff line Loading @@ -666,6 +666,16 @@ static int test_bdev_super(struct super_block *s, void *data) return (void *)s->s_bdev == data; return (void *)s->s_bdev == data; } } static void bdev_uevent(struct block_device *bdev, enum kobject_action action) { if (bdev->bd_disk) { if (bdev->bd_part) kobject_uevent(&bdev->bd_part->kobj, action); else kobject_uevent(&bdev->bd_disk->kobj, action); } } struct super_block *get_sb_bdev(struct file_system_type *fs_type, struct super_block *get_sb_bdev(struct file_system_type *fs_type, int flags, const char *dev_name, void *data, int flags, const char *dev_name, void *data, int (*fill_super)(struct super_block *, void *, int)) int (*fill_super)(struct super_block *, void *, int)) Loading Loading @@ -707,8 +717,10 @@ struct super_block *get_sb_bdev(struct file_system_type *fs_type, up_write(&s->s_umount); up_write(&s->s_umount); deactivate_super(s); deactivate_super(s); s = ERR_PTR(error); s = ERR_PTR(error); } else } else { s->s_flags |= MS_ACTIVE; s->s_flags |= MS_ACTIVE; bdev_uevent(bdev, KOBJ_MOUNT); } } } return s; return s; Loading @@ -724,6 +736,7 @@ void kill_block_super(struct super_block *sb) { { struct block_device *bdev = sb->s_bdev; struct block_device *bdev = sb->s_bdev; bdev_uevent(bdev, KOBJ_UMOUNT); generic_shutdown_super(sb); generic_shutdown_super(sb); sync_blockdev(bdev); sync_blockdev(bdev); close_bdev_excl(bdev); close_bdev_excl(bdev); Loading include/linux/kobject.h +4 −2 Original line number Original line Diff line number Diff line Loading @@ -41,8 +41,10 @@ enum kobject_action { KOBJ_ADD = (__force kobject_action_t) 0x01, /* exclusive to core */ KOBJ_ADD = (__force kobject_action_t) 0x01, /* exclusive to core */ KOBJ_REMOVE = (__force kobject_action_t) 0x02, /* exclusive to core */ KOBJ_REMOVE = (__force kobject_action_t) 0x02, /* exclusive to core */ KOBJ_CHANGE = (__force kobject_action_t) 0x03, /* device state change */ KOBJ_CHANGE = (__force kobject_action_t) 0x03, /* device state change */ KOBJ_OFFLINE = (__force kobject_action_t) 0x04, /* device offline */ KOBJ_MOUNT = (__force kobject_action_t) 0x04, /* mount event for block devices (broken) */ KOBJ_ONLINE = (__force kobject_action_t) 0x05, /* device online */ KOBJ_UMOUNT = (__force kobject_action_t) 0x05, /* umount event for block devices (broken) */ KOBJ_OFFLINE = (__force kobject_action_t) 0x06, /* device offline */ KOBJ_ONLINE = (__force kobject_action_t) 0x07, /* device online */ }; }; struct kobject { struct kobject { Loading lib/kobject_uevent.c +4 −0 Original line number Original line Diff line number Diff line Loading @@ -38,6 +38,10 @@ static char *action_to_string(enum kobject_action action) return "remove"; return "remove"; case KOBJ_CHANGE: case KOBJ_CHANGE: return "change"; return "change"; case KOBJ_MOUNT: return "mount"; case KOBJ_UMOUNT: return "umount"; case KOBJ_OFFLINE: case KOBJ_OFFLINE: return "offline"; return "offline"; case KOBJ_ONLINE: case KOBJ_ONLINE: Loading Loading
Documentation/feature-removal-schedule.txt +9 −0 Original line number Original line Diff line number Diff line Loading @@ -171,3 +171,12 @@ Why: The ISA interface is faster and should be always available. The I2C probing is also known to cause trouble in at least one case (see probing is also known to cause trouble in at least one case (see bug #5889.) bug #5889.) Who: Jean Delvare <khali@linux-fr.org> Who: Jean Delvare <khali@linux-fr.org> --------------------------- What: mount/umount uevents When: February 2007 Why: These events are not correct, and do not properly let userspace know when a file system has been mounted or unmounted. Userspace should poll the /proc/mounts file instead to detect this properly. Who: Greg Kroah-Hartman <gregkh@suse.de>
fs/super.c +14 −1 Original line number Original line Diff line number Diff line Loading @@ -666,6 +666,16 @@ static int test_bdev_super(struct super_block *s, void *data) return (void *)s->s_bdev == data; return (void *)s->s_bdev == data; } } static void bdev_uevent(struct block_device *bdev, enum kobject_action action) { if (bdev->bd_disk) { if (bdev->bd_part) kobject_uevent(&bdev->bd_part->kobj, action); else kobject_uevent(&bdev->bd_disk->kobj, action); } } struct super_block *get_sb_bdev(struct file_system_type *fs_type, struct super_block *get_sb_bdev(struct file_system_type *fs_type, int flags, const char *dev_name, void *data, int flags, const char *dev_name, void *data, int (*fill_super)(struct super_block *, void *, int)) int (*fill_super)(struct super_block *, void *, int)) Loading Loading @@ -707,8 +717,10 @@ struct super_block *get_sb_bdev(struct file_system_type *fs_type, up_write(&s->s_umount); up_write(&s->s_umount); deactivate_super(s); deactivate_super(s); s = ERR_PTR(error); s = ERR_PTR(error); } else } else { s->s_flags |= MS_ACTIVE; s->s_flags |= MS_ACTIVE; bdev_uevent(bdev, KOBJ_MOUNT); } } } return s; return s; Loading @@ -724,6 +736,7 @@ void kill_block_super(struct super_block *sb) { { struct block_device *bdev = sb->s_bdev; struct block_device *bdev = sb->s_bdev; bdev_uevent(bdev, KOBJ_UMOUNT); generic_shutdown_super(sb); generic_shutdown_super(sb); sync_blockdev(bdev); sync_blockdev(bdev); close_bdev_excl(bdev); close_bdev_excl(bdev); Loading
include/linux/kobject.h +4 −2 Original line number Original line Diff line number Diff line Loading @@ -41,8 +41,10 @@ enum kobject_action { KOBJ_ADD = (__force kobject_action_t) 0x01, /* exclusive to core */ KOBJ_ADD = (__force kobject_action_t) 0x01, /* exclusive to core */ KOBJ_REMOVE = (__force kobject_action_t) 0x02, /* exclusive to core */ KOBJ_REMOVE = (__force kobject_action_t) 0x02, /* exclusive to core */ KOBJ_CHANGE = (__force kobject_action_t) 0x03, /* device state change */ KOBJ_CHANGE = (__force kobject_action_t) 0x03, /* device state change */ KOBJ_OFFLINE = (__force kobject_action_t) 0x04, /* device offline */ KOBJ_MOUNT = (__force kobject_action_t) 0x04, /* mount event for block devices (broken) */ KOBJ_ONLINE = (__force kobject_action_t) 0x05, /* device online */ KOBJ_UMOUNT = (__force kobject_action_t) 0x05, /* umount event for block devices (broken) */ KOBJ_OFFLINE = (__force kobject_action_t) 0x06, /* device offline */ KOBJ_ONLINE = (__force kobject_action_t) 0x07, /* device online */ }; }; struct kobject { struct kobject { Loading
lib/kobject_uevent.c +4 −0 Original line number Original line Diff line number Diff line Loading @@ -38,6 +38,10 @@ static char *action_to_string(enum kobject_action action) return "remove"; return "remove"; case KOBJ_CHANGE: case KOBJ_CHANGE: return "change"; return "change"; case KOBJ_MOUNT: return "mount"; case KOBJ_UMOUNT: return "umount"; case KOBJ_OFFLINE: case KOBJ_OFFLINE: return "offline"; return "offline"; case KOBJ_ONLINE: case KOBJ_ONLINE: Loading