mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-22 02:27:36 +03:00
Illumos 5746 - more checksumming in zfs send
5746 more checksumming in zfs send Reviewed by: Christopher Siden <christopher.siden@delphix.com> Reviewed by: George Wilson <george.wilson@delphix.com> Reviewed by: Bayard Bell <buffer.g.overflow@gmail.com> Approved by: Albert Lee <trisk@omniti.com> References: https://www.illumos.org/issues/5746 https://github.com/illumos/illumos-gate/commit/98110f0 https://github.com/zfsonlinux/zfs/issues/905 Porting notes: - Minor conflicts due to: - https://github.com/zfsonlinux/zfs/commit/2024041 - https://github.com/zfsonlinux/zfs/commit/044baf0 - https://github.com/zfsonlinux/zfs/commit/88904bb - Fix ISO C90 warnings (-Werror=declaration-after-statement) - arc_buf_t *abuf; - dmu_buf_t *bonus; - zio_cksum_t cksum_orig; - zio_cksum_t *cksump; - Fix format '%llx' format specifier warning - Align message in zstreamdump safe_malloc() with upstream Ported-by: kernelOfTruth kerneloftruth@gmail.com Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Closes #3611
This commit is contained in:
committed by
Brian Behlendorf
parent
43b4935e53
commit
37f8a8835a
@@ -446,6 +446,19 @@ _NOTE(CONSTCOND) } while (0)
|
||||
((zc1).zc_word[2] - (zc2).zc_word[2]) | \
|
||||
((zc1).zc_word[3] - (zc2).zc_word[3])))
|
||||
|
||||
#define ZIO_CHECKSUM_IS_ZERO(zc) \
|
||||
(0 == ((zc)->zc_word[0] | (zc)->zc_word[1] | \
|
||||
(zc)->zc_word[2] | (zc)->zc_word[3]))
|
||||
|
||||
#define ZIO_CHECKSUM_BSWAP(zcp) \
|
||||
{ \
|
||||
(zcp)->zc_word[0] = BSWAP_64((zcp)->zc_word[0]); \
|
||||
(zcp)->zc_word[1] = BSWAP_64((zcp)->zc_word[1]); \
|
||||
(zcp)->zc_word[2] = BSWAP_64((zcp)->zc_word[2]); \
|
||||
(zcp)->zc_word[3] = BSWAP_64((zcp)->zc_word[3]); \
|
||||
}
|
||||
|
||||
|
||||
#define DVA_IS_VALID(dva) (DVA_GET_ASIZE(dva) != 0)
|
||||
|
||||
#define ZIO_SET_CHECKSUM(zcp, w0, w1, w2, w3) \
|
||||
|
||||
+17
-1
@@ -20,7 +20,7 @@
|
||||
*/
|
||||
/*
|
||||
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2013 by Delphix. All rights reserved.
|
||||
* Copyright (c) 2012, 2014 by Delphix. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef _SYS_ZFS_IOCTL_H
|
||||
@@ -237,6 +237,22 @@ typedef struct dmu_replay_record {
|
||||
uint32_t drr_psize; /* compr. (real) size of payload */
|
||||
/* (possibly compressed) content follows */
|
||||
} drr_write_embedded;
|
||||
|
||||
/*
|
||||
* Nore: drr_checksum is overlaid with all record types
|
||||
* except DRR_BEGIN. Therefore its (non-pad) members
|
||||
* must not overlap with members from the other structs.
|
||||
* We accomplish this by putting its members at the very
|
||||
* end of the struct.
|
||||
*/
|
||||
struct drr_checksum {
|
||||
uint64_t drr_pad[34];
|
||||
/*
|
||||
* fletcher-4 checksum of everything preceding the
|
||||
* checksum.
|
||||
*/
|
||||
zio_cksum_t drr_checksum;
|
||||
} drr_checksum;
|
||||
} drr_u;
|
||||
} dmu_replay_record_t;
|
||||
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
*/
|
||||
/*
|
||||
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2014 by Delphix. All rights reserved.
|
||||
*/
|
||||
|
||||
#ifndef _SYS_ZIO_CHECKSUM_H
|
||||
@@ -34,13 +35,13 @@ extern "C" {
|
||||
/*
|
||||
* Signature for checksum functions.
|
||||
*/
|
||||
typedef void zio_checksum_t(const void *data, uint64_t size, zio_cksum_t *zcp);
|
||||
typedef void zio_checksum_func_t(const void *, uint64_t, zio_cksum_t *);
|
||||
|
||||
/*
|
||||
* Information about each checksum function.
|
||||
*/
|
||||
typedef const struct zio_checksum_info {
|
||||
zio_checksum_t *ci_func[2]; /* checksum function for each byteorder */
|
||||
zio_checksum_func_t *ci_func[2]; /* checksum function per byteorder */
|
||||
int ci_correctable; /* number of correctable bits */
|
||||
int ci_eck; /* uses zio embedded checksum? */
|
||||
int ci_dedup; /* strong enough for dedup? */
|
||||
@@ -61,7 +62,7 @@ extern zio_checksum_info_t zio_checksum_table[ZIO_CHECKSUM_FUNCTIONS];
|
||||
/*
|
||||
* Checksum routines.
|
||||
*/
|
||||
extern zio_checksum_t zio_checksum_SHA256;
|
||||
extern zio_checksum_func_t zio_checksum_SHA256;
|
||||
|
||||
extern void zio_checksum_compute(zio_t *zio, enum zio_checksum checksum,
|
||||
void *data, uint64_t size);
|
||||
|
||||
Reference in New Issue
Block a user