static DEFINE_MUTEX(idedisk_ref_mutex);
-#define to_ide_disk(obj) container_of(obj, struct ide_disk_obj, kref)
-
static void ide_disk_release(struct kref *);
static struct ide_disk_obj *ide_disk_get(struct gendisk *disk)
struct ide_disk_obj *idkp = NULL;
mutex_lock(&idedisk_ref_mutex);
- idkp = ide_disk_g(disk);
+ idkp = ide_drv_g(disk, ide_disk_obj);
if (idkp) {
if (ide_device_get(idkp->drive))
idkp = NULL;
static void ide_disk_release(struct kref *kref)
{
- struct ide_disk_obj *idkp = to_ide_disk(kref);
+ struct ide_disk_obj *idkp = to_ide_drv(kref, ide_disk_obj);
ide_drive_t *drive = idkp->drive;
struct gendisk *g = idkp->disk;
idkp->openers++;
if ((drive->dev_flags & IDE_DFLAG_REMOVABLE) && idkp->openers == 1) {
- check_disk_change(inode->i_bdev);
/*
* Ignore the return code from door_lock,
* since the open() has already succeeded,
if ((drive->dev_flags & IDE_DFLAG_DOORLOCKING) &&
idedisk_set_doorlock(drive, 1))
drive->dev_flags &= ~IDE_DFLAG_DOORLOCKING;
+ check_disk_change(inode->i_bdev);
}
return 0;
}
static int idedisk_release(struct inode *inode, struct file *filp)
{
struct gendisk *disk = inode->i_bdev->bd_disk;
- struct ide_disk_obj *idkp = ide_disk_g(disk);
+ struct ide_disk_obj *idkp = ide_drv_g(disk, ide_disk_obj);
ide_drive_t *drive = idkp->drive;
if (idkp->openers == 1)
static int idedisk_getgeo(struct block_device *bdev, struct hd_geometry *geo)
{
- struct ide_disk_obj *idkp = ide_disk_g(bdev->bd_disk);
+ struct ide_disk_obj *idkp = ide_drv_g(bdev->bd_disk, ide_disk_obj);
ide_drive_t *drive = idkp->drive;
geo->heads = drive->bios_head;
static int idedisk_media_changed(struct gendisk *disk)
{
- struct ide_disk_obj *idkp = ide_disk_g(disk);
+ struct ide_disk_obj *idkp = ide_drv_g(disk, ide_disk_obj);
ide_drive_t *drive = idkp->drive;
/* do not scan partitions twice if this is a removable device */
static int idedisk_revalidate_disk(struct gendisk *disk)
{
- struct ide_disk_obj *idkp = ide_disk_g(disk);
+ struct ide_disk_obj *idkp = ide_drv_g(disk, ide_disk_obj);
set_capacity(disk, ide_disk_capacity(idkp->drive));
return 0;
}