Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c397741c authored by Mike Snitzer's avatar Mike Snitzer Committed by Alasdair G Kergon
Browse files

dm thin: use DMERR_LIMIT for errors



Throttle all errors logged from the IO path by dm thin.

Signed-off-by: default avatarMike Snitzer <snitzer@redhat.com>
Signed-off-by: default avatarAlasdair G Kergon <agk@redhat.com>
parent 89ddeb8c
Loading
Loading
Loading
Loading
+15 −10
Original line number Original line Diff line number Diff line
@@ -567,7 +567,7 @@ static void process_prepared_mapping(struct dm_thin_new_mapping *m)
	 */
	 */
	r = dm_thin_insert_block(tc->td, m->virt_block, m->data_block);
	r = dm_thin_insert_block(tc->td, m->virt_block, m->data_block);
	if (r) {
	if (r) {
		DMERR("dm_thin_insert_block() failed");
		DMERR_LIMIT("dm_thin_insert_block() failed");
		dm_cell_error(m->cell);
		dm_cell_error(m->cell);
		goto out;
		goto out;
	}
	}
@@ -622,7 +622,7 @@ static void process_prepared_discard(struct dm_thin_new_mapping *m)


	r = dm_thin_remove_block(tc->td, m->virt_block);
	r = dm_thin_remove_block(tc->td, m->virt_block);
	if (r)
	if (r)
		DMERR("dm_thin_remove_block() failed");
		DMERR_LIMIT("dm_thin_remove_block() failed");


	process_prepared_discard_passdown(m);
	process_prepared_discard_passdown(m);
}
}
@@ -736,7 +736,7 @@ static void schedule_copy(struct thin_c *tc, dm_block_t virt_block,
				   0, copy_complete, m);
				   0, copy_complete, m);
		if (r < 0) {
		if (r < 0) {
			mempool_free(m, pool->mapping_pool);
			mempool_free(m, pool->mapping_pool);
			DMERR("dm_kcopyd_copy() failed");
			DMERR_LIMIT("dm_kcopyd_copy() failed");
			dm_cell_error(cell);
			dm_cell_error(cell);
		}
		}
	}
	}
@@ -802,7 +802,7 @@ static void schedule_zero(struct thin_c *tc, dm_block_t virt_block,
		r = dm_kcopyd_zero(pool->copier, 1, &to, 0, copy_complete, m);
		r = dm_kcopyd_zero(pool->copier, 1, &to, 0, copy_complete, m);
		if (r < 0) {
		if (r < 0) {
			mempool_free(m, pool->mapping_pool);
			mempool_free(m, pool->mapping_pool);
			DMERR("dm_kcopyd_zero() failed");
			DMERR_LIMIT("dm_kcopyd_zero() failed");
			dm_cell_error(cell);
			dm_cell_error(cell);
		}
		}
	}
	}
@@ -814,7 +814,7 @@ static int commit(struct pool *pool)


	r = dm_pool_commit_metadata(pool->pmd);
	r = dm_pool_commit_metadata(pool->pmd);
	if (r)
	if (r)
		DMERR("commit failed, error = %d", r);
		DMERR_LIMIT("commit failed: error = %d", r);


	return r;
	return r;
}
}
@@ -997,7 +997,8 @@ static void process_discard(struct thin_c *tc, struct bio *bio)
		break;
		break;


	default:
	default:
		DMERR("discard: find block unexpectedly returned %d", r);
		DMERR_LIMIT("%s: dm_thin_find_block() failed: error = %d",
			    __func__, r);
		cell_defer_no_holder(tc, cell);
		cell_defer_no_holder(tc, cell);
		bio_io_error(bio);
		bio_io_error(bio);
		break;
		break;
@@ -1024,7 +1025,8 @@ static void break_sharing(struct thin_c *tc, struct bio *bio, dm_block_t block,
		break;
		break;


	default:
	default:
		DMERR("%s: alloc_data_block() failed, error = %d", __func__, r);
		DMERR_LIMIT("%s: alloc_data_block() failed: error = %d",
			    __func__, r);
		dm_cell_error(cell);
		dm_cell_error(cell);
		break;
		break;
	}
	}
@@ -1100,7 +1102,8 @@ static void provision_block(struct thin_c *tc, struct bio *bio, dm_block_t block
		break;
		break;


	default:
	default:
		DMERR("%s: alloc_data_block() failed, error = %d", __func__, r);
		DMERR_LIMIT("%s: alloc_data_block() failed: error = %d",
			    __func__, r);
		set_pool_mode(tc->pool, PM_READ_ONLY);
		set_pool_mode(tc->pool, PM_READ_ONLY);
		dm_cell_error(cell);
		dm_cell_error(cell);
		break;
		break;
@@ -1148,7 +1151,8 @@ static void process_bio(struct thin_c *tc, struct bio *bio)
		break;
		break;


	default:
	default:
		DMERR("dm_thin_find_block() failed, error = %d", r);
		DMERR_LIMIT("%s: dm_thin_find_block() failed: error = %d",
			    __func__, r);
		cell_defer_no_holder(tc, cell);
		cell_defer_no_holder(tc, cell);
		bio_io_error(bio);
		bio_io_error(bio);
		break;
		break;
@@ -1190,7 +1194,8 @@ static void process_bio_read_only(struct thin_c *tc, struct bio *bio)
		break;
		break;


	default:
	default:
		DMERR("dm_thin_find_block() failed, error = %d", r);
		DMERR_LIMIT("%s: dm_thin_find_block() failed: error = %d",
			    __func__, r);
		bio_io_error(bio);
		bio_io_error(bio);
		break;
		break;
	}
	}