dif, dix: remove unnecessary _iov_iter_cont() check

Because we have called _are_iovs_valid() to ensure that all blocks are
covered by iovec, and we process iovec compactly and orderly, so we
don't need to do _iov_iter_cont() check.

Since all callee are removed, so reomve definition of _iov_iter_cont()
as well.

While here, add an assertion in _iov_iter_advance() to detect
unexpected error.

Change-Id: I6b6077bafbf7ec18f14ee2835d3b99199b5e559b
Signed-off-by: wuzhouhui <wuzhouhui@kingsoft.com>
Reviewed-on: https://review.gerrithub.io/c/439869
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-by: Changpeng Liu <changpeng.liu@intel.com>
Reviewed-by: Darek Stojaczyk <dariusz.stojaczyk@intel.com>
This commit is contained in:
wuzhouhui 2019-01-10 19:52:53 +08:00 committed by Jim Harris
parent 1c2163b944
commit 4086464172
2 changed files with 23 additions and 36 deletions

View File

@ -57,18 +57,13 @@ _iov_iter_init(struct _iov_iter *i, struct iovec *iovs, int iovcnt)
i->iov_offset = 0; i->iov_offset = 0;
} }
static inline bool
_iov_iter_cont(struct _iov_iter *i)
{
return i->iovcnt != 0;
}
static inline void static inline void
_iov_iter_advance(struct _iov_iter *i, uint32_t step) _iov_iter_advance(struct _iov_iter *i, uint32_t step)
{ {
i->iov_offset += step; i->iov_offset += step;
if (i->iov_offset == i->iov->iov_len) { if (i->iov_offset == i->iov->iov_len) {
i->iov++; i->iov++;
assert(i->iovcnt > 0);
i->iovcnt--; i->iovcnt--;
i->iov_offset = 0; i->iov_offset = 0;
} }
@ -267,7 +262,7 @@ dif_generate(struct iovec *iovs, int iovcnt, uint32_t num_blocks,
offset_blocks = 0; offset_blocks = 0;
_iov_iter_init(&iter, iovs, iovcnt); _iov_iter_init(&iter, iovs, iovcnt);
while (offset_blocks < num_blocks && _iov_iter_cont(&iter)) { while (offset_blocks < num_blocks) {
_iov_iter_get_buf(&iter, &buf, NULL); _iov_iter_get_buf(&iter, &buf, NULL);
if (ctx->dif_flags & SPDK_DIF_GUARD_CHECK) { if (ctx->dif_flags & SPDK_DIF_GUARD_CHECK) {
@ -293,7 +288,7 @@ _dif_generate_split(struct _iov_iter *iter, uint32_t offset_blocks,
guard = 0; guard = 0;
offset_in_block = 0; offset_in_block = 0;
while (offset_in_block < ctx->block_size && _iov_iter_cont(iter)) { while (offset_in_block < ctx->block_size) {
_iov_iter_get_buf(iter, &buf, &buf_len); _iov_iter_get_buf(iter, &buf, &buf_len);
if (offset_in_block < ctx->guard_interval) { if (offset_in_block < ctx->guard_interval) {
@ -336,7 +331,7 @@ dif_generate_split(struct iovec *iovs, int iovcnt, uint32_t num_blocks,
offset_blocks = 0; offset_blocks = 0;
_iov_iter_init(&iter, iovs, iovcnt); _iov_iter_init(&iter, iovs, iovcnt);
while (offset_blocks < num_blocks && _iov_iter_cont(&iter)) { while (offset_blocks < num_blocks) {
_dif_generate_split(&iter, offset_blocks, ctx); _dif_generate_split(&iter, offset_blocks, ctx);
offset_blocks++; offset_blocks++;
} }
@ -492,7 +487,7 @@ dif_verify(struct iovec *iovs, int iovcnt, uint32_t num_blocks,
offset_blocks = 0; offset_blocks = 0;
_iov_iter_init(&iter, iovs, iovcnt); _iov_iter_init(&iter, iovs, iovcnt);
while (offset_blocks < num_blocks && _iov_iter_cont(&iter)) { while (offset_blocks < num_blocks) {
_iov_iter_get_buf(&iter, &buf, NULL); _iov_iter_get_buf(&iter, &buf, NULL);
if (ctx->dif_flags & SPDK_DIF_GUARD_CHECK) { if (ctx->dif_flags & SPDK_DIF_GUARD_CHECK) {
@ -523,7 +518,7 @@ _dif_verify_split(struct _iov_iter *iter, uint32_t offset_blocks,
guard = 0; guard = 0;
offset_in_block = 0; offset_in_block = 0;
while (offset_in_block < ctx->block_size && _iov_iter_cont(iter)) { while (offset_in_block < ctx->block_size) {
_iov_iter_get_buf(iter, &buf, &buf_len); _iov_iter_get_buf(iter, &buf, &buf_len);
if (offset_in_block < ctx->guard_interval) { if (offset_in_block < ctx->guard_interval) {
@ -562,7 +557,7 @@ dif_verify_split(struct iovec *iovs, int iovcnt, uint32_t num_blocks,
offset_blocks = 0; offset_blocks = 0;
_iov_iter_init(&iter, iovs, iovcnt); _iov_iter_init(&iter, iovs, iovcnt);
while (offset_blocks < num_blocks && _iov_iter_cont(&iter)) { while (offset_blocks < num_blocks) {
rc = _dif_verify_split(&iter, offset_blocks, ctx, err_blk); rc = _dif_verify_split(&iter, offset_blocks, ctx, err_blk);
if (rc != 0) { if (rc != 0) {
return rc; return rc;
@ -608,8 +603,7 @@ dif_generate_copy(struct iovec *iovs, int iovcnt, struct iovec *bounce_iov,
data_block_size = ctx->block_size - ctx->md_size; data_block_size = ctx->block_size - ctx->md_size;
while (offset_blocks < num_blocks && while (offset_blocks < num_blocks) {
_iov_iter_cont(&src_iter) && _iov_iter_cont(&dst_iter)) {
_iov_iter_get_buf(&src_iter, &src, NULL); _iov_iter_get_buf(&src_iter, &src, NULL);
_iov_iter_get_buf(&dst_iter, &dst, NULL); _iov_iter_get_buf(&dst_iter, &dst, NULL);
@ -646,7 +640,7 @@ _dif_generate_copy_split(struct _iov_iter *src_iter, struct _iov_iter *dst_iter,
guard = 0; guard = 0;
offset_in_block = 0; offset_in_block = 0;
while (offset_in_block < data_block_size && _iov_iter_cont(src_iter)) { while (offset_in_block < data_block_size) {
/* Compute CRC over split logical block data and copy /* Compute CRC over split logical block data and copy
* data to bounce buffer. * data to bounce buffer.
*/ */
@ -685,8 +679,7 @@ dif_generate_copy_split(struct iovec *iovs, int iovcnt, struct iovec *bounce_iov
_iov_iter_init(&src_iter, iovs, iovcnt); _iov_iter_init(&src_iter, iovs, iovcnt);
_iov_iter_init(&dst_iter, bounce_iov, 1); _iov_iter_init(&dst_iter, bounce_iov, 1);
while (offset_blocks < num_blocks && while (offset_blocks < num_blocks) {
_iov_iter_cont(&src_iter) && _iov_iter_cont(&dst_iter)) {
_dif_generate_copy_split(&src_iter, &dst_iter, offset_blocks, ctx); _dif_generate_copy_split(&src_iter, &dst_iter, offset_blocks, ctx);
offset_blocks++; offset_blocks++;
} }
@ -736,8 +729,7 @@ dif_verify_copy(struct iovec *iovs, int iovcnt, struct iovec *bounce_iov,
data_block_size = ctx->block_size - ctx->md_size; data_block_size = ctx->block_size - ctx->md_size;
while (offset_blocks < num_blocks && _iov_iter_cont(&src_iter) && while (offset_blocks < num_blocks) {
_iov_iter_cont(&dst_iter)) {
_iov_iter_get_buf(&src_iter, &src, NULL); _iov_iter_get_buf(&src_iter, &src, NULL);
_iov_iter_get_buf(&dst_iter, &dst, NULL); _iov_iter_get_buf(&dst_iter, &dst, NULL);
@ -821,8 +813,7 @@ dif_verify_copy_split(struct iovec *iovs, int iovcnt, struct iovec *bounce_iov,
_iov_iter_init(&src_iter, bounce_iov, 1); _iov_iter_init(&src_iter, bounce_iov, 1);
_iov_iter_init(&dst_iter, iovs, iovcnt); _iov_iter_init(&dst_iter, iovs, iovcnt);
while (offset_blocks < num_blocks && while (offset_blocks < num_blocks) {
_iov_iter_cont(&src_iter) && _iov_iter_cont(&dst_iter)) {
rc = _dif_verify_copy_split(&src_iter, &dst_iter, offset_blocks, ctx, err_blk); rc = _dif_verify_copy_split(&src_iter, &dst_iter, offset_blocks, ctx, err_blk);
if (rc != 0) { if (rc != 0) {
return rc; return rc;
@ -886,7 +877,7 @@ _dif_inject_error(struct iovec *iovs, int iovcnt,
offset_in_block = 0; offset_in_block = 0;
while (offset_in_block < block_size && _iov_iter_cont(&iter)) { while (offset_in_block < block_size) {
_iov_iter_get_buf(&iter, &buf, &buf_len); _iov_iter_get_buf(&iter, &buf, &buf_len);
buf_len = spdk_min(buf_len, block_size - offset_in_block); buf_len = spdk_min(buf_len, block_size - offset_in_block);
@ -1017,8 +1008,7 @@ dix_generate(struct iovec *iovs, int iovcnt, struct iovec *md_iov,
_iov_iter_init(&data_iter, iovs, iovcnt); _iov_iter_init(&data_iter, iovs, iovcnt);
_iov_iter_init(&md_iter, md_iov, 1); _iov_iter_init(&md_iter, md_iov, 1);
while (offset_blocks < num_blocks && while (offset_blocks < num_blocks) {
_iov_iter_cont(&data_iter) && _iov_iter_cont(&md_iter)) {
_iov_iter_get_buf(&data_iter, &data_buf, NULL); _iov_iter_get_buf(&data_iter, &data_buf, NULL);
_iov_iter_get_buf(&md_iter, &md_buf, NULL); _iov_iter_get_buf(&md_iter, &md_buf, NULL);
@ -1054,7 +1044,7 @@ _dix_generate_split(struct _iov_iter *data_iter, struct _iov_iter *md_iter,
offset_in_block = 0; offset_in_block = 0;
while (offset_in_block < ctx->block_size && _iov_iter_cont(data_iter)) { while (offset_in_block < ctx->block_size) {
_iov_iter_get_buf(data_iter, &data_buf, &data_buf_len); _iov_iter_get_buf(data_iter, &data_buf, &data_buf_len);
data_buf_len = spdk_min(data_buf_len, ctx->block_size - offset_in_block); data_buf_len = spdk_min(data_buf_len, ctx->block_size - offset_in_block);
@ -1082,8 +1072,7 @@ dix_generate_split(struct iovec *iovs, int iovcnt, struct iovec *md_iov,
_iov_iter_init(&data_iter, iovs, iovcnt); _iov_iter_init(&data_iter, iovs, iovcnt);
_iov_iter_init(&md_iter, md_iov, 1); _iov_iter_init(&md_iter, md_iov, 1);
while (offset_blocks < num_blocks && while (offset_blocks < num_blocks) {
_iov_iter_cont(&data_iter) && _iov_iter_cont(&md_iter)) {
_dix_generate_split(&data_iter, &md_iter, offset_blocks, ctx); _dix_generate_split(&data_iter, &md_iter, offset_blocks, ctx);
offset_blocks++; offset_blocks++;
} }
@ -1127,8 +1116,7 @@ dix_verify(struct iovec *iovs, int iovcnt, struct iovec *md_iov,
_iov_iter_init(&data_iter, iovs, iovcnt); _iov_iter_init(&data_iter, iovs, iovcnt);
_iov_iter_init(&md_iter, md_iov, 1); _iov_iter_init(&md_iter, md_iov, 1);
while (offset_blocks < num_blocks && while (offset_blocks < num_blocks) {
_iov_iter_cont(&data_iter) && _iov_iter_cont(&md_iter)) {
_iov_iter_get_buf(&data_iter, &data_buf, NULL); _iov_iter_get_buf(&data_iter, &data_buf, NULL);
_iov_iter_get_buf(&md_iter, &md_buf, NULL); _iov_iter_get_buf(&md_iter, &md_buf, NULL);
@ -1170,7 +1158,7 @@ _dix_verify_split(struct _iov_iter *data_iter, struct _iov_iter *md_iter,
offset_in_block = 0; offset_in_block = 0;
while (offset_in_block < ctx->block_size && _iov_iter_cont(data_iter)) { while (offset_in_block < ctx->block_size) {
_iov_iter_get_buf(data_iter, &data_buf, &data_buf_len); _iov_iter_get_buf(data_iter, &data_buf, &data_buf_len);
data_buf_len = spdk_min(data_buf_len, ctx->block_size - offset_in_block); data_buf_len = spdk_min(data_buf_len, ctx->block_size - offset_in_block);
@ -1200,8 +1188,7 @@ dix_verify_split(struct iovec *iovs, int iovcnt, struct iovec *md_iov,
_iov_iter_init(&data_iter, iovs, iovcnt); _iov_iter_init(&data_iter, iovs, iovcnt);
_iov_iter_init(&md_iter, md_iov, 1); _iov_iter_init(&md_iter, md_iov, 1);
while (offset_blocks < num_blocks && while (offset_blocks < num_blocks) {
_iov_iter_cont(&data_iter) && _iov_iter_cont(&md_iter)) {
rc = _dix_verify_split(&data_iter, &md_iter, offset_blocks, ctx, err_blk); rc = _dix_verify_split(&data_iter, &md_iter, offset_blocks, ctx, err_blk);
if (rc != 0) { if (rc != 0) {
return rc; return rc;

View File

@ -54,9 +54,9 @@ ut_data_pattern_generate(struct iovec *iovs, int iovcnt,
offset_blocks = 0; offset_blocks = 0;
_iov_iter_init(&iter, iovs, iovcnt); _iov_iter_init(&iter, iovs, iovcnt);
while (offset_blocks < num_blocks && _iov_iter_cont(&iter)) { while (offset_blocks < num_blocks) {
offset_in_block = 0; offset_in_block = 0;
while (offset_in_block < block_size && _iov_iter_cont(&iter)) { while (offset_in_block < block_size) {
_iov_iter_get_buf(&iter, &buf, &buf_len); _iov_iter_get_buf(&iter, &buf, &buf_len);
if (offset_in_block < block_size - md_size) { if (offset_in_block < block_size - md_size) {
buf_len = spdk_min(buf_len, buf_len = spdk_min(buf_len,
@ -90,9 +90,9 @@ ut_data_pattern_verify(struct iovec *iovs, int iovcnt,
offset_blocks = 0; offset_blocks = 0;
_iov_iter_init(&iter, iovs, iovcnt); _iov_iter_init(&iter, iovs, iovcnt);
while (offset_blocks < num_blocks && _iov_iter_cont(&iter)) { while (offset_blocks < num_blocks) {
offset_in_block = 0; offset_in_block = 0;
while (offset_in_block < block_size && _iov_iter_cont(&iter)) { while (offset_in_block < block_size) {
_iov_iter_get_buf(&iter, (void *)&buf, &buf_len); _iov_iter_get_buf(&iter, (void *)&buf, &buf_len);
if (offset_in_block < block_size - md_size) { if (offset_in_block < block_size - md_size) {