|
@@ -285,11 +285,12 @@ static int ide_gd_getgeo(struct block_device *bdev, struct hd_geometry *geo)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static int ide_gd_media_changed(struct gendisk *disk)
|
|
|
+static unsigned int ide_gd_check_events(struct gendisk *disk,
|
|
|
+ unsigned int clearing)
|
|
|
{
|
|
|
struct ide_disk_obj *idkp = ide_drv_g(disk, ide_disk_obj);
|
|
|
ide_drive_t *drive = idkp->drive;
|
|
|
- int ret;
|
|
|
+ bool ret;
|
|
|
|
|
|
/* do not scan partitions twice if this is a removable device */
|
|
|
if (drive->dev_flags & IDE_DFLAG_ATTACH) {
|
|
@@ -297,10 +298,10 @@ static int ide_gd_media_changed(struct gendisk *disk)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
- ret = !!(drive->dev_flags & IDE_DFLAG_MEDIA_CHANGED);
|
|
|
+ ret = drive->dev_flags & IDE_DFLAG_MEDIA_CHANGED;
|
|
|
drive->dev_flags &= ~IDE_DFLAG_MEDIA_CHANGED;
|
|
|
|
|
|
- return ret;
|
|
|
+ return ret ? DISK_EVENT_MEDIA_CHANGE : 0;
|
|
|
}
|
|
|
|
|
|
static void ide_gd_unlock_native_capacity(struct gendisk *disk)
|
|
@@ -318,7 +319,7 @@ static int ide_gd_revalidate_disk(struct gendisk *disk)
|
|
|
struct ide_disk_obj *idkp = ide_drv_g(disk, ide_disk_obj);
|
|
|
ide_drive_t *drive = idkp->drive;
|
|
|
|
|
|
- if (ide_gd_media_changed(disk))
|
|
|
+ if (ide_gd_check_events(disk, 0))
|
|
|
drive->disk_ops->get_capacity(drive);
|
|
|
|
|
|
set_capacity(disk, ide_gd_capacity(drive));
|
|
@@ -340,7 +341,7 @@ static const struct block_device_operations ide_gd_ops = {
|
|
|
.release = ide_gd_release,
|
|
|
.ioctl = ide_gd_ioctl,
|
|
|
.getgeo = ide_gd_getgeo,
|
|
|
- .media_changed = ide_gd_media_changed,
|
|
|
+ .check_events = ide_gd_check_events,
|
|
|
.unlock_native_capacity = ide_gd_unlock_native_capacity,
|
|
|
.revalidate_disk = ide_gd_revalidate_disk
|
|
|
};
|
|
@@ -412,6 +413,7 @@ static int ide_gd_probe(ide_drive_t *drive)
|
|
|
if (drive->dev_flags & IDE_DFLAG_REMOVABLE)
|
|
|
g->flags = GENHD_FL_REMOVABLE;
|
|
|
g->fops = &ide_gd_ops;
|
|
|
+ g->events = DISK_EVENT_MEDIA_CHANGE;
|
|
|
add_disk(g);
|
|
|
return 0;
|
|
|
|