Re: 2.5.44-ac4 scsi CDROMEJECT problem

From: Jens Axboe (axboe@suse.de)
Date: Mon Oct 28 2002 - 05:57:54 EST


On Mon, Oct 28 2002, Nyk Tarr wrote:
> On Mon, Oct 28, 2002 at 09:15:07AM +0100, Jens Axboe wrote:
> > On Sun, Oct 27 2002, Nyk Tarr wrote:
> > > 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.

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

--- drivers/block/scsi_ioctl.c~ 2002-10-25 19:00:11.000000000 +0200
+++ drivers/block/scsi_ioctl.c 2002-10-25 19:01:15.000000000 +0200
@@ -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.

-- 
Jens Axboe

- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Thu Oct 31 2002 - 22:00:36 EST