Lines Matching refs:bs
127 static void bio_put_slab(struct bio_set *bs) in bio_put_slab() argument
135 if (bs->bio_slab == bio_slabs[i].slab) { in bio_put_slab()
247 struct bio_set *bs = bio->bi_pool; in bio_free() local
252 if (bs) { in bio_free()
254 bvec_free(bs->bvec_pool, bio->bi_io_vec, BIO_POOL_IDX(bio)); in bio_free()
260 p -= bs->front_pad; in bio_free()
262 mempool_free(p, bs->bio_pool); in bio_free()
342 struct bio_set *bs = container_of(work, struct bio_set, rescue_work); in bio_alloc_rescue() local
346 spin_lock(&bs->rescue_lock); in bio_alloc_rescue()
347 bio = bio_list_pop(&bs->rescue_list); in bio_alloc_rescue()
348 spin_unlock(&bs->rescue_lock); in bio_alloc_rescue()
357 static void punt_bios_to_rescuer(struct bio_set *bs) in punt_bios_to_rescuer() argument
377 bio_list_add(bio->bi_pool == bs ? &punt : &nopunt, bio); in punt_bios_to_rescuer()
382 bio_list_add(bio->bi_pool == bs ? &punt : &nopunt, bio); in punt_bios_to_rescuer()
385 spin_lock(&bs->rescue_lock); in punt_bios_to_rescuer()
386 bio_list_merge(&bs->rescue_list, &punt); in punt_bios_to_rescuer()
387 spin_unlock(&bs->rescue_lock); in punt_bios_to_rescuer()
389 queue_work(bs->rescue_workqueue, &bs->rescue_work); in punt_bios_to_rescuer()
427 struct bio *bio_alloc_bioset(gfp_t gfp_mask, int nr_iovecs, struct bio_set *bs) in bio_alloc_bioset() argument
437 if (!bs) { in bio_alloc_bioset()
448 if (WARN_ON_ONCE(!bs->bvec_pool && nr_iovecs > 0)) in bio_alloc_bioset()
476 p = mempool_alloc(bs->bio_pool, gfp_mask); in bio_alloc_bioset()
478 punt_bios_to_rescuer(bs); in bio_alloc_bioset()
480 p = mempool_alloc(bs->bio_pool, gfp_mask); in bio_alloc_bioset()
483 front_pad = bs->front_pad; in bio_alloc_bioset()
494 bvl = bvec_alloc(gfp_mask, nr_iovecs, &idx, bs->bvec_pool); in bio_alloc_bioset()
496 punt_bios_to_rescuer(bs); in bio_alloc_bioset()
498 bvl = bvec_alloc(gfp_mask, nr_iovecs, &idx, bs->bvec_pool); in bio_alloc_bioset()
509 bio->bi_pool = bs; in bio_alloc_bioset()
516 mempool_free(p, bs->bio_pool); in bio_alloc_bioset()
606 struct bio *bio_clone_fast(struct bio *bio, gfp_t gfp_mask, struct bio_set *bs) in bio_clone_fast() argument
610 b = bio_alloc_bioset(gfp_mask, 0, bs); in bio_clone_fast()
641 struct bio_set *bs) in bio_clone_bioset() argument
669 bio = bio_alloc_bioset(gfp_mask, bio_segments(bio_src), bs); in bio_clone_bioset()
1811 gfp_t gfp, struct bio_set *bs) in bio_split() argument
1823 split = bio_clone_bioset(bio, gfp, bs); in bio_split()
1825 split = bio_clone_fast(bio, gfp, bs); in bio_split()
1876 void bioset_free(struct bio_set *bs) in bioset_free() argument
1878 if (bs->rescue_workqueue) in bioset_free()
1879 destroy_workqueue(bs->rescue_workqueue); in bioset_free()
1881 if (bs->bio_pool) in bioset_free()
1882 mempool_destroy(bs->bio_pool); in bioset_free()
1884 if (bs->bvec_pool) in bioset_free()
1885 mempool_destroy(bs->bvec_pool); in bioset_free()
1887 bioset_integrity_free(bs); in bioset_free()
1888 bio_put_slab(bs); in bioset_free()
1890 kfree(bs); in bioset_free()
1899 struct bio_set *bs; in __bioset_create() local
1901 bs = kzalloc(sizeof(*bs), GFP_KERNEL); in __bioset_create()
1902 if (!bs) in __bioset_create()
1905 bs->front_pad = front_pad; in __bioset_create()
1907 spin_lock_init(&bs->rescue_lock); in __bioset_create()
1908 bio_list_init(&bs->rescue_list); in __bioset_create()
1909 INIT_WORK(&bs->rescue_work, bio_alloc_rescue); in __bioset_create()
1911 bs->bio_slab = bio_find_or_create_slab(front_pad + back_pad); in __bioset_create()
1912 if (!bs->bio_slab) { in __bioset_create()
1913 kfree(bs); in __bioset_create()
1917 bs->bio_pool = mempool_create_slab_pool(pool_size, bs->bio_slab); in __bioset_create()
1918 if (!bs->bio_pool) in __bioset_create()
1922 bs->bvec_pool = biovec_create_pool(pool_size); in __bioset_create()
1923 if (!bs->bvec_pool) in __bioset_create()
1927 bs->rescue_workqueue = alloc_workqueue("bioset", WQ_MEM_RECLAIM, 0); in __bioset_create()
1928 if (!bs->rescue_workqueue) in __bioset_create()
1931 return bs; in __bioset_create()
1933 bioset_free(bs); in __bioset_create()