Lines Matching refs:layout
49 int ore_verify_layout(unsigned total_comps, struct ore_layout *layout) in ore_verify_layout() argument
53 switch (layout->raid_algorithm) { in ore_verify_layout()
55 layout->parity = 0; in ore_verify_layout()
58 layout->parity = 1; in ore_verify_layout()
61 layout->parity = 2; in ore_verify_layout()
66 layout->raid_algorithm); in ore_verify_layout()
69 if (0 != (layout->stripe_unit & ~PAGE_MASK)) { in ore_verify_layout()
72 _LLU(layout->stripe_unit), PAGE_SIZE); in ore_verify_layout()
75 if (layout->group_width) { in ore_verify_layout()
76 if (!layout->group_depth) { in ore_verify_layout()
80 if (total_comps < (layout->group_width * layout->mirrors_p1)) { in ore_verify_layout()
83 total_comps, layout->group_width, in ore_verify_layout()
84 layout->mirrors_p1); in ore_verify_layout()
87 layout->group_count = total_comps / layout->mirrors_p1 / in ore_verify_layout()
88 layout->group_width; in ore_verify_layout()
90 if (layout->group_depth) { in ore_verify_layout()
93 _LLU(layout->group_depth)); in ore_verify_layout()
95 layout->group_width = total_comps / layout->mirrors_p1; in ore_verify_layout()
96 layout->group_depth = -1; in ore_verify_layout()
97 layout->group_count = 1; in ore_verify_layout()
100 stripe_length = (u64)layout->group_width * layout->stripe_unit; in ore_verify_layout()
107 layout->max_io_length = in ore_verify_layout()
108 (BIO_MAX_PAGES_KMALLOC * PAGE_SIZE - layout->stripe_unit) * in ore_verify_layout()
109 (layout->group_width - layout->parity); in ore_verify_layout()
110 if (layout->parity) { in ore_verify_layout()
112 (layout->group_width - layout->parity) * in ore_verify_layout()
113 layout->stripe_unit; in ore_verify_layout()
115 layout->max_io_length /= stripe_length; in ore_verify_layout()
116 layout->max_io_length *= stripe_length; in ore_verify_layout()
118 ORE_DBGMSG("max_io_length=0x%lx\n", layout->max_io_length); in ore_verify_layout()
143 int _ore_get_io_state(struct ore_layout *layout, in _ore_get_io_state() argument
220 ios->layout = layout; in _ore_get_io_state()
242 int ore_get_rw_state(struct ore_layout *layout, struct ore_components *oc, in ore_get_rw_state() argument
247 unsigned numdevs = layout->group_width * layout->mirrors_p1; in ore_get_rw_state()
251 if (layout->parity && length) { in ore_get_rw_state()
252 unsigned data_devs = layout->group_width - layout->parity; in ore_get_rw_state()
253 unsigned stripe_size = layout->stripe_unit * data_devs; in ore_get_rw_state()
254 unsigned pages_in_unit = layout->stripe_unit / PAGE_SIZE; in ore_get_rw_state()
263 num_raid_units = num_stripes * layout->parity; in ore_get_rw_state()
273 num_raid_units += layout->group_width; in ore_get_rw_state()
282 ret = _ore_get_io_state(layout, oc, numdevs, sgs_per_dev, max_par_pages, in ore_get_rw_state()
292 ore_calc_stripe_info(layout, offset, length, &ios->si); in ore_get_rw_state()
296 if (layout->parity) in ore_get_rw_state()
311 int ore_get_io_state(struct ore_layout *layout, struct ore_components *oc, in ore_get_io_state() argument
314 return _ore_get_io_state(layout, oc, oc->numdevs, 0, 0, pios); in ore_get_io_state()
526 void ore_calc_stripe_info(struct ore_layout *layout, u64 file_offset, in ore_calc_stripe_info() argument
529 u32 stripe_unit = layout->stripe_unit; in ore_calc_stripe_info()
530 u32 group_width = layout->group_width; in ore_calc_stripe_info()
531 u64 group_depth = layout->group_depth; in ore_calc_stripe_info()
532 u32 parity = layout->parity; in ore_calc_stripe_info()
537 u64 S = T * layout->group_count; in ore_calc_stripe_info()
579 si->dev *= layout->mirrors_p1; in ore_calc_stripe_info()
580 si->par_dev *= layout->mirrors_p1; in ore_calc_stripe_info()
610 (ios->layout->group_width - ios->layout->parity) / in _ore_add_stripe_unit()
611 ios->layout->group_width; in _ore_add_stripe_unit()
613 bio_size *= (ios->layout->stripe_unit / PAGE_SIZE); in _ore_add_stripe_unit()
669 for (do_parity = ios->layout->parity; do_parity; --do_parity) { in _add_parity_units()
690 ios->layout->group_width; in _add_parity_units()
700 unsigned stripe_unit = ios->layout->stripe_unit; in _prepare_for_striping()
701 unsigned mirrors_p1 = ios->layout->mirrors_p1; in _prepare_for_striping()
702 unsigned group_width = ios->layout->group_width; in _prepare_for_striping()
711 ios->numdevs = ios->layout->mirrors_p1; in _prepare_for_striping()
757 si->cur_comp = group_width - ios->layout->parity; in _prepare_for_striping()
771 ios->layout->parity * mirrors_p1) % in _prepare_for_striping()
840 unsigned last_comp = cur_comp + ios->layout->mirrors_p1; in _write_mirror()
896 BUG_ON((ios->layout->group_width > 1) && in _write_mirror()
898 ios->layout->stripe_unit)); in _write_mirror()
947 for (i = 0; i < ios->numdevs; i += ios->layout->mirrors_p1) { in ore_write()
968 first_dev = per_dev->dev + first_dev % ios->layout->mirrors_p1; in _ore_read_mirror()
1021 for (i = 0; i < ios->numdevs; i += ios->layout->mirrors_p1) { in ore_read()
1057 int last_comp = cur_comp + ios->layout->mirrors_p1; in _truncate_mirrors()
1086 static void _calc_trunk_info(struct ore_layout *layout, u64 file_offset, in _calc_trunk_info() argument
1089 unsigned stripe_unit = layout->stripe_unit; in _calc_trunk_info()
1091 ore_calc_stripe_info(layout, file_offset, 0, &ti->si); in _calc_trunk_info()
1096 ti->first_group_dev = ti->si.dev - (ti->si.dev % layout->group_width); in _calc_trunk_info()
1097 ti->nex_group_dev = ti->first_group_dev + layout->group_width; in _calc_trunk_info()
1100 int ore_truncate(struct ore_layout *layout, struct ore_components *oc, in ore_truncate() argument
1111 ret = ore_get_io_state(layout, oc, &ios); in ore_truncate()
1115 _calc_trunk_info(ios->layout, size, &ti); in ore_truncate()
1136 ios->layout->stripe_unit - ti.si.unit_off; in ore_truncate()
1148 ret = _truncate_mirrors(ios, i * ios->layout->mirrors_p1, in ore_truncate()