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:
parent
1c2163b944
commit
4086464172
@ -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;
|
||||||
|
@ -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) {
|
||||||
|
Loading…
Reference in New Issue
Block a user