From 2ce9296ed2d48507b2f190c9b9a02341803aa137 Mon Sep 17 00:00:00 2001 From: wuzhouhui Date: Thu, 10 Jan 2019 14:14:42 +0800 Subject: [PATCH] dix: calculate CRC of metadata after data In the similar codes that for dif (precisely speaking, _dif_generate_copy_split() and _dif_verify_copy_split()), they calculate CRC of metadata after data, so let's make them consistent. Change-Id: I2d725277ab42657ba2e0253ae8cece829fd868b4 Signed-off-by: wuzhouhui Reviewed-on: https://review.gerrithub.io/c/439824 Tested-by: SPDK CI Jenkins Reviewed-by: Shuhei Matsumoto Reviewed-by: Jim Harris Reviewed-by: Changpeng Liu --- lib/util/dif.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/lib/util/dif.c b/lib/util/dif.c index 1d86b5401..04d61e66e 100644 --- a/lib/util/dif.c +++ b/lib/util/dif.c @@ -1038,10 +1038,6 @@ _dix_generate_split(struct _iov_iter *data_iter, struct _iov_iter *md_iter, _iov_iter_get_buf(md_iter, &md_buf, NULL); guard = 0; - if (ctx->dif_flags & SPDK_DIF_GUARD_CHECK) { - guard = spdk_crc16_t10dif(0, md_buf, ctx->guard_interval); - } - offset_in_block = 0; while (offset_in_block < ctx->block_size) { @@ -1056,6 +1052,10 @@ _dix_generate_split(struct _iov_iter *data_iter, struct _iov_iter *md_iter, offset_in_block += data_buf_len; } + if (ctx->dif_flags & SPDK_DIF_GUARD_CHECK) { + guard = spdk_crc16_t10dif(guard, md_buf, ctx->guard_interval); + } + _iov_iter_advance(md_iter, ctx->md_size); _dif_generate(md_buf + ctx->guard_interval, guard, offset_blocks, ctx); @@ -1152,10 +1152,6 @@ _dix_verify_split(struct _iov_iter *data_iter, struct _iov_iter *md_iter, _iov_iter_get_buf(md_iter, &md_buf, NULL); guard = 0; - if (ctx->dif_flags & SPDK_DIF_GUARD_CHECK) { - guard = spdk_crc16_t10dif(0, md_buf, ctx->guard_interval); - } - offset_in_block = 0; while (offset_in_block < ctx->block_size) { @@ -1170,6 +1166,10 @@ _dix_verify_split(struct _iov_iter *data_iter, struct _iov_iter *md_iter, offset_in_block += data_buf_len; } + if (ctx->dif_flags & SPDK_DIF_GUARD_CHECK) { + guard = spdk_crc16_t10dif(guard, md_buf, ctx->guard_interval); + } + _iov_iter_advance(md_iter, ctx->md_size); return _dif_verify(md_buf + ctx->guard_interval, guard, offset_blocks, ctx, err_blk);