mirror of
https://github.com/FEX-Emu/linux.git
synced 2024-12-18 06:50:08 +00:00
ide: use ->end_request only for private device driver requests
* Move IDE{FLOPPY,TAPE}_ERROR_* defines to <linux/ide.h> and rename them to IDE_DRV_ERROR_*. * Handle ->end_request special cases for floppy/tape media in ide_kill_rq(). * Call ->end_request only for private device driver requests. There should be no functional changes caused by this patch. Acked-by: Borislav Petkov <petkovbb@gmail.com> Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
This commit is contained in:
parent
5e2040fd0a
commit
c152cc1a90
@ -61,9 +61,6 @@
|
||||
*/
|
||||
#define IDEFLOPPY_PC_DELAY (HZ/20) /* default delay for ZIP 100 (50ms) */
|
||||
|
||||
/* Error code returned in rq->errors to the higher part of the driver. */
|
||||
#define IDEFLOPPY_ERROR_GENERAL 101
|
||||
|
||||
/*
|
||||
* Used to finish servicing a request. For read/write requests, we will call
|
||||
* ide_end_request to pass to the next buffer.
|
||||
@ -77,7 +74,7 @@ static int ide_floppy_end_request(ide_drive_t *drive, int uptodate, int nsecs)
|
||||
|
||||
switch (uptodate) {
|
||||
case 0:
|
||||
error = IDEFLOPPY_ERROR_GENERAL;
|
||||
error = IDE_DRV_ERROR_GENERAL;
|
||||
break;
|
||||
|
||||
case 1:
|
||||
@ -183,7 +180,7 @@ static ide_startstop_t idefloppy_issue_pc(ide_drive_t *drive,
|
||||
if (!(pc->flags & PC_FLAG_SUPPRESS_ERROR))
|
||||
ide_floppy_report_error(floppy, pc);
|
||||
/* Giving up */
|
||||
pc->error = IDEFLOPPY_ERROR_GENERAL;
|
||||
pc->error = IDE_DRV_ERROR_GENERAL;
|
||||
|
||||
drive->failed_pc = NULL;
|
||||
drive->pc_callback(drive, 0);
|
||||
|
@ -178,7 +178,12 @@ EXPORT_SYMBOL(ide_complete_rq);
|
||||
|
||||
void ide_kill_rq(ide_drive_t *drive, struct request *rq)
|
||||
{
|
||||
if (rq->rq_disk) {
|
||||
drive->failed_pc = NULL;
|
||||
|
||||
if (drive->media == ide_tape)
|
||||
rq->errors = IDE_DRV_ERROR_GENERAL;
|
||||
|
||||
if (blk_special_request(rq) && rq->rq_disk) {
|
||||
struct ide_driver *drv;
|
||||
|
||||
drv = *(struct ide_driver **)rq->rq_disk->private_data;
|
||||
|
@ -152,11 +152,6 @@ struct idetape_bh {
|
||||
#define IDETAPE_LU_RETENSION_MASK 2
|
||||
#define IDETAPE_LU_EOT_MASK 4
|
||||
|
||||
/* Error codes returned in rq->errors to the higher part of the driver. */
|
||||
#define IDETAPE_ERROR_GENERAL 101
|
||||
#define IDETAPE_ERROR_FILEMARK 102
|
||||
#define IDETAPE_ERROR_EOD 103
|
||||
|
||||
/* Structures related to the SELECT SENSE / MODE SENSE packet commands. */
|
||||
#define IDETAPE_BLOCK_DESCRIPTOR 0
|
||||
#define IDETAPE_CAPABILITIES_PAGE 0x2a
|
||||
@ -422,19 +417,19 @@ static void idetape_analyze_error(ide_drive_t *drive, u8 *sense)
|
||||
}
|
||||
}
|
||||
if (pc->c[0] == READ_6 && (sense[2] & 0x80)) {
|
||||
pc->error = IDETAPE_ERROR_FILEMARK;
|
||||
pc->error = IDE_DRV_ERROR_FILEMARK;
|
||||
pc->flags |= PC_FLAG_ABORT;
|
||||
}
|
||||
if (pc->c[0] == WRITE_6) {
|
||||
if ((sense[2] & 0x40) || (tape->sense_key == 0xd
|
||||
&& tape->asc == 0x0 && tape->ascq == 0x2)) {
|
||||
pc->error = IDETAPE_ERROR_EOD;
|
||||
pc->error = IDE_DRV_ERROR_EOD;
|
||||
pc->flags |= PC_FLAG_ABORT;
|
||||
}
|
||||
}
|
||||
if (pc->c[0] == READ_6 || pc->c[0] == WRITE_6) {
|
||||
if (tape->sense_key == 8) {
|
||||
pc->error = IDETAPE_ERROR_EOD;
|
||||
pc->error = IDE_DRV_ERROR_EOD;
|
||||
pc->flags |= PC_FLAG_ABORT;
|
||||
}
|
||||
if (!(pc->flags & PC_FLAG_ABORT) &&
|
||||
@ -474,7 +469,7 @@ static int idetape_end_request(ide_drive_t *drive, int uptodate, int nr_sects)
|
||||
debug_log(DBG_PROCS, "Enter %s\n", __func__);
|
||||
|
||||
switch (uptodate) {
|
||||
case 0: error = IDETAPE_ERROR_GENERAL; break;
|
||||
case 0: error = IDE_DRV_ERROR_GENERAL; break;
|
||||
case 1: error = 0; break;
|
||||
default: error = uptodate;
|
||||
}
|
||||
@ -669,7 +664,7 @@ static ide_startstop_t idetape_issue_pc(ide_drive_t *drive,
|
||||
tape->ascq);
|
||||
}
|
||||
/* Giving up */
|
||||
pc->error = IDETAPE_ERROR_GENERAL;
|
||||
pc->error = IDE_DRV_ERROR_GENERAL;
|
||||
}
|
||||
drive->failed_pc = NULL;
|
||||
drive->pc_callback(drive, 0);
|
||||
@ -730,7 +725,7 @@ static ide_startstop_t idetape_media_access_finished(ide_drive_t *drive)
|
||||
}
|
||||
pc->error = 0;
|
||||
} else {
|
||||
pc->error = IDETAPE_ERROR_GENERAL;
|
||||
pc->error = IDE_DRV_ERROR_GENERAL;
|
||||
drive->failed_pc = NULL;
|
||||
}
|
||||
drive->pc_callback(drive, 0);
|
||||
@ -1210,7 +1205,7 @@ static int idetape_queue_rw_tail(ide_drive_t *drive, int cmd, int blocks,
|
||||
|
||||
if (tape->merge_bh)
|
||||
idetape_init_merge_buffer(tape);
|
||||
if (errors == IDETAPE_ERROR_GENERAL)
|
||||
if (errors == IDE_DRV_ERROR_GENERAL)
|
||||
return -EIO;
|
||||
return ret;
|
||||
}
|
||||
|
@ -315,12 +315,8 @@ static ide_startstop_t task_error(ide_drive_t *drive, struct request *rq,
|
||||
break;
|
||||
}
|
||||
|
||||
if (sectors > 0) {
|
||||
struct ide_driver *drv;
|
||||
|
||||
drv = *(struct ide_driver **)rq->rq_disk->private_data;
|
||||
drv->end_request(drive, 1, sectors);
|
||||
}
|
||||
if (sectors > 0)
|
||||
ide_end_request(drive, 1, sectors);
|
||||
}
|
||||
return ide_error(drive, s, stat);
|
||||
}
|
||||
@ -337,13 +333,7 @@ void task_end_request(ide_drive_t *drive, struct request *rq, u8 stat)
|
||||
return;
|
||||
}
|
||||
|
||||
if (rq->rq_disk) {
|
||||
struct ide_driver *drv;
|
||||
|
||||
drv = *(struct ide_driver **)rq->rq_disk->private_data;;
|
||||
drv->end_request(drive, 1, rq->nr_sectors);
|
||||
} else
|
||||
ide_end_request(drive, 1, rq->nr_sectors);
|
||||
ide_end_request(drive, 1, rq->nr_sectors);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -40,6 +40,13 @@
|
||||
#define ERROR_RESET 3 /* Reset controller every 4th retry */
|
||||
#define ERROR_RECAL 1 /* Recalibrate every 2nd retry */
|
||||
|
||||
/* Error codes returned in rq->errors to the higher part of the driver. */
|
||||
enum {
|
||||
IDE_DRV_ERROR_GENERAL = 101,
|
||||
IDE_DRV_ERROR_FILEMARK = 102,
|
||||
IDE_DRV_ERROR_EOD = 103,
|
||||
};
|
||||
|
||||
/*
|
||||
* Definitions for accessing IDE controller registers
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user