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

Commit e654bc43 authored by Boaz Harrosh's avatar Boaz Harrosh Committed by Jens Axboe
Browse files

[PATCH] fix request->cmd == INT cases



 - I have unearthed very old bugs in stale drivers that still
   used request->cmd as a READ|WRITE int
 - This patch is maybe a proof that these drivers have not been
   used for a long time. Should they be removed completely?

Drivers that currently do not work for sure:
 drivers/acorn/block/fd1772.c |    2 +-
 drivers/acorn/block/mfmhd.c  |    8 ++++----
 drivers/cdrom/aztcd.c        |    2 +-
 drivers/cdrom/cm206.c        |    2 +-
 drivers/cdrom/gscd.c         |    2 +-
 drivers/cdrom/mcdx.c         |    2 +-
 drivers/cdrom/optcd.c        |    2 +-
 drivers/cdrom/sjcd.c         |    2 +-

Drivers with cosmetic fixes only:
  b/drivers/block/amiflop.c
  b/drivers/block/nbd.c
  b/drivers/ide/legacy/hd.c

Signed-off-by: default avatarBoaz Harrosh <bharrosh@panasas.com>
Signed-off-by: default avatarJens Axboe <jens.axboe@oracle.com>
parent 9cff3b38
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -1246,7 +1246,7 @@ static void redo_fd_request(void)
	del_timer(&motor_off_timer);
	del_timer(&motor_off_timer);


	ReqCnt = 0;
	ReqCnt = 0;
	ReqCmd = CURRENT->cmd;
	ReqCmd = rq_data_dir(CURRENT);
	ReqBlock = CURRENT->sector;
	ReqBlock = CURRENT->sector;
	ReqBuffer = CURRENT->buffer;
	ReqBuffer = CURRENT->buffer;
	setup_req_params(drive);
	setup_req_params(drive);
+3 −10
Original line number Original line Diff line number Diff line
@@ -439,7 +439,7 @@ static void mfm_rw_intr(void)
	   a choice of command end or some data which is ready to be collected */
	   a choice of command end or some data which is ready to be collected */
	/* I think we have to transfer data while the interrupt line is on and its
	/* I think we have to transfer data while the interrupt line is on and its
	   not any other type of interrupt */
	   not any other type of interrupt */
	if (CURRENT->cmd == WRITE) {
	if (rq_data_dir(CURRENT) == WRITE) {
		extern void hdc63463_writedma(void);
		extern void hdc63463_writedma(void);
		if ((hdc63463_dataleft <= 0) && (!(mfm_status & STAT_CED))) {
		if ((hdc63463_dataleft <= 0) && (!(mfm_status & STAT_CED))) {
			printk("mfm_rw_intr: Apparent DMA write request when no more to DMA\n");
			printk("mfm_rw_intr: Apparent DMA write request when no more to DMA\n");
@@ -799,7 +799,7 @@ static void issue_request(unsigned int block, unsigned int nsect,
	raw_cmd.head = start_head;
	raw_cmd.head = start_head;
	raw_cmd.cylinder = track / p->heads;
	raw_cmd.cylinder = track / p->heads;
	raw_cmd.cmdtype = CURRENT->cmd;
	raw_cmd.cmdtype = CURRENT->cmd;
	raw_cmd.cmdcode = CURRENT->cmd == WRITE ? CMD_WD : CMD_RD;
	raw_cmd.cmdcode = rq_data_dir(CURRENT) == WRITE ? CMD_WD : CMD_RD;
	raw_cmd.cmddata[0] = dev + 1;	/* DAG: +1 to get US */
	raw_cmd.cmddata[0] = dev + 1;	/* DAG: +1 to get US */
	raw_cmd.cmddata[1] = raw_cmd.head;
	raw_cmd.cmddata[1] = raw_cmd.head;
	raw_cmd.cmddata[2] = raw_cmd.cylinder >> 8;
	raw_cmd.cmddata[2] = raw_cmd.cylinder >> 8;
@@ -830,7 +830,7 @@ static void issue_request(unsigned int block, unsigned int nsect,
	hdc63463_dataleft = nsect * 256;	/* Better way? */
	hdc63463_dataleft = nsect * 256;	/* Better way? */


	DBG("mfm%c: %sing: CHS=%d/%d/%d, sectors=%d, buffer=0x%08lx (%p)\n",
	DBG("mfm%c: %sing: CHS=%d/%d/%d, sectors=%d, buffer=0x%08lx (%p)\n",
	     raw_cmd.dev + 'a', (CURRENT->cmd == READ) ? "read" : "writ",
	     raw_cmd.dev + 'a', rq_data_dir(CURRENT) == READ ? "read" : "writ",
		       raw_cmd.cylinder,
		       raw_cmd.cylinder,
		       raw_cmd.head,
		       raw_cmd.head,
	    raw_cmd.sector, nsect, (unsigned long) Copy_buffer, CURRENT);
	    raw_cmd.sector, nsect, (unsigned long) Copy_buffer, CURRENT);
@@ -917,13 +917,6 @@ static void mfm_request(void)


		DBG("mfm_request: block after offset=%d\n", block);
		DBG("mfm_request: block after offset=%d\n", block);


		if (CURRENT->cmd != READ && CURRENT->cmd != WRITE) {
			printk("unknown mfm-command %d\n", CURRENT->cmd);
			end_request(CURRENT, 0);
			Busy = 0;
			printk("mfm: continue 4\n");
			continue;
		}
		issue_request(block, nsect, CURRENT);
		issue_request(block, nsect, CURRENT);


		break;
		break;
+1 −1
Original line number Original line Diff line number Diff line
@@ -1363,7 +1363,7 @@ static void redo_fd_request(void)
#ifdef DEBUG
#ifdef DEBUG
		printk("fd: sector %ld + %d requested for %s\n",
		printk("fd: sector %ld + %d requested for %s\n",
		       CURRENT->sector,cnt,
		       CURRENT->sector,cnt,
		       (CURRENT->cmd==READ)?"read":"write");
		       (rq_data_dir(CURRENT) == READ) ? "read" : "write");
#endif
#endif
		block = CURRENT->sector + cnt;
		block = CURRENT->sector + cnt;
		if ((int)block > floppy->blocks) {
		if ((int)block > floppy->blocks) {
+1 −1
Original line number Original line Diff line number Diff line
@@ -416,7 +416,7 @@ static void nbd_clear_que(struct nbd_device *lo)
/*
/*
 * We always wait for result of write, for now. It would be nice to make it optional
 * We always wait for result of write, for now. It would be nice to make it optional
 * in future
 * in future
 * if ((req->cmd == WRITE) && (lo->flags & NBD_WRITE_NOCHK)) 
 * if ((rq_data_dir(req) == WRITE) && (lo->flags & NBD_WRITE_NOCHK))
 *   { printk( "Warning: Ignoring result!\n"); nbd_end_request( req ); }
 *   { printk( "Warning: Ignoring result!\n"); nbd_end_request( req ); }
 */
 */


+1 −1
Original line number Original line Diff line number Diff line
@@ -229,7 +229,7 @@ static struct request_queue *azt_queue;
static int current_valid(void)
static int current_valid(void)
{
{
        return CURRENT &&
        return CURRENT &&
		CURRENT->cmd == READ &&
		rq_data_dir(CURRENT) == READ &&
		CURRENT->sector != -1;
		CURRENT->sector != -1;
}
}


Loading