Lines Matching refs:sp2d
72 struct __stripe_pages_2d *sp2d; in _sp2d_alloc() local
128 *psp2d = sp2d = kzalloc(alloc_size, GFP_KERNEL); in _sp2d_alloc()
129 if (unlikely(!sp2d)) { in _sp2d_alloc()
136 __a1pa = (char *)sp2d + sizeof_stripe_pages_2d; in _sp2d_alloc()
142 struct __1_page_stripe *stripe = &sp2d->_1p_stripes[i]; in _sp2d_alloc()
171 sp2d->parity = parity; in _sp2d_alloc()
172 sp2d->data_devs = data_devs; in _sp2d_alloc()
173 sp2d->pages_in_unit = pages_in_unit; in _sp2d_alloc()
177 static void _sp2d_reset(struct __stripe_pages_2d *sp2d, in _sp2d_reset() argument
180 unsigned data_devs = sp2d->data_devs; in _sp2d_reset()
181 unsigned group_width = data_devs + sp2d->parity; in _sp2d_reset()
184 if (!sp2d->needed) in _sp2d_reset()
188 for (p = sp2d->pages_in_unit - 1; p >= 0; --p) { in _sp2d_reset()
189 struct __1_page_stripe *_1ps = &sp2d->_1p_stripes[p]; in _sp2d_reset()
199 for (p = 0; p < sp2d->pages_in_unit; p++) { in _sp2d_reset()
200 struct __1_page_stripe *_1ps = &sp2d->_1p_stripes[p]; in _sp2d_reset()
207 sp2d->needed = false; in _sp2d_reset()
210 static void _sp2d_free(struct __stripe_pages_2d *sp2d) in _sp2d_free() argument
214 if (!sp2d) in _sp2d_free()
217 for (i = 0; i < sp2d->pages_in_unit; ++i) { in _sp2d_free()
218 if (sp2d->_1p_stripes[i].alloc) in _sp2d_free()
219 kfree(sp2d->_1p_stripes[i].pages); in _sp2d_free()
222 kfree(sp2d); in _sp2d_free()
225 static unsigned _sp2d_min_pg(struct __stripe_pages_2d *sp2d) in _sp2d_min_pg() argument
229 for (p = 0; p < sp2d->pages_in_unit; p++) { in _sp2d_min_pg()
230 struct __1_page_stripe *_1ps = &sp2d->_1p_stripes[p]; in _sp2d_min_pg()
239 static unsigned _sp2d_max_pg(struct __stripe_pages_2d *sp2d) in _sp2d_max_pg() argument
243 for (p = sp2d->pages_in_unit - 1; p >= 0; --p) { in _sp2d_max_pg()
244 struct __1_page_stripe *_1ps = &sp2d->_1p_stripes[p]; in _sp2d_max_pg()
253 static void _gen_xor_unit(struct __stripe_pages_2d *sp2d) in _gen_xor_unit() argument
258 if (sp2d->parity == 1) in _gen_xor_unit()
261 for (p = 0; p < sp2d->pages_in_unit; p++) { in _gen_xor_unit()
262 struct __1_page_stripe *_1ps = &sp2d->_1p_stripes[p]; in _gen_xor_unit()
270 if (sp2d->parity == 1) in _gen_xor_unit()
271 _1ps->tx = async_xor(_1ps->pages[sp2d->data_devs], in _gen_xor_unit()
272 _1ps->pages, 0, sp2d->data_devs, in _gen_xor_unit()
276 sp2d->data_devs + sp2d->parity, in _gen_xor_unit()
280 for (p = 0; p < sp2d->pages_in_unit; p++) { in _gen_xor_unit()
281 struct __1_page_stripe *_1ps = &sp2d->_1p_stripes[p]; in _gen_xor_unit()
290 void _ore_add_stripe_page(struct __stripe_pages_2d *sp2d, in _ore_add_stripe_page() argument
295 sp2d->needed = true; in _ore_add_stripe_page()
297 _1ps = &sp2d->_1p_stripes[si->cur_pg]; in _ore_add_stripe_page()
301 si->cur_pg = (si->cur_pg + 1) % sp2d->pages_in_unit; in _ore_add_stripe_page()
361 unsigned sgs_per_dev = ios->sp2d->pages_in_unit + 2; in _alloc_read_4_write()
396 ios->sp2d->pages_in_unit); in _add_to_r4w()
399 ios->sp2d->pages_in_unit); in _add_to_r4w()
450 page = ios->sp2d->_1p_stripes[p].pages[c]; in _add_to_r4w_last_page()
507 struct __stripe_pages_2d *sp2d = ios->sp2d; in _read_4_write_first_stripe() local
509 unsigned c, p, min_p = sp2d->pages_in_unit, max_p = -1; in _read_4_write_first_stripe()
514 min_p = _sp2d_min_pg(sp2d); in _read_4_write_first_stripe()
515 max_p = _sp2d_max_pg(sp2d); in _read_4_write_first_stripe()
525 struct __1_page_stripe *_1ps = &sp2d->_1p_stripes[p]; in _read_4_write_first_stripe()
550 offset += (sp2d->pages_in_unit - p) * PAGE_SIZE; in _read_4_write_first_stripe()
560 struct __stripe_pages_2d *sp2d = ios->sp2d; in _read_4_write_last_stripe() local
564 unsigned c, p, min_p = sp2d->pages_in_unit, max_p = -1; in _read_4_write_last_stripe()
580 if (min_p == sp2d->pages_in_unit) { in _read_4_write_last_stripe()
582 min_p = _sp2d_min_pg(sp2d); in _read_4_write_last_stripe()
583 max_p = _sp2d_max_pg(sp2d); in _read_4_write_last_stripe()
590 struct __1_page_stripe *_1ps = &sp2d->_1p_stripes[p]; in _read_4_write_last_stripe()
610 if (p == (sp2d->pages_in_unit - 1)) { in _read_4_write_last_stripe()
672 struct __stripe_pages_2d *sp2d = ios->sp2d; in _ore_add_parity_unit() local
679 si->cur_pg = _sp2d_min_pg(sp2d); in _ore_add_parity_unit()
680 num_pages = _sp2d_max_pg(sp2d) + 1 - si->cur_pg; in _ore_add_parity_unit()
703 BUG_ON(si->cur_comp < sp2d->data_devs); in _ore_add_parity_unit()
704 BUG_ON(si->cur_pg + num_pages > sp2d->pages_in_unit); in _ore_add_parity_unit()
712 _gen_xor_unit(sp2d); in _ore_add_parity_unit()
713 _sp2d_reset(sp2d, ios->r4w, ios->private); in _ore_add_parity_unit()
726 layout->parity, &ios->sp2d)) { in _ore_post_alloc_raid_stuff()
735 if (ios->sp2d) { /* writing and raid */ in _ore_free_raid_stuff()
747 _sp2d_reset(ios->sp2d, ios->r4w, ios->private); in _ore_free_raid_stuff()
748 _sp2d_free(ios->sp2d); in _ore_free_raid_stuff()