参照元†
- struct request_queue *q
- struct bio **bio_orig
返り値†
#ifdef CONFIG_BOUNCE
(...略...)
extern void blk_queue_bounce(struct request_queue *q, struct bio **bio);
- CONFIG_BOUNCE が定義されている場合は、
別の場所で関数が実装される。
#else
(...略...)
static inline void blk_queue_bounce(struct request_queue *q, struct bio **bio)
{
}
- CONFIG_BOUNCE が定義されていない場合は何もしない。
#endif /* CONFIG_MMU */
CONFIG_BOUNCE が定義されている場合†
void blk_queue_bounce(struct request_queue *q, struct bio **bio_orig)
{
mempool_t *pool;
/*
* Data-less bio, nothing to bounce
*/
if (bio_empty_barrier(*bio_orig))
return;
/*
* for non-isa bounce case, just check if the bounce pfn is equal
* to or bigger than the highest pfn in the system -- in that case,
* don't waste time iterating over bio segments
*/
if (!(q->bounce_gfp & GFP_DMA)) {
if (q->bounce_pfn >= blk_max_pfn)
return;
pool = page_pool;
} else {
BUG_ON(!isa_page_pool);
pool = isa_page_pool;
}
/*
* slow path
*/
__blk_queue_bounce(q, bio_orig, pool);
}
EXPORT_SYMBOL(blk_queue_bounce);
CONFIG_BOUNCE が定義されていない場合†
コメント†