Commit 40864641 authored by wuzhouhui's avatar wuzhouhui Committed by Jim Harris
Browse files

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: default avatarwuzhouhui <wuzhouhui@kingsoft.com>
Reviewed-on: https://review.gerrithub.io/c/439869


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarShuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-by: default avatarChangpeng Liu <changpeng.liu@intel.com>
Reviewed-by: default avatarDarek Stojaczyk <dariusz.stojaczyk@intel.com>
parent 1c2163b9
Loading
Loading
Loading
Loading
+19 −32
Original line number Diff line number Diff line
@@ -57,18 +57,13 @@ _iov_iter_init(struct _iov_iter *i, struct iovec *iovs, int iovcnt)
	i->iov_offset = 0;
}

static inline bool
_iov_iter_cont(struct _iov_iter *i)
{
	return i->iovcnt != 0;
}

static inline void
_iov_iter_advance(struct _iov_iter *i, uint32_t step)
{
	i->iov_offset += step;
	if (i->iov_offset == i->iov->iov_len) {
		i->iov++;
		assert(i->iovcnt > 0);
		i->iovcnt--;
		i->iov_offset = 0;
	}
@@ -267,7 +262,7 @@ dif_generate(struct iovec *iovs, int iovcnt, uint32_t num_blocks,
	offset_blocks = 0;
	_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);

		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;
	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);

		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;
	_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);
		offset_blocks++;
	}
@@ -492,7 +487,7 @@ dif_verify(struct iovec *iovs, int iovcnt, uint32_t num_blocks,
	offset_blocks = 0;
	_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);

		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;
	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);

		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;
	_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);
		if (rc != 0) {
			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;

	while (offset_blocks < num_blocks &&
	       _iov_iter_cont(&src_iter) && _iov_iter_cont(&dst_iter)) {
	while (offset_blocks < num_blocks) {

		_iov_iter_get_buf(&src_iter, &src, 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;
	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
		 * 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(&dst_iter, bounce_iov, 1);

	while (offset_blocks < num_blocks &&
	       _iov_iter_cont(&src_iter) && _iov_iter_cont(&dst_iter)) {
	while (offset_blocks < num_blocks) {
		_dif_generate_copy_split(&src_iter, &dst_iter, offset_blocks, ctx);
		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;

	while (offset_blocks < num_blocks && _iov_iter_cont(&src_iter) &&
	       _iov_iter_cont(&dst_iter)) {
	while (offset_blocks < num_blocks) {

		_iov_iter_get_buf(&src_iter, &src, 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(&dst_iter, iovs, iovcnt);

	while (offset_blocks < num_blocks &&
	       _iov_iter_cont(&src_iter) && _iov_iter_cont(&dst_iter)) {
	while (offset_blocks < num_blocks) {
		rc = _dif_verify_copy_split(&src_iter, &dst_iter, offset_blocks, ctx, err_blk);
		if (rc != 0) {
			return rc;
@@ -886,7 +877,7 @@ _dif_inject_error(struct iovec *iovs, int iovcnt,

	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);
		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(&md_iter, md_iov, 1);

	while (offset_blocks < num_blocks &&
	       _iov_iter_cont(&data_iter) && _iov_iter_cont(&md_iter)) {
	while (offset_blocks < num_blocks) {

		_iov_iter_get_buf(&data_iter, &data_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;

	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);
		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(&md_iter, md_iov, 1);

	while (offset_blocks < num_blocks &&
	       _iov_iter_cont(&data_iter) && _iov_iter_cont(&md_iter)) {
	while (offset_blocks < num_blocks) {
		_dix_generate_split(&data_iter, &md_iter, offset_blocks, ctx);
		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(&md_iter, md_iov, 1);

	while (offset_blocks < num_blocks &&
	       _iov_iter_cont(&data_iter) && _iov_iter_cont(&md_iter)) {
	while (offset_blocks < num_blocks) {

		_iov_iter_get_buf(&data_iter, &data_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;

	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);
		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(&md_iter, md_iov, 1);

	while (offset_blocks < num_blocks &&
	       _iov_iter_cont(&data_iter) && _iov_iter_cont(&md_iter)) {
	while (offset_blocks < num_blocks) {
		rc = _dix_verify_split(&data_iter, &md_iter, offset_blocks, ctx, err_blk);
		if (rc != 0) {
			return rc;
+4 −4
Original line number Diff line number Diff line
@@ -54,9 +54,9 @@ ut_data_pattern_generate(struct iovec *iovs, int iovcnt,
	offset_blocks = 0;
	_iov_iter_init(&iter, iovs, iovcnt);

	while (offset_blocks < num_blocks && _iov_iter_cont(&iter)) {
	while (offset_blocks < num_blocks) {
		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);
			if (offset_in_block < block_size - md_size) {
				buf_len = spdk_min(buf_len,
@@ -90,9 +90,9 @@ ut_data_pattern_verify(struct iovec *iovs, int iovcnt,
	offset_blocks = 0;
	_iov_iter_init(&iter, iovs, iovcnt);

	while (offset_blocks < num_blocks && _iov_iter_cont(&iter)) {
	while (offset_blocks < num_blocks) {
		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);

			if (offset_in_block < block_size - md_size) {