diff options
author | Gvozden Neskovic <[email protected]> | 2016-08-24 15:42:51 +0200 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2016-11-29 14:34:33 -0800 |
commit | a206522c4fd31f03f14ba174d6159b72acfae0a9 (patch) | |
tree | 2a8249e9364491132f0de85883a3e8dded406e72 /include | |
parent | b0be93e81a4ace96a799d3705da6832633eb4325 (diff) |
ABD changes for vectorized RAIDZ
* userspace: aligned buffers. Minimum of 32B alignment is
needed for AVX2. Kernel buffers are aligned 512B or more.
* add abd_get_offset_size() interface
* abd_iter_map(): fix calculation of iter_mapsize
* add abd_raidz_gen_iterate() and abd_raidz_rec_iterate()
Signed-off-by: Gvozden Neskovic <[email protected]>
Diffstat (limited to 'include')
-rw-r--r-- | include/sys/abd.h | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/include/sys/abd.h b/include/sys/abd.h index 6e3530aec..321c64713 100644 --- a/include/sys/abd.h +++ b/include/sys/abd.h @@ -84,6 +84,7 @@ abd_t *abd_alloc_for_io(size_t, boolean_t); abd_t *abd_alloc_sametype(abd_t *, size_t); void abd_free(abd_t *); abd_t *abd_get_offset(abd_t *, size_t); +abd_t *abd_get_offset_size(abd_t *, size_t, size_t); abd_t *abd_get_from_buf(void *, size_t); void abd_put(abd_t *); @@ -119,6 +120,15 @@ unsigned int abd_scatter_bio_map_off(struct bio *, abd_t *, unsigned int, unsigned long abd_nr_pages_off(abd_t *, unsigned int, size_t); #endif +void abd_raidz_gen_iterate(abd_t **cabds, abd_t *dabd, + ssize_t csize, ssize_t dsize, const unsigned parity, + void (*func_raidz_gen)(void **, const void *, size_t, size_t)); +void abd_raidz_rec_iterate(abd_t **cabds, abd_t **tabds, + ssize_t tsize, const unsigned parity, + void (*func_raidz_rec)(void **t, const size_t tsize, void **c, + const unsigned *mul), + const unsigned *mul); + /* * Wrappers for calls with offsets of 0 */ |