lkml.org 
[lkml]   [2000]   [Sep]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
SubjectRe: sbpcd bug in 2.4.0...
On Thu, Sep 21 2000, ismael ripoll wrote:
> The problem seems to be originatied by the new block devices
> interface..

Right

> The bug Is that in the function sbpcd_end_request
> the value of "req->q" is NULL.. and then:
>
> list_add(&req->queue, &req->q->queue_head); << FAILS >>

And I don't see why it should do this. It would make more sense
to just leave the current request in the queue, and let end_request
deal with dequeueing when it is done.

Could you try this patch? Completely untested and note even compiled :)

--
* Jens Axboe <axboe@suse.de>
* SuSE Labs
--- /opt/kernel/linux-2.4.0-test9-pre5/drivers/cdrom/sbpcd.c Mon Sep 11 02:49:27 2000
+++ drivers/cdrom/sbpcd.c Thu Sep 21 16:27:09 2000
@@ -4864,10 +4864,6 @@
*
*/
#undef DEBUG_GTL
-static inline void sbpcd_end_request(struct request *req, int uptodate) {
- list_add(&req->queue, &req->q->queue_head);
- end_request(uptodate);
-}
/*==========================================================================*/
/*
* I/O request routine, called from Linux kernel.
@@ -4902,12 +4898,11 @@
#endif
INIT_REQUEST;
req=CURRENT; /* take out our request so no other */
- blkdev_dequeue_request(req); /* task can fuck it up GTL */

if (req->rq_status == RQ_INACTIVE)
- sbpcd_end_request(req, 0);
+ end_request(req, 0);
if (req -> sector == -1)
- sbpcd_end_request(req, 0);
+ end_request(req, 0);
spin_unlock_irq(&io_request_lock);

down(&ioctl_read_sem);
@@ -4949,7 +4944,7 @@
#endif
up(&ioctl_read_sem);
spin_lock_irq(&io_request_lock);
- sbpcd_end_request(req, 1);
+ end_request(req, 1);
goto request_loop;
}

@@ -4990,7 +4985,7 @@
#endif
up(&ioctl_read_sem);
spin_lock_irq(&io_request_lock);
- sbpcd_end_request(req, 1);
+ end_request(req, 1);
goto request_loop;
}
}
@@ -5006,7 +5001,7 @@
up(&ioctl_read_sem);
sbp_sleep(0); /* wait a bit, try again */
spin_lock_irq(&io_request_lock);
- sbpcd_end_request(req, 0);
+ end_request(req, 0);
goto request_loop;
}
/*==========================================================================*/
@@ -5815,7 +5810,6 @@
#endif MODULE
}
blk_init_queue(BLK_DEFAULT_QUEUE(MAJOR_NR), DEVICE_REQUEST);
- blk_queue_headactive(BLK_DEFAULT_QUEUE(MAJOR_NR), 0);
read_ahead[MAJOR_NR] = buffers * (CD_FRAMESIZE / 512);

request_region(CDo_command,4,major_name);
\
 
 \ /
  Last update: 2005-03-22 12:38    [W:0.044 / U:7.392 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site