[PATCH 3/3] sysfs representation of stacked devices (md)

From: Jun'ichi Nomura
Date: Fri Feb 17 2006 - 13:02:07 EST


This patch modifies md driver to create symlinks to/from
underlying devices.

--
Jun'ichi Nomura, NEC Solutions (America), Inc.
Exporting stacked device relationship to sysfs (md)

Signed-off-by: Jun'ichi Nomura <j-nomura@xxxxxxxxxxxxx>

--- linux-2.6.15.orig/include/linux/raid/md_k.h 2006-01-02 22:21:10.000000000 -0500
+++ linux-2.6.15/include/linux/raid/md_k.h 2006-02-16 15:36:22.000000000 -0500
@@ -155,6 +155,7 @@ struct mddev_s
struct gendisk *gendisk;

struct kobject kobj;
+ struct kobject slave_dir;

/* Superblock information */
int major_version,
md.c linux-2.6.15/drivers/md/md.c
--- linux-2.6.15.orig/drivers/md/md.c 2006-01-02 22:21:10.000000000 -0500
+++ linux-2.6.15/drivers/md/md.c 2006-02-16 17:44:49.000000000 -0500
@@ -182,6 +182,7 @@ static void mddev_put(mddev_t *mddev)
return;
if (!mddev->raid_disks && list_empty(&mddev->disks)) {
list_del(&mddev->all_mddevs);
+ stackdev_clear(&mddev->slave_dir);
blk_put_queue(mddev->queue);
kobject_unregister(&mddev->kobj);
}
@@ -1226,6 +1227,7 @@ static int bind_rdev_to_array(mdk_rdev_t
else
ko = &rdev->bdev->bd_disk->kobj;
sysfs_create_link(&rdev->kobj, ko, "block");
+ stackdev_link(rdev->bdev, &mddev->slave_dir, &mddev->gendisk->kobj);
return 0;
}

@@ -1236,6 +1238,8 @@ static void unbind_rdev_from_array(mdk_r
MD_BUG();
return;
}
+ stackdev_unlink(rdev->bdev, &rdev->mddev->slave_dir,
+ &rdev->mddev->gendisk->kobj);
list_del_init(&rdev->same_set);
printk(KERN_INFO "md: unbind<%s>\n", bdevname(rdev->bdev,b));
rdev->mddev = NULL;
@@ -1924,6 +1928,7 @@ static struct kobject *md_probe(dev_t de
snprintf(mddev->kobj.name, KOBJ_NAME_LEN, "%s", "md");
mddev->kobj.ktype = &md_ktype;
kobject_register(&mddev->kobj);
+ stackdev_init(&mddev->slave_dir, &mddev->gendisk->kobj);
return NULL;
}