aboutsummaryrefslogtreecommitdiff
path: root/drivers/s390/block/dasd.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2009-01-09 13:56:06 -0800
committerLinus Torvalds <torvalds@linux-foundation.org>2009-01-09 13:56:06 -0800
commit7d671f3e713fc5ff18a5227a8dc16dfdb8bc0664 (patch)
tree07b7bb776eb2c3d4f5944ae81661f85de62984e1 /drivers/s390/block/dasd.c
parentd7d717fa889fc7a60c38497846c7618940a999d9 (diff)
parent555d61d6542d51563e50532ff604dcd31c96fb24 (diff)
Merge branch 'for-linus' of git://git390.osdl.marist.edu/pub/scm/linux-2.6
* 'for-linus' of git://git390.osdl.marist.edu/pub/scm/linux-2.6: [S390] update documentation for hvc_iucv kernel parameter. [S390] hvc_iucv: Special handling of IUCV HVC devices [S390] hvc_iucv: Refactor console and device initialization [S390] hvc_iucv: Update function documentation [S390] hvc_iucv: Limit rate of outgoing IUCV messages [S390] hvc_iucv: Change IUCV term id and use one device as default [S390] Use unsigned long long for u64 on 64bit. [S390] qdio: fix broken pointer in case of CONFIG_DEBUG_FS is disabled [S390] vdso: compile fix [S390] remove code for oldselect system call [S390] types: add/fix types.h include in header files [S390] dasd: add device attribute to disable blocking on lost paths [S390] dasd: send change uevents for dasd block devices [S390] tape block: fix dependencies [S390] asm-s390/posix_types.h: drop __USE_ALL usage [S390] gettimeofday.S: removed duplicated #includes [S390] ptrace: no extern declarations for userspace
Diffstat (limited to 'drivers/s390/block/dasd.c')
-rw-r--r--drivers/s390/block/dasd.c21
1 files changed, 20 insertions, 1 deletions
diff --git a/drivers/s390/block/dasd.c b/drivers/s390/block/dasd.c
index 570ae59c1d5..bd591499414 100644
--- a/drivers/s390/block/dasd.c
+++ b/drivers/s390/block/dasd.c
@@ -336,6 +336,9 @@ static int
dasd_state_ready_to_online(struct dasd_device * device)
{
int rc;
+ struct gendisk *disk;
+ struct disk_part_iter piter;
+ struct hd_struct *part;
if (device->discipline->ready_to_online) {
rc = device->discipline->ready_to_online(device);
@@ -343,8 +346,14 @@ dasd_state_ready_to_online(struct dasd_device * device)
return rc;
}
device->state = DASD_STATE_ONLINE;
- if (device->block)
+ if (device->block) {
dasd_schedule_block_bh(device->block);
+ disk = device->block->bdev->bd_disk;
+ disk_part_iter_init(&piter, disk, DISK_PITER_INCL_PART0);
+ while ((part = disk_part_iter_next(&piter)))
+ kobject_uevent(&part_to_dev(part)->kobj, KOBJ_CHANGE);
+ disk_part_iter_exit(&piter);
+ }
return 0;
}
@@ -354,6 +363,9 @@ dasd_state_ready_to_online(struct dasd_device * device)
static int dasd_state_online_to_ready(struct dasd_device *device)
{
int rc;
+ struct gendisk *disk;
+ struct disk_part_iter piter;
+ struct hd_struct *part;
if (device->discipline->online_to_ready) {
rc = device->discipline->online_to_ready(device);
@@ -361,6 +373,13 @@ static int dasd_state_online_to_ready(struct dasd_device *device)
return rc;
}
device->state = DASD_STATE_READY;
+ if (device->block) {
+ disk = device->block->bdev->bd_disk;
+ disk_part_iter_init(&piter, disk, DISK_PITER_INCL_PART0);
+ while ((part = disk_part_iter_next(&piter)))
+ kobject_uevent(&part_to_dev(part)->kobj, KOBJ_CHANGE);
+ disk_part_iter_exit(&piter);
+ }
return 0;
}