Re: [PATCH] Driver Core patches for 2.6.9

From: Greg KH
Date: Tue Oct 19 2004 - 12:11:02 EST


ChangeSet 1.1867.3.5, 2004/09/15 14:16:46-07:00, greg@xxxxxxxxx

kevent: add block mount and umount support

Send notification over the new netlink socket to let userspace know that
the filesystem code claims/releases the superblock on an blockdevice.
This way, userspace can get rid of constantly polling /proc/mounts to
watch for filesystem changes.

Signed-off-by: Kay Sievers <kay.sievers@xxxxxxxx>
Signed-off-by: Greg Kroah-Hartman <greg@xxxxxxxxx>


fs/super.c | 17 ++++++++++++++++-
include/linux/kobject_uevent.h | 1 +
lib/kobject_uevent.c | 1 +
3 files changed, 18 insertions(+), 1 deletion(-)


diff -Nru a/fs/super.c b/fs/super.c
--- a/fs/super.c 2004-10-19 09:22:39 -07:00
+++ b/fs/super.c 2004-10-19 09:22:39 -07:00
@@ -35,6 +35,7 @@
#include <linux/vfs.h>
#include <linux/writeback.h> /* for the emergency remount stuff */
#include <linux/idr.h>
+#include <linux/kobject.h>
#include <asm/uaccess.h>


@@ -633,6 +634,16 @@
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, NULL);
+ else
+ kobject_uevent(&bdev->bd_disk->kobj, action, NULL);
+ }
+}
+
struct super_block *get_sb_bdev(struct file_system_type *fs_type,
int flags, const char *dev_name, void *data,
int (*fill_super)(struct super_block *, void *, int))
@@ -675,8 +686,10 @@
up_write(&s->s_umount);
deactivate_super(s);
s = ERR_PTR(error);
- } else
+ } else {
s->s_flags |= MS_ACTIVE;
+ bdev_uevent(bdev, KOBJ_MOUNT);
+ }
}

return s;
@@ -691,6 +704,8 @@
void kill_block_super(struct super_block *sb)
{
struct block_device *bdev = sb->s_bdev;
+
+ bdev_uevent(bdev, KOBJ_UMOUNT);
generic_shutdown_super(sb);
set_blocksize(bdev, sb->s_old_blocksize);
close_bdev_excl(bdev);
diff -Nru a/include/linux/kobject_uevent.h b/include/linux/kobject_uevent.h
--- a/include/linux/kobject_uevent.h 2004-10-19 09:22:39 -07:00
+++ b/include/linux/kobject_uevent.h 2004-10-19 09:22:39 -07:00
@@ -21,6 +21,7 @@
KOBJ_REMOVE = 0x01, /* remove event, for hotplug */
KOBJ_CHANGE = 0x02, /* a sysfs attribute file has changed */
KOBJ_MOUNT = 0x03, /* mount event for block devices */
+ KOBJ_UMOUNT = 0x04, /* umount event for block devices */
KOBJ_MAX_ACTION, /* must be last action listed */
};

diff -Nru a/lib/kobject_uevent.c b/lib/kobject_uevent.c
--- a/lib/kobject_uevent.c 2004-10-19 09:22:39 -07:00
+++ b/lib/kobject_uevent.c 2004-10-19 09:22:39 -07:00
@@ -32,6 +32,7 @@
"remove", /* 0x01 */
"change", /* 0x02 */
"mount", /* 0x03 */
+ "umount", /* 0x04 */
};

static char *action_to_string(enum kobject_action action)

-
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/