Unverified Commit 333b99fc authored by openeuler-ci-bot's avatar openeuler-ci-bot Committed by Gitee
Browse files

!1384 [sync] PR-1346: dm thin metadata: check fail_io before using data_sm

parents 73282101 643a1e33
Loading
Loading
Loading
Loading
+23 −13
Original line number Diff line number Diff line
@@ -1771,13 +1771,15 @@ int dm_thin_remove_range(struct dm_thin_device *td,

int dm_pool_block_is_shared(struct dm_pool_metadata *pmd, dm_block_t b, bool *result)
{
	int r;
	int r = -EINVAL;
	uint32_t ref_count;

	down_read(&pmd->root_lock);
	if (!pmd->fail_io) {
		r = dm_sm_get_count(pmd->data_sm, b, &ref_count);
		if (!r)
			*result = (ref_count > 1);
	}
	up_read(&pmd->root_lock);

	return r;
@@ -1788,11 +1790,15 @@ int dm_pool_inc_data_range(struct dm_pool_metadata *pmd, dm_block_t b, dm_block_
	int r = 0;

	pmd_write_lock(pmd);
	if (!pmd->fail_io) {
		for (; b != e; b++) {
			r = dm_sm_inc_block(pmd->data_sm, b);
			if (r)
				break;
		}
	} else {
		r = -EINVAL;
	}
	pmd_write_unlock(pmd);

	return r;
@@ -1800,14 +1806,18 @@ int dm_pool_inc_data_range(struct dm_pool_metadata *pmd, dm_block_t b, dm_block_

int dm_pool_dec_data_range(struct dm_pool_metadata *pmd, dm_block_t b, dm_block_t e)
{
	int r = 0;
	int r = -EINVAL;

	pmd_write_lock(pmd);
	if (!pmd->fail_io) {
		for (; b != e; b++) {
			r = dm_sm_dec_block(pmd->data_sm, b);
			if (r)
				break;
		}
	} else {
		r = -EINVAL;
	}
	pmd_write_unlock(pmd);

	return r;