Lines Matching refs:brd

55 static struct page *brd_lookup_page(struct brd_device *brd, sector_t sector)  in brd_lookup_page()  argument
73 page = radix_tree_lookup(&brd->brd_pages, idx); in brd_lookup_page()
86 static struct page *brd_insert_page(struct brd_device *brd, sector_t sector) in brd_insert_page() argument
92 page = brd_lookup_page(brd, sector); in brd_insert_page()
115 spin_lock(&brd->brd_lock); in brd_insert_page()
118 if (radix_tree_insert(&brd->brd_pages, idx, page)) { in brd_insert_page()
120 page = radix_tree_lookup(&brd->brd_pages, idx); in brd_insert_page()
124 spin_unlock(&brd->brd_lock); in brd_insert_page()
136 static void brd_free_pages(struct brd_device *brd) in brd_free_pages() argument
145 nr_pages = radix_tree_gang_lookup(&brd->brd_pages, in brd_free_pages()
153 ret = radix_tree_delete(&brd->brd_pages, pos); in brd_free_pages()
171 static int copy_to_brd_setup(struct brd_device *brd, sector_t sector, size_t n) in copy_to_brd_setup() argument
177 if (!brd_insert_page(brd, sector)) in copy_to_brd_setup()
181 if (!brd_insert_page(brd, sector)) in copy_to_brd_setup()
190 static void copy_to_brd(struct brd_device *brd, const void *src, in copy_to_brd() argument
199 page = brd_lookup_page(brd, sector); in copy_to_brd()
210 page = brd_lookup_page(brd, sector); in copy_to_brd()
222 static void copy_from_brd(void *dst, struct brd_device *brd, in copy_from_brd() argument
231 page = brd_lookup_page(brd, sector); in copy_from_brd()
243 page = brd_lookup_page(brd, sector); in copy_from_brd()
256 static int brd_do_bvec(struct brd_device *brd, struct page *page, in brd_do_bvec() argument
264 err = copy_to_brd_setup(brd, sector, len); in brd_do_bvec()
271 copy_from_brd(mem + off, brd, sector, len); in brd_do_bvec()
275 copy_to_brd(brd, mem + off, sector, len); in brd_do_bvec()
285 struct brd_device *brd = bio->bi_disk->private_data; in brd_make_request() local
298 err = brd_do_bvec(brd, bvec.bv_page, len, bvec.bv_offset, in brd_make_request()
315 struct brd_device *brd = bdev->bd_disk->private_data; in brd_rw_page() local
320 err = brd_do_bvec(brd, page, PAGE_SIZE, 0, op, sector); in brd_rw_page()
368 struct brd_device *brd; in brd_alloc() local
371 brd = kzalloc(sizeof(*brd), GFP_KERNEL); in brd_alloc()
372 if (!brd) in brd_alloc()
374 brd->brd_number = i; in brd_alloc()
375 spin_lock_init(&brd->brd_lock); in brd_alloc()
376 INIT_RADIX_TREE(&brd->brd_pages, GFP_ATOMIC); in brd_alloc()
378 brd->brd_queue = blk_alloc_queue(GFP_KERNEL); in brd_alloc()
379 if (!brd->brd_queue) in brd_alloc()
382 blk_queue_make_request(brd->brd_queue, brd_make_request); in brd_alloc()
383 blk_queue_max_hw_sectors(brd->brd_queue, 1024); in brd_alloc()
391 blk_queue_physical_block_size(brd->brd_queue, PAGE_SIZE); in brd_alloc()
392 disk = brd->brd_disk = alloc_disk(max_part); in brd_alloc()
398 disk->private_data = brd; in brd_alloc()
399 disk->queue = brd->brd_queue; in brd_alloc()
409 return brd; in brd_alloc()
412 blk_cleanup_queue(brd->brd_queue); in brd_alloc()
414 kfree(brd); in brd_alloc()
419 static void brd_free(struct brd_device *brd) in brd_free() argument
421 put_disk(brd->brd_disk); in brd_free()
422 blk_cleanup_queue(brd->brd_queue); in brd_free()
423 brd_free_pages(brd); in brd_free()
424 kfree(brd); in brd_free()
429 struct brd_device *brd; in brd_init_one() local
432 list_for_each_entry(brd, &brd_devices, brd_list) { in brd_init_one()
433 if (brd->brd_number == i) in brd_init_one()
437 brd = brd_alloc(i); in brd_init_one()
438 if (brd) { in brd_init_one()
439 add_disk(brd->brd_disk); in brd_init_one()
440 list_add_tail(&brd->brd_list, &brd_devices); in brd_init_one()
444 return brd; in brd_init_one()
447 static void brd_del_one(struct brd_device *brd) in brd_del_one() argument
449 list_del(&brd->brd_list); in brd_del_one()
450 del_gendisk(brd->brd_disk); in brd_del_one()
451 brd_free(brd); in brd_del_one()
456 struct brd_device *brd; in brd_probe() local
461 brd = brd_init_one(MINOR(dev) / max_part, &new); in brd_probe()
462 kobj = brd ? get_disk_and_module(brd->brd_disk) : NULL; in brd_probe()
473 struct brd_device *brd, *next; in brd_init() local
498 brd = brd_alloc(i); in brd_init()
499 if (!brd) in brd_init()
501 list_add_tail(&brd->brd_list, &brd_devices); in brd_init()
506 list_for_each_entry(brd, &brd_devices, brd_list) in brd_init()
507 add_disk(brd->brd_disk); in brd_init()
516 list_for_each_entry_safe(brd, next, &brd_devices, brd_list) { in brd_init()
517 list_del(&brd->brd_list); in brd_init()
518 brd_free(brd); in brd_init()
528 struct brd_device *brd, *next; in brd_exit() local
530 list_for_each_entry_safe(brd, next, &brd_devices, brd_list) in brd_exit()
531 brd_del_one(brd); in brd_exit()