[<prev] [next>] [day] [month] [year] [list]
Message-ID: <c9d24a620912241658h6e3bca3eoaccb4d2f1f0b108a@mail.gmail.com>
Date: Thu, 24 Dec 2009 18:58:36 -0600
From: Abhishek <abhishek.rajimwale@...il.com>
To: linux-kernel@...r.kernel.org
Subject: Problem in layered block driver using request queues
Hi All,
I am developing a pseudo driver in linux-2.6.13. My pseudo block
driver sits on top of the underlying hard disk driver and exposes a
block device (/dev/mydev). I mount ext3 on this exposed device, run
benchmarks, and monitor the requests.
I am using a request queue in my pseudo device driver and service the
requests in the queue in a while loop like -
while( (req = elv_next_request(queue)) != NULL)
{
XXXXX
}
Here, I am cloning the bios in requests and notifying completion
(after all bios in a request complete) using the documented functions
(end_that_request_* and blkdev_dequeue_request).
THE PROBLEM:
My problem is that for longer benchmarks, the underlying SCSI layer
(in scsi_lib.c) gives error indications like:
-------------------------------------------------------------------------------------------------
Incorrect number of segments after building list
Dec 22 17:33:25 kernel: [ 729.237018] counted 32, received 6
Dec 22 17:33:25 kernel: [ 729.237020] req nr_sec 256, cur_nr_sec 8
.....
------------------------------------------------------------------------------------------------------
After this, my bi_end_io function gets called with bios NOT uptodate
and after a while the system freezes.
Can anybody help me with some useful pointers..
thanks a lot,
Abhishek.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists