From: Nick Piggin It converts writes to reads and we end up returning the request to the wrong queue. drivers/block/scsi_ioctl.c | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) diff -puN drivers/block/scsi_ioctl.c~cdrom-eject-hang-fix drivers/block/scsi_ioctl.c --- 25/drivers/block/scsi_ioctl.c~cdrom-eject-hang-fix 2003-06-27 18:18:29.000000000 -0700 +++ 25-akpm/drivers/block/scsi_ioctl.c 2003-06-27 18:18:29.000000000 -0700 @@ -450,7 +450,7 @@ int scsi_cmd_ioctl(struct block_device * close = 1; case CDROMEJECT: rq = blk_get_request(q, WRITE, __GFP_WAIT); - rq->flags = REQ_BLOCK_PC; + rq->flags |= REQ_BLOCK_PC; rq->data = NULL; rq->data_len = 0; rq->timeout = BLK_DEFAULT_TIMEOUT; _