mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-22 02:27:36 +03:00
Use fletcher_4 routines natively with abd_iterate_func()
This patch adds the necessary infrastructure for ABD to make use of the vectorized fletcher 4 routines. - export ABD compatible interface from fletcher_4 - add ABD fletcher_4 tests for data and metadata ABD types. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Original-patch-by: Gvozden Neskovic <neskovic@gmail.com> Signed-off-by: David Quigley <david.quigley@intel.com> Closes #5589
This commit is contained in:
committed by
Brian Behlendorf
parent
544b8053db
commit
2fe36b0bfb
@@ -29,6 +29,7 @@
|
||||
|
||||
#include <sys/zio.h>
|
||||
#include <zfeature_common.h>
|
||||
#include <zfs_fletcher.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@@ -57,6 +58,28 @@ typedef enum zio_checksum_flags {
|
||||
ZCHECKSUM_FLAG_NOPWRITE = (1 << 5)
|
||||
} zio_checksum_flags_t;
|
||||
|
||||
typedef enum {
|
||||
ZIO_CHECKSUM_NATIVE,
|
||||
ZIO_CHECKSUM_BYTESWAP
|
||||
} zio_byteorder_t;
|
||||
|
||||
typedef struct zio_abd_checksum_data {
|
||||
zio_byteorder_t acd_byteorder;
|
||||
fletcher_4_ctx_t *acd_ctx;
|
||||
zio_cksum_t *acd_zcp;
|
||||
void *acd_private;
|
||||
} zio_abd_checksum_data_t;
|
||||
|
||||
typedef void zio_abd_checksum_init_t(zio_abd_checksum_data_t *);
|
||||
typedef void zio_abd_checksum_fini_t(zio_abd_checksum_data_t *);
|
||||
typedef int zio_abd_checksum_iter_t(void *, size_t, void *);
|
||||
|
||||
typedef const struct zio_abd_checksum_func {
|
||||
zio_abd_checksum_init_t *acf_init;
|
||||
zio_abd_checksum_fini_t *acf_fini;
|
||||
zio_abd_checksum_iter_t *acf_iter;
|
||||
} zio_abd_checksum_func_t;
|
||||
|
||||
/*
|
||||
* Information about each checksum function.
|
||||
*/
|
||||
@@ -99,6 +122,10 @@ extern zio_checksum_t abd_checksum_edonr_byteswap;
|
||||
extern zio_checksum_tmpl_init_t abd_checksum_edonr_tmpl_init;
|
||||
extern zio_checksum_tmpl_free_t abd_checksum_edonr_tmpl_free;
|
||||
|
||||
extern zio_abd_checksum_func_t fletcher_4_abd_ops;
|
||||
extern zio_checksum_t abd_fletcher_4_native;
|
||||
extern zio_checksum_t abd_fletcher_4_byteswap;
|
||||
|
||||
extern int zio_checksum_equal(spa_t *, blkptr_t *, enum zio_checksum,
|
||||
void *, uint64_t, uint64_t, zio_bad_cksum_t *);
|
||||
extern void zio_checksum_compute(zio_t *, enum zio_checksum,
|
||||
|
||||
Reference in New Issue
Block a user