Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6902a533 authored by Bartlomiej Zolnierkiewicz's avatar Bartlomiej Zolnierkiewicz
Browse files

ide: pass error value to ide_complete_rq()



Set rq->errors at ide_complete_rq() call sites and then pass
error value to ide_complete_rq().

[ Some rq->errors assignments look really wrong but this patch
  leaves them alone to not introduce too many changes at once. ]

There should be no functional changes caused by this patch.

Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
parent 37245aab
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -402,9 +402,10 @@ static ide_startstop_t ide_pc_intr(ide_drive_t *drive)
		if (uptodate == 0)
			drive->failed_pc = NULL;

		if (blk_special_request(rq))
		if (blk_special_request(rq)) {
			rq->errors = 0;
			ide_complete_rq(drive, 0);
		else
		} else
			ide_end_request(drive, uptodate, 0);

		return ide_stopped;
+3 −2
Original line number Diff line number Diff line
@@ -123,17 +123,18 @@ ide_startstop_t ide_error(ide_drive_t *drive, const char *msg, u8 stat)

	/* retry only "normal" I/O: */
	if (!blk_fs_request(rq)) {
		rq->errors = 1;
		if (rq->cmd_type == REQ_TYPE_ATA_TASKFILE) {
			struct ide_cmd *cmd = rq->special;

			if (cmd)
				ide_complete_cmd(drive, cmd, stat, err);
		} else if (blk_pm_request(rq)) {
			rq->errors = 1;
			ide_complete_pm_rq(drive, rq);
			return ide_stopped;
		}
		ide_complete_rq(drive, err);
		rq->errors = err;
		ide_complete_rq(drive, err ? -EIO : 0);
		return ide_stopped;
	}

+1 −1
Original line number Diff line number Diff line
@@ -260,7 +260,7 @@ static ide_startstop_t ide_floppy_do_request(ide_drive_t *drive,
			printk(KERN_ERR PFX "%s: I/O error\n", drive->name);

		if (blk_special_request(rq)) {
			rq->errors = IDE_DRV_ERROR_GENERAL;
			rq->errors = 0;
			ide_complete_rq(drive, 0);
			return ide_stopped;
		} else
+9 −10
Original line number Diff line number Diff line
@@ -144,17 +144,14 @@ void ide_complete_cmd(ide_drive_t *drive, struct ide_cmd *cmd, u8 stat, u8 err)
		kfree(cmd);
}

void ide_complete_rq(ide_drive_t *drive, u8 err)
void ide_complete_rq(ide_drive_t *drive, int error)
{
	ide_hwif_t *hwif = drive->hwif;
	struct request *rq = hwif->rq;

	hwif->rq = NULL;

	rq->errors = err;

	if (unlikely(blk_end_request(rq, (rq->errors ? -EIO : 0),
				     blk_rq_bytes(rq))))
	if (unlikely(blk_end_request(rq, error, blk_rq_bytes(rq))))
		BUG();
}
EXPORT_SYMBOL(ide_complete_rq);
@@ -166,14 +163,15 @@ void ide_kill_rq(ide_drive_t *drive, struct request *rq)

	drive->failed_pc = NULL;

	if ((media == ide_floppy && drv_req) || media == ide_tape)
		rq->errors = IDE_DRV_ERROR_GENERAL;

	if ((media == ide_floppy || media == ide_tape) && drv_req)
	if ((media == ide_floppy || media == ide_tape) && drv_req) {
		rq->errors = 0;
		ide_complete_rq(drive, 0);
	else
	} else {
		if (media == ide_tape)
			rq->errors = IDE_DRV_ERROR_GENERAL;
		ide_end_request(drive, 0, 0);
	}
}

static void ide_tf_set_specify_cmd(ide_drive_t *drive, struct ide_taskfile *tf)
{
@@ -312,6 +310,7 @@ static ide_startstop_t execute_drive_cmd (ide_drive_t *drive,
#ifdef DEBUG
 	printk("%s: DRIVE_CMD (null)\n", drive->name);
#endif
	rq->errors = 0;
	ide_complete_rq(drive, 0);

 	return ide_stopped;
+1 −1
Original line number Diff line number Diff line
@@ -774,8 +774,8 @@ static ide_startstop_t idetape_do_request(ide_drive_t *drive,
		if (rq != postponed_rq) {
			printk(KERN_ERR "ide-tape: ide-tape.c bug - "
					"Two DSC requests were queued\n");
			rq->errors = IDE_DRV_ERROR_GENERAL;
			drive->failed_pc = NULL;
			rq->errors = 0;
			ide_complete_rq(drive, 0);
			return ide_stopped;
		}
Loading