DASD: Send 'change' uevents
A DASD is only useable after the internal state machine transitioned
to 'ready', way after the device has been added to sysfs.
So we need to send out a 'change' event here to notify udev.
Signed-off-by: Hannes Reinecke <[email protected]>
diff --git a/drivers/s390/block/dasd.c b/drivers/s390/block/dasd.c
index 0a225cc..447fcdc 100644
--- a/drivers/s390/block/dasd.c
+++ b/drivers/s390/block/dasd.c
@@ -335,7 +335,9 @@ static int dasd_state_unfmt_to_basic(struct dasd_device *device)
static int
dasd_state_ready_to_online(struct dasd_device * device)
{
- int rc;
+ int rc, i;
+ struct gendisk *disk = device->bdev->bd_disk;
+ struct hd_struct *p;
if (device->discipline->ready_to_online) {
rc = device->discipline->ready_to_online(device);
@@ -345,6 +347,15 @@ dasd_state_ready_to_online(struct dasd_device * device)
device->state = DASD_STATE_ONLINE;
if (device->block)
dasd_schedule_block_bh(device->block);
+
+ kobject_uevent(&disk->kobj, KOBJ_CHANGE);
+ /* send uevents for all partitions */
+ for (i = 1; i < disk->minors; i++) {
+ p = disk->part[i-1];
+ if (!p || !p->nr_sects)
+ continue;
+ kobject_uevent(&p->kobj, KOBJ_CHANGE);
+ }
return 0;
}
@@ -353,7 +364,9 @@ dasd_state_ready_to_online(struct dasd_device * device)
*/
static int dasd_state_online_to_ready(struct dasd_device *device)
{
- int rc;
+ int rc, i;
+ struct gendisk *disk = device->bdev->bd_disk;
+ struct hd_struct *p;
if (device->discipline->online_to_ready) {
rc = device->discipline->online_to_ready(device);
@@ -361,6 +374,14 @@ static int dasd_state_online_to_ready(struct dasd_device *device)
return rc;
}
device->state = DASD_STATE_READY;
+ /* send uevents for all partitions */
+ for (i = 1; i < disk->minors; i++) {
+ p = disk->part[i-1];
+ if (!p || !p->nr_sects)
+ continue;
+ kobject_uevent(&p->kobj, KOBJ_CHANGE);
+ }
+ kobject_uevent(&disk->kobj, KOBJ_CHANGE);
return 0;
}
Hi Hannes,
On Fri, 2008-10-24 at 08:05 +0200, Hannes Reinecke wrote:
> this patch modifies the DASD driver to sent out 'change' events
> whenever the internal state machine transitions in or out of the
> 'ready' state. This is required for udev so that vol_id and friends
> can actually read from the disk.
>
> Please apply.
Looks reasonable to me. Stefan can you take a look at this please?
--
blue skies,
Martin.
"Reality continues to ruin my life." - Calvin.