mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-17 20:25:19 +00:00
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: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
This commit is contained in:
parent
7b77d864af
commit
c94964a455
6 changed files with 22 additions and 42 deletions
|
@ -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)
|
||||||
{
|
{
|
||||||
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 {
|
||||||
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)
|
||||||
|
|
||||||
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)
|
||||||
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)
|
||||||
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 {
|
||||||
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)
|
||||||
|
|
||||||
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)
|
||||||
** 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)
|
||||||
}
|
}
|
||||||
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)
|
||||||
|
|
||||||
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)
|
||||||
|
|
||||||
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,
|
||||||
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,
|
||||||
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)
|
||||||
{
|
{
|
||||||
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)
|
||||||
{
|
{
|
||||||
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)
|
||||||
{
|
{
|
||||||
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)
|
||||||
{
|
{
|
||||||
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 {
|
||||||
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) */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue