Lines Matching refs:brd

32  * the pages containing the block device's contents. A brd page's ->index is
50 * Look up and return a brd's page for a given sector.
52 static struct page *brd_lookup_page(struct brd_device *brd, sector_t sector)
58 page = xa_load(&brd->brd_pages, idx);
68 static int brd_insert_page(struct brd_device *brd, sector_t sector, gfp_t gfp)
74 page = brd_lookup_page(brd, sector);
82 xa_lock(&brd->brd_pages);
87 cur = __xa_cmpxchg(&brd->brd_pages, idx, NULL, page, gfp);
95 brd->brd_nr_pages++;
98 xa_unlock(&brd->brd_pages);
107 static void brd_free_pages(struct brd_device *brd)
112 xa_for_each(&brd->brd_pages, idx, page) {
117 xa_destroy(&brd->brd_pages);
123 static int copy_to_brd_setup(struct brd_device *brd, sector_t sector, size_t n,
131 ret = brd_insert_page(brd, sector, gfp);
136 ret = brd_insert_page(brd, sector, gfp);
142 * Copy n bytes from src to the brd starting at sector. Does not sleep.
144 static void copy_to_brd(struct brd_device *brd, const void *src,
153 page = brd_lookup_page(brd, sector);
164 page = brd_lookup_page(brd, sector);
174 * Copy n bytes to dst from the brd starting at sector. Does not sleep.
176 static void copy_from_brd(void *dst, struct brd_device *brd,
185 page = brd_lookup_page(brd, sector);
197 page = brd_lookup_page(brd, sector);
210 static int brd_do_bvec(struct brd_device *brd, struct page *page,
224 err = copy_to_brd_setup(brd, sector, len, gfp);
231 copy_from_brd(mem + off, brd, sector, len);
235 copy_to_brd(brd, mem + off, sector, len);
245 struct brd_device *brd = bio->bi_bdev->bd_disk->private_data;
258 err = brd_do_bvec(brd, bvec.bv_page, len, bvec.bv_offset,
284 MODULE_PARM_DESC(rd_nr, "Maximum number of brd devices");
317 struct brd_device *brd;
322 list_for_each_entry(brd, &brd_devices, brd_list)
323 if (brd->brd_number == i)
325 brd = kzalloc(sizeof(*brd), GFP_KERNEL);
326 if (!brd)
328 brd->brd_number = i;
329 list_add_tail(&brd->brd_list, &brd_devices);
331 xa_init(&brd->brd_pages);
336 &brd->brd_nr_pages);
338 disk = brd->brd_disk = blk_alloc_disk(NUMA_NO_NODE);
346 disk->private_data = brd;
372 list_del(&brd->brd_list);
373 kfree(brd);
384 struct brd_device *brd, *next;
388 list_for_each_entry_safe(brd, next, &brd_devices, brd_list) {
389 del_gendisk(brd->brd_disk);
390 put_disk(brd->brd_disk);
391 brd_free_pages(brd);
392 list_del(&brd->brd_list);
393 kfree(brd);
410 pr_info("brd: max_part can't be larger than %d, reset max_part = %d.\n",
431 * brd module now has a feature to instantiate underlying device
436 * (2) User can further extend brd devices by create dev node themselves
450 pr_info("brd: module loaded\n");
456 pr_info("brd: module NOT loaded !!!\n");
466 pr_info("brd: module unloaded\n");