ide: remove ide_drive_t.usage

This field is no longer used by the core IDE code so fix ide-{disk,floppy}
drivers to keep openers count in the driver specific objects and remove
it from ide-{cd,scsi,tape} drivers (it was write-only).
Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
parent 7b77d864
...@@ -3353,21 +3353,16 @@ static int idecd_open(struct inode * inode, struct file * file) ...@@ -3353,21 +3353,16 @@ static int idecd_open(struct inode * inode, struct file * file)
{ {
struct gendisk *disk = inode->i_bdev->bd_disk; struct gendisk *disk = inode->i_bdev->bd_disk;
struct cdrom_info *info; struct cdrom_info *info;
ide_drive_t *drive;
int rc = -ENOMEM; int rc = -ENOMEM;
if (!(info = ide_cd_get(disk))) if (!(info = ide_cd_get(disk)))
return -ENXIO; return -ENXIO;
drive = info->drive;
drive->usage++;
if (!info->buffer) if (!info->buffer)
info->buffer = kmalloc(SECTOR_BUFFER_SIZE, info->buffer = kmalloc(SECTOR_BUFFER_SIZE, GFP_KERNEL|__GFP_REPEAT);
GFP_KERNEL|__GFP_REPEAT);
if (!info->buffer || (rc = cdrom_open(&info->devinfo, inode, file))) if (info->buffer)
drive->usage--; rc = cdrom_open(&info->devinfo, inode, file);
if (rc < 0) if (rc < 0)
ide_cd_put(info); ide_cd_put(info);
...@@ -3379,10 +3374,8 @@ static int idecd_release(struct inode * inode, struct file * file) ...@@ -3379,10 +3374,8 @@ static int idecd_release(struct inode * inode, struct file * file)
{ {
struct gendisk *disk = inode->i_bdev->bd_disk; struct gendisk *disk = inode->i_bdev->bd_disk;
struct cdrom_info *info = ide_cd_g(disk); struct cdrom_info *info = ide_cd_g(disk);
ide_drive_t *drive = info->drive;
cdrom_release (&info->devinfo, file); cdrom_release (&info->devinfo, file);
drive->usage--;
ide_cd_put(info); ide_cd_put(info);
......
...@@ -77,6 +77,7 @@ struct ide_disk_obj { ...@@ -77,6 +77,7 @@ struct ide_disk_obj {
ide_driver_t *driver; ide_driver_t *driver;
struct gendisk *disk; struct gendisk *disk;
struct kref kref; struct kref kref;
unsigned int openers; /* protected by BKL for now */
}; };
static DEFINE_MUTEX(idedisk_ref_mutex); static DEFINE_MUTEX(idedisk_ref_mutex);
...@@ -1081,8 +1082,9 @@ static int idedisk_open(struct inode *inode, struct file *filp) ...@@ -1081,8 +1082,9 @@ static int idedisk_open(struct inode *inode, struct file *filp)
drive = idkp->drive; drive = idkp->drive;
drive->usage++; idkp->openers++;
if (drive->removable && drive->usage == 1) {
if (drive->removable && idkp->openers == 1) {
ide_task_t args; ide_task_t args;
memset(&args, 0, sizeof(ide_task_t)); memset(&args, 0, sizeof(ide_task_t));
args.tfRegister[IDE_COMMAND_OFFSET] = WIN_DOORLOCK; args.tfRegister[IDE_COMMAND_OFFSET] = WIN_DOORLOCK;
...@@ -1106,9 +1108,10 @@ static int idedisk_release(struct inode *inode, struct file *filp) ...@@ -1106,9 +1108,10 @@ static int idedisk_release(struct inode *inode, struct file *filp)
struct ide_disk_obj *idkp = ide_disk_g(disk); struct ide_disk_obj *idkp = ide_disk_g(disk);
ide_drive_t *drive = idkp->drive; ide_drive_t *drive = idkp->drive;
if (drive->usage == 1) if (idkp->openers == 1)
ide_cacheflush_p(drive); ide_cacheflush_p(drive);
if (drive->removable && drive->usage == 1) {
if (drive->removable && idkp->openers == 1) {
ide_task_t args; ide_task_t args;
memset(&args, 0, sizeof(ide_task_t)); memset(&args, 0, sizeof(ide_task_t));
args.tfRegister[IDE_COMMAND_OFFSET] = WIN_DOORUNLOCK; args.tfRegister[IDE_COMMAND_OFFSET] = WIN_DOORUNLOCK;
...@@ -1117,7 +1120,8 @@ static int idedisk_release(struct inode *inode, struct file *filp) ...@@ -1117,7 +1120,8 @@ static int idedisk_release(struct inode *inode, struct file *filp)
if (drive->doorlocking && ide_raw_taskfile(drive, &args, NULL)) if (drive->doorlocking && ide_raw_taskfile(drive, &args, NULL))
drive->doorlocking = 0; drive->doorlocking = 0;
} }
drive->usage--;
idkp->openers--;
ide_disk_put(idkp); ide_disk_put(idkp);
......
...@@ -279,6 +279,7 @@ typedef struct ide_floppy_obj { ...@@ -279,6 +279,7 @@ typedef struct ide_floppy_obj {
ide_driver_t *driver; ide_driver_t *driver;
struct gendisk *disk; struct gendisk *disk;
struct kref kref; struct kref kref;
unsigned int openers; /* protected by BKL for now */
/* Current packet command */ /* Current packet command */
idefloppy_pc_t *pc; idefloppy_pc_t *pc;
...@@ -1950,9 +1951,9 @@ static int idefloppy_open(struct inode *inode, struct file *filp) ...@@ -1950,9 +1951,9 @@ static int idefloppy_open(struct inode *inode, struct file *filp)
drive = floppy->drive; drive = floppy->drive;
drive->usage++; floppy->openers++;
if (drive->usage == 1) { if (floppy->openers == 1) {
clear_bit(IDEFLOPPY_FORMAT_IN_PROGRESS, &floppy->flags); clear_bit(IDEFLOPPY_FORMAT_IN_PROGRESS, &floppy->flags);
/* Just in case */ /* Just in case */
...@@ -1970,13 +1971,11 @@ static int idefloppy_open(struct inode *inode, struct file *filp) ...@@ -1970,13 +1971,11 @@ static int idefloppy_open(struct inode *inode, struct file *filp)
** capacity of the drive or begin the format - Sam ** capacity of the drive or begin the format - Sam
*/ */
) { ) {
drive->usage--;
ret = -EIO; ret = -EIO;
goto out_put_floppy; goto out_put_floppy;
} }
if (floppy->wp && (filp->f_mode & 2)) { if (floppy->wp && (filp->f_mode & 2)) {
drive->usage--;
ret = -EROFS; ret = -EROFS;
goto out_put_floppy; goto out_put_floppy;
} }
...@@ -1988,13 +1987,13 @@ static int idefloppy_open(struct inode *inode, struct file *filp) ...@@ -1988,13 +1987,13 @@ static int idefloppy_open(struct inode *inode, struct file *filp)
} }
check_disk_change(inode->i_bdev); check_disk_change(inode->i_bdev);
} else if (test_bit(IDEFLOPPY_FORMAT_IN_PROGRESS, &floppy->flags)) { } else if (test_bit(IDEFLOPPY_FORMAT_IN_PROGRESS, &floppy->flags)) {
drive->usage--;
ret = -EBUSY; ret = -EBUSY;
goto out_put_floppy; goto out_put_floppy;
} }
return 0; return 0;
out_put_floppy: out_put_floppy:
floppy->openers--;
ide_floppy_put(floppy); ide_floppy_put(floppy);
return ret; return ret;
} }
...@@ -2008,7 +2007,7 @@ static int idefloppy_release(struct inode *inode, struct file *filp) ...@@ -2008,7 +2007,7 @@ static int idefloppy_release(struct inode *inode, struct file *filp)
debug_log(KERN_INFO "Reached idefloppy_release\n"); debug_log(KERN_INFO "Reached idefloppy_release\n");
if (drive->usage == 1) { if (floppy->openers == 1) {
/* IOMEGA Clik! drives do not support lock/unlock commands */ /* IOMEGA Clik! drives do not support lock/unlock commands */
if (!test_bit(IDEFLOPPY_CLIK_DRIVE, &floppy->flags)) { if (!test_bit(IDEFLOPPY_CLIK_DRIVE, &floppy->flags)) {
idefloppy_create_prevent_cmd(&pc, 0); idefloppy_create_prevent_cmd(&pc, 0);
...@@ -2017,7 +2016,8 @@ static int idefloppy_release(struct inode *inode, struct file *filp) ...@@ -2017,7 +2016,8 @@ static int idefloppy_release(struct inode *inode, struct file *filp)
clear_bit(IDEFLOPPY_FORMAT_IN_PROGRESS, &floppy->flags); clear_bit(IDEFLOPPY_FORMAT_IN_PROGRESS, &floppy->flags);
} }
drive->usage--;
floppy->openers--;
ide_floppy_put(floppy); ide_floppy_put(floppy);
...@@ -2051,7 +2051,7 @@ static int idefloppy_ioctl(struct inode *inode, struct file *file, ...@@ -2051,7 +2051,7 @@ static int idefloppy_ioctl(struct inode *inode, struct file *file,
prevent = 0; prevent = 0;
/* fall through */ /* fall through */
case CDROM_LOCKDOOR: case CDROM_LOCKDOOR:
if (drive->usage > 1) if (floppy->openers > 1)
return -EBUSY; return -EBUSY;
/* The IOMEGA Clik! Drive doesn't support this command - no room for an eject mechanism */ /* The IOMEGA Clik! Drive doesn't support this command - no room for an eject mechanism */
...@@ -2073,7 +2073,7 @@ static int idefloppy_ioctl(struct inode *inode, struct file *file, ...@@ -2073,7 +2073,7 @@ static int idefloppy_ioctl(struct inode *inode, struct file *file,
if (!(file->f_mode & 2)) if (!(file->f_mode & 2))
return -EPERM; return -EPERM;
if (drive->usage > 1) { if (floppy->openers > 1) {
/* Don't format if someone is using the disk */ /* Don't format if someone is using the disk */
clear_bit(IDEFLOPPY_FORMAT_IN_PROGRESS, clear_bit(IDEFLOPPY_FORMAT_IN_PROGRESS,
......
...@@ -4792,15 +4792,10 @@ static int idetape_open(struct inode *inode, struct file *filp) ...@@ -4792,15 +4792,10 @@ static int idetape_open(struct inode *inode, struct file *filp)
{ {
struct gendisk *disk = inode->i_bdev->bd_disk; struct gendisk *disk = inode->i_bdev->bd_disk;
struct ide_tape_obj *tape; struct ide_tape_obj *tape;
ide_drive_t *drive;
if (!(tape = ide_tape_get(disk))) if (!(tape = ide_tape_get(disk)))
return -ENXIO; return -ENXIO;
drive = tape->drive;
drive->usage++;
return 0; return 0;
} }
...@@ -4808,9 +4803,6 @@ static int idetape_release(struct inode *inode, struct file *filp) ...@@ -4808,9 +4803,6 @@ static int idetape_release(struct inode *inode, struct file *filp)
{ {
struct gendisk *disk = inode->i_bdev->bd_disk; struct gendisk *disk = inode->i_bdev->bd_disk;
struct ide_tape_obj *tape = ide_tape_g(disk); struct ide_tape_obj *tape = ide_tape_g(disk);
ide_drive_t *drive = tape->drive;
drive->usage--;
ide_tape_put(tape); ide_tape_put(tape);
......
...@@ -801,15 +801,10 @@ static int idescsi_ide_open(struct inode *inode, struct file *filp) ...@@ -801,15 +801,10 @@ static int idescsi_ide_open(struct inode *inode, struct file *filp)
{ {
struct gendisk *disk = inode->i_bdev->bd_disk; struct gendisk *disk = inode->i_bdev->bd_disk;
struct ide_scsi_obj *scsi; struct ide_scsi_obj *scsi;
ide_drive_t *drive;
if (!(scsi = ide_scsi_get(disk))) if (!(scsi = ide_scsi_get(disk)))
return -ENXIO; return -ENXIO;
drive = scsi->drive;
drive->usage++;
return 0; return 0;
} }
...@@ -817,9 +812,6 @@ static int idescsi_ide_release(struct inode *inode, struct file *filp) ...@@ -817,9 +812,6 @@ static int idescsi_ide_release(struct inode *inode, struct file *filp)
{ {
struct gendisk *disk = inode->i_bdev->bd_disk; struct gendisk *disk = inode->i_bdev->bd_disk;
struct ide_scsi_obj *scsi = ide_scsi_g(disk); struct ide_scsi_obj *scsi = ide_scsi_g(disk);
ide_drive_t *drive = scsi->drive;
drive->usage--;
ide_scsi_put(scsi); ide_scsi_put(scsi);
......
...@@ -636,7 +636,6 @@ typedef struct ide_drive_s { ...@@ -636,7 +636,6 @@ typedef struct ide_drive_s {
unsigned int bios_cyl; /* BIOS/fdisk/LILO number of cyls */ unsigned int bios_cyl; /* BIOS/fdisk/LILO number of cyls */
unsigned int cyl; /* "real" number of cyls */ unsigned int cyl; /* "real" number of cyls */
unsigned int drive_data; /* use by tuneproc/selectproc */ unsigned int drive_data; /* use by tuneproc/selectproc */
unsigned int usage; /* current "open()" count for drive */
unsigned int failures; /* current failure count */ unsigned int failures; /* current failure count */
unsigned int max_failures; /* maximum allowed failure count */ unsigned int max_failures; /* maximum allowed failure count */
u64 probed_capacity;/* initial reported media capacity (ide-cd only currently) */ u64 probed_capacity;/* initial reported media capacity (ide-cd only currently) */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment