bio_alloc_bioset — allocate a bio for I/O
struct bio * bio_alloc_bioset ( | gfp_t gfp_mask, |
int nr_iovecs, | |
struct bio_set * bs) ; |
gfp_mask
the GFP_ mask given to the slab allocator
nr_iovecs
number of iovecs to pre-allocate
bs
the bio_set to allocate from.
If bs
is NULL, uses kmalloc
to allocate the bio; else the allocation is
backed by the bs
's mempool.
When bs
is not NULL, if __GFP_WAIT
is set then bio_alloc will always be
able to allocate a bio. This is due to the mempool guarantees. To make this
work, callers must never allocate more than 1 bio at a time from this pool.
Callers that need to allocate more than 1 bio must always submit the
previously allocated bio for IO before attempting to allocate a new one.
Failure to do so can cause deadlocks under memory pressure.
Note that when running under generic_make_request
(i.e. any block
driver), bios are not submitted until after you return - see the code in
generic_make_request
that converts recursion into iteration, to prevent
stack overflows.
This would normally mean allocating multiple bios under
generic_make_request
would be susceptible to deadlocks, but we have
deadlock avoidance code that resubmits any blocked bios from a rescuer
thread.
However, we do not guarantee forward progress for allocations from other
mempools. Doing multiple allocations from the same mempool under
generic_make_request
should be avoided - instead, use bio_set's front_pad
for per bio allocations.