static int idescsi_ide_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) { struct block_device *bdev = inode->i_bdev; struct ide_scsi_obj *scsi = ide_scsi_g(bdev->bd_disk); return generic_ide_ioctl(scsi->drive, file, bdev, cmd, arg); }
static int idescsi_ide_release(struct inode *inode, struct file *filp) { struct gendisk *disk = inode->i_bdev->bd_disk; struct ide_scsi_obj *scsi = ide_scsi_g(disk); ide_scsi_put(scsi); return 0; }
static struct ide_scsi_obj *ide_scsi_get(struct gendisk *disk) { struct ide_scsi_obj *scsi = NULL; mutex_lock(&idescsi_ref_mutex); scsi = ide_scsi_g(disk); if (scsi) scsi_host_get(scsi->host); mutex_unlock(&idescsi_ref_mutex); return scsi; }
static struct ide_scsi_obj *ide_scsi_get(struct gendisk *disk) { struct ide_scsi_obj *scsi = NULL; mutex_lock(&idescsi_ref_mutex); scsi = ide_scsi_g(disk); if (scsi) { if (ide_device_get(scsi->drive)) scsi = NULL; else scsi_host_get(scsi->host); } mutex_unlock(&idescsi_ref_mutex); return scsi; }