Boaz Harrosh wrote:
On 04/03/2009 12:58 PM, Jeff Garzik wrote:
Jens Axboe wrote:
This wont work, GFP_NOIO inside the queue lock. You are also only
cloning the front bio, what happens if you have > 1 bio on the request?
You seem to dequeue the request and complete all of it, regardless of
whether bio->bi_size == blk_rq_bytes(rq). I'm assuming you have to clone
because of how the osd_req_{read,write} works, so I'd suggest storing
the byte size in your osdblk_request and only completing that in
osdblk_end_request(). Then do a rq_for_each_bio() look in there, and
only dequeue if you manage to start an osd request for each of them,
THEN moving on to the next request.
There is nothing preventing from issuing a linked bio list. The only thing
is that osd_read/write looks at the first bio for total size.
If the first bio->bi_size does not specify the full length of the chain
then we should add another parameter to osd_read/write for that.
The original idea was to specifically allow chained bios.
Please advise?
As passed to us from the block layer, there is nothing special about the
size of the first bio, AFAIK.
This seems like a libosd bug? If you want to support chained bio's, I
would presume you would either walk the list and sum all sizes, or in
some other way input the total request size?
Jeff
--
To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html