Skip to contentSkip to conversation

2.5.44-ac4 scsi CDROMEJECT problem

PATCH Nyk Tarr 2 participants 5 messages Oct 27, 2002 – Oct 28, 2002 Block layer

lore
Share & tools
lore

Nyk Tarr

author
#0 lore raw

Hi

This patch of Jens Axboe was missing from 2.5.44-ac4. Was this by design or accidental?

Quoted 2 lines

Irk you are on SCSI, yes you need this incremental patch for that to work. Sorry about that, I've put up 16b which contains this.

block/scsi_ioctl.c renamed from block/scsi_ioctl.c~ +2 -0
@@ -319,6 +319,8 @@
 		case CDROMEJECT:
 			rq = blk_get_request(q, WRITE, __GFP_WAIT);
 			rq->flags = REQ_BLOCK_PC;
+			rq->rq_dev = to_kdev_t(bdev->bd_dev);
+			rq->rq_disk = bdev->bd_disk;
 			rq->data = NULL;
 			rq->data_len = 0;
 			rq->timeout = BLK_DEFAULT_TIMEOUT;
Quoted 2 lines
Signature · 1 line
Jens Axboe
Signature · 3 lines
/__
\_|\/
   /\
#1 lore raw
Quoted 4 lines · Nyk Tarr

Hi

This patch of Jens Axboe was missing from 2.5.44-ac4. Was this by design or accidental?

Please check blk_do_rq(), it sets rq_dev and rq_disk. So it's indeed intentional. Since you ask, do you have problems ejecting?

Signature · 1 line
Jens Axboe
author
#2 lore raw
Quoted 8 lines · Jens Axboe
Quoted 4 lines · Nyk Tarr

Hi

This patch of Jens Axboe was missing from 2.5.44-ac4. Was this by design or accidental?

Please check blk_do_rq(), it sets rq_dev and rq_disk. So it's indeed intentional. Since you ask, do you have problems ejecting?

Yup.

I can only see rq -> rq_dev being set in sg_io(), but then again, you could write the amount of C I know on a small postage stamp. ^_^

recompiled with the two assignments in under CDROMEJECT it works fine.

Thanks

Signature · 3 lines
/__
\_|\/
   /\
#3 lore raw
Quoted 10 lines · Nyk Tarr
Quoted 8 lines · Jens Axboe
Quoted 4 lines · Nyk Tarr

Hi

This patch of Jens Axboe was missing from 2.5.44-ac4. Was this by design or accidental?

Please check blk_do_rq(), it sets rq_dev and rq_disk. So it's indeed intentional. Since you ask, do you have problems ejecting?

Quoted 6 lines

Yup.

I can only see rq -> rq_dev being set in sg_io(), but then again, you could write the amount of C I know on a small postage stamp. ^_^

recompiled with the two assignments in under CDROMEJECT it works fine.

I just checked the -ac4 patch, and bits are indeed missing. The recommended patch against -ac4 is:

block/scsi_ioctl.c renamed from block/scsi_ioctl.c~ +6 -6
@@ -37,11 +37,14 @@
 
 #define BLK_DEFAULT_TIMEOUT	(60 * HZ)
 
-int blk_do_rq(request_queue_t *q, struct request *rq)
+int blk_do_rq(request_queue_t *q, struct block_device *bdev, struct request *rq)
 {
 	DECLARE_COMPLETION(wait);
 	int err = 0;
 
+	rq->rq_dev = to_kdev_t(bdev->bd_dev);
+	rq->rq_disk = bdev->bd_disk;
+
 	/*
 	 * we need an extra reference to the request, so we can look at
 	 * it after io completion
@@ -221,9 +224,6 @@
 	if (writing)
 		rq->flags |= REQ_RW;
 
-	rq->rq_dev = to_kdev_t(bdev->bd_dev);
-	rq->rq_disk = bdev->bd_disk;
-
 	rq->hard_nr_sectors = rq->nr_sectors = nr_sectors;
 	rq->hard_cur_sectors = rq->current_nr_sectors = nr_sectors;
 
@@ -253,7 +253,7 @@
 	 * return -EIO if we didn't transfer all data, caller can look at
 	 * residual count to find out how much did succeed
 	 */
-	err = blk_do_rq(q, rq);
+	err = blk_do_rq(q, bdev, rq);
 	if (rq->data_len > 0)
 		err = -EIO;
 		
@@ -325,7 +325,7 @@
 			memset(rq->cmd, 0, sizeof(rq->cmd));
 			rq->cmd[0] = GPCMD_START_STOP_UNIT;
 			rq->cmd[4] = 0x02 + (close != 0);
-			err = blk_do_rq(q, rq);
+			err = blk_do_rq(q, bdev, rq);
 			blk_put_request(rq);
 			break;
 		default:

I think Alan dropped this last bit (or maybe it didn't apply for him, dunno), at least I know it was sent.

Signature · 1 line
Jens Axboe
author
#4 lore raw
Quoted 21 lines · Jens Axboe
Quoted 10 lines · Nyk Tarr
Quoted 8 lines · Jens Axboe
Quoted 4 lines · Nyk Tarr

Hi

This patch of Jens Axboe was missing from 2.5.44-ac4. Was this by design or accidental?

Please check blk_do_rq(), it sets rq_dev and rq_disk. So it's indeed intentional. Since you ask, do you have problems ejecting?

Quoted 6 lines

Yup.

I can only see rq -> rq_dev being set in sg_io(), but then again, you could write the amount of C I know on a small postage stamp. ^_^

recompiled with the two assignments in under CDROMEJECT it works fine.

I just checked the -ac4 patch, and bits are indeed missing. The recommended patch against -ac4 is:

[snip]

Quoted 3 lines

I think Alan dropped this last bit (or maybe it didn't apply for him, dunno), at least I know it was sent.

Applies clean here. I'll try it later.

Thanks.
Nyk

Signature · 3 lines
/__
\_|\/
   /\