[dm-devel] making rq_init functionality available to modules
egoggin at emc.com
egoggin at emc.com
Tue Aug 8 15:38:19 UTC 2006
Alasdair,
This patch exports rq_init in block/ll_rw_blk.c to be usable by GPL modules.
The initialization of a block request structure as done by rq_init is a
useful feature for use whenever one wishes to utilize a pre-allocated block
request structure in order to avoid deadlock potential of allocating one via
get_request.
Another patch will make use of rq_init to initialize messages sent by the
EMC CLARiiON dm-multipath hardware handler. Without this patch, I can
easily reproduce a deadlock caused by the EMC CLARiiON hardware handler
trying to allocate a write request structure from a target queue which is
over its write queue threshold. With this patch, I have yet to reproduce
this problem.
This capability could instead be implemented by making rq_init an inline
function available in blkdev.h. Not sure which is best.
Ed
*** block/ll_rw_blk.c.orig Thu Aug 3 04:03:45 2006
--- block/ll_rw_blk.c Thu Aug 3 04:53:07 2006
***************
*** 277,283 ****
EXPORT_SYMBOL(blk_queue_make_request);
! static inline void rq_init(request_queue_t *q, struct request *rq)
{
INIT_LIST_HEAD(&rq->queuelist);
INIT_LIST_HEAD(&rq->donelist);
--- 277,283 ----
EXPORT_SYMBOL(blk_queue_make_request);
! void rq_init(request_queue_t *q, struct request *rq)
{
INIT_LIST_HEAD(&rq->queuelist);
INIT_LIST_HEAD(&rq->donelist);
***************
*** 300,305 ****
--- 300,307 ----
rq->completion_data = NULL;
}
+ EXPORT_SYMBOL_GPL(rq_init);
+
/**
* blk_queue_ordered - does this queue support ordered writes
* @q: the request queue
*** include/linux/blkdev.h.orig Thu Aug 3 04:27:26 2006
--- include/linux/blkdev.h Thu Aug 3 04:29:24 2006
***************
*** 112,117 ****
--- 112,119 ----
struct request;
typedef void (rq_end_io_fn)(struct request *, int);
+ void rq_init(request_queue_t *q, struct request *rq);
+
struct request_list {
int count[2];
int starved[2];
More information about the dm-devel
mailing list