Lines Matching full:layout
39 * that are defined by the pnfs-objects layout STD.
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
153 * The desired layout looks like this, with the extra_allocation in _ore_get_io_state()
234 ios->layout = layout; in _ore_get_io_state()
256 int ore_get_rw_state(struct ore_layout *layout, struct ore_components *oc, in ore_get_rw_state() argument
261 unsigned numdevs = layout->group_width * layout->mirrors_p1; in ore_get_rw_state()
265 if (layout->parity && length) { in ore_get_rw_state()
266 unsigned data_devs = layout->group_width - layout->parity; in ore_get_rw_state()
267 unsigned stripe_size = layout->stripe_unit * data_devs; in ore_get_rw_state()
268 unsigned pages_in_unit = layout->stripe_unit / PAGE_SIZE; in ore_get_rw_state()
277 num_raid_units = num_stripes * layout->parity; in ore_get_rw_state()
287 num_raid_units += layout->group_width; in ore_get_rw_state()
296 ret = _ore_get_io_state(layout, oc, numdevs, sgs_per_dev, max_par_pages, in ore_get_rw_state()
306 ore_calc_stripe_info(layout, offset, length, &ios->si); in ore_get_rw_state()
310 if (layout->parity) in ore_get_rw_state()
325 int ore_get_io_state(struct ore_layout *layout, struct ore_components *oc, in ore_get_io_state() argument
328 return _ore_get_io_state(layout, oc, oc->numdevs, 0, 0, pios); in ore_get_io_state()
540 void ore_calc_stripe_info(struct ore_layout *layout, u64 file_offset, in ore_calc_stripe_info() argument
543 u32 stripe_unit = layout->stripe_unit; in ore_calc_stripe_info()
544 u32 group_width = layout->group_width; in ore_calc_stripe_info()
545 u64 group_depth = layout->group_depth; in ore_calc_stripe_info()
546 u32 parity = layout->parity; in ore_calc_stripe_info()
551 u64 S = T * layout->group_count; in ore_calc_stripe_info()
593 si->dev *= layout->mirrors_p1; in ore_calc_stripe_info()
594 si->par_dev *= layout->mirrors_p1; in ore_calc_stripe_info()
624 (ios->layout->group_width - ios->layout->parity) / in _ore_add_stripe_unit()
625 ios->layout->group_width; in _ore_add_stripe_unit()
627 bio_size *= (ios->layout->stripe_unit / PAGE_SIZE); in _ore_add_stripe_unit()
683 for (do_parity = ios->layout->parity; do_parity; --do_parity) { in _add_parity_units()
704 ios->layout->group_width; in _add_parity_units()
714 unsigned stripe_unit = ios->layout->stripe_unit; in _prepare_for_striping()
715 unsigned mirrors_p1 = ios->layout->mirrors_p1; in _prepare_for_striping()
716 unsigned group_width = ios->layout->group_width; in _prepare_for_striping()
725 ios->numdevs = ios->layout->mirrors_p1; in _prepare_for_striping()
771 si->cur_comp = group_width - ios->layout->parity; in _prepare_for_striping()
785 ios->layout->parity * mirrors_p1) % in _prepare_for_striping()
854 unsigned last_comp = cur_comp + ios->layout->mirrors_p1; in _write_mirror()
910 BUG_ON((ios->layout->group_width > 1) && in _write_mirror()
912 ios->layout->stripe_unit)); in _write_mirror()
961 for (i = 0; i < ios->numdevs; i += ios->layout->mirrors_p1) { in ore_write()
982 first_dev = per_dev->dev + first_dev % ios->layout->mirrors_p1; in _ore_read_mirror()
1035 for (i = 0; i < ios->numdevs; i += ios->layout->mirrors_p1) { in ore_read()
1071 int last_comp = cur_comp + ios->layout->mirrors_p1; in _truncate_mirrors()
1100 static void _calc_trunk_info(struct ore_layout *layout, u64 file_offset, in _calc_trunk_info() argument
1103 unsigned stripe_unit = layout->stripe_unit; in _calc_trunk_info()
1105 ore_calc_stripe_info(layout, file_offset, 0, &ti->si); in _calc_trunk_info()
1110 ti->first_group_dev = ti->si.dev - (ti->si.dev % layout->group_width); in _calc_trunk_info()
1111 ti->nex_group_dev = ti->first_group_dev + layout->group_width; in _calc_trunk_info()
1114 int ore_truncate(struct ore_layout *layout, struct ore_components *oc, in ore_truncate() argument
1125 ret = ore_get_io_state(layout, oc, &ios); in ore_truncate()
1129 _calc_trunk_info(ios->layout, size, &ti); in ore_truncate()
1150 ios->layout->stripe_unit - ti.si.unit_off; in ore_truncate()
1162 ret = _truncate_mirrors(ios, i * ios->layout->mirrors_p1, in ore_truncate()