diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-12-21 17:08:06 -0800 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-12-21 17:08:06 -0800 | 
| commit | b49249d10324d0fd6fb29725c2807dfd80d0edbc (patch) | |
| tree | 9a8fa724e6c9f9283530979c6e32a311c74999d5 /drivers/md/persistent-data | |
| parent | 10532b560bacf23766f9c7dc09778b31b198ff45 (diff) | |
| parent | 45e621d45e24ffc4cb2b2935e8438987b860063a (diff) | |
| download | olio-linux-3.10-b49249d10324d0fd6fb29725c2807dfd80d0edbc.tar.xz olio-linux-3.10-b49249d10324d0fd6fb29725c2807dfd80d0edbc.zip  | |
Merge tag 'dm-3.8-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/agk/linux-dm
Pull dm update from Alasdair G Kergon:
 "Miscellaneous device-mapper fixes, cleanups and performance
  improvements.
  Of particular note:
   - Disable broken WRITE SAME support in all targets except linear and
     striped.  Use it when kcopyd is zeroing blocks.
   - Remove several mempools from targets by moving the data into the
     bio's new front_pad area(which dm calls 'per_bio_data').
   - Fix a race in thin provisioning if discards are misused.
   - Prevent userspace from interfering with the ioctl parameters and
     use kmalloc for the data buffer if it's small instead of vmalloc.
   - Throttle some annoying error messages when I/O fails."
* tag 'dm-3.8-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/agk/linux-dm: (36 commits)
  dm stripe: add WRITE SAME support
  dm: remove map_info
  dm snapshot: do not use map_context
  dm thin: dont use map_context
  dm raid1: dont use map_context
  dm flakey: dont use map_context
  dm raid1: rename read_record to bio_record
  dm: move target request nr to dm_target_io
  dm snapshot: use per_bio_data
  dm verity: use per_bio_data
  dm raid1: use per_bio_data
  dm: introduce per_bio_data
  dm kcopyd: add WRITE SAME support to dm_kcopyd_zero
  dm linear: add WRITE SAME support
  dm: add WRITE SAME support
  dm: prepare to support WRITE SAME
  dm ioctl: use kmalloc if possible
  dm ioctl: remove PF_MEMALLOC
  dm persistent data: improve improve space map block alloc failure message
  dm thin: use DMERR_LIMIT for errors
  ...
Diffstat (limited to 'drivers/md/persistent-data')
| -rw-r--r-- | drivers/md/persistent-data/dm-block-manager.c | 12 | ||||
| -rw-r--r-- | drivers/md/persistent-data/dm-btree-internal.h | 16 | ||||
| -rw-r--r-- | drivers/md/persistent-data/dm-btree-remove.c | 50 | ||||
| -rw-r--r-- | drivers/md/persistent-data/dm-btree-spine.c | 20 | ||||
| -rw-r--r-- | drivers/md/persistent-data/dm-btree.c | 31 | ||||
| -rw-r--r-- | drivers/md/persistent-data/dm-space-map-common.c | 16 | ||||
| -rw-r--r-- | drivers/md/persistent-data/dm-space-map-metadata.c | 2 | 
7 files changed, 77 insertions, 70 deletions
diff --git a/drivers/md/persistent-data/dm-block-manager.c b/drivers/md/persistent-data/dm-block-manager.c index a3ae09124a6..28c3ed072a7 100644 --- a/drivers/md/persistent-data/dm-block-manager.c +++ b/drivers/md/persistent-data/dm-block-manager.c @@ -428,15 +428,17 @@ static int dm_bm_validate_buffer(struct dm_block_manager *bm,  		if (!v)  			return 0;  		r = v->check(v, (struct dm_block *) buf, dm_bufio_get_block_size(bm->bufio)); -		if (unlikely(r)) +		if (unlikely(r)) { +			DMERR_LIMIT("%s validator check failed for block %llu", v->name, +				    (unsigned long long) dm_bufio_get_block_number(buf));  			return r; +		}  		aux->validator = v;  	} else {  		if (unlikely(aux->validator != v)) { -			DMERR("validator mismatch (old=%s vs new=%s) for block %llu", -				aux->validator->name, v ? v->name : "NULL", -				(unsigned long long) -					dm_bufio_get_block_number(buf)); +			DMERR_LIMIT("validator mismatch (old=%s vs new=%s) for block %llu", +				    aux->validator->name, v ? v->name : "NULL", +				    (unsigned long long) dm_bufio_get_block_number(buf));  			return -EINVAL;  		}  	} diff --git a/drivers/md/persistent-data/dm-btree-internal.h b/drivers/md/persistent-data/dm-btree-internal.h index 5709bfeab1e..accbb05f17b 100644 --- a/drivers/md/persistent-data/dm-btree-internal.h +++ b/drivers/md/persistent-data/dm-btree-internal.h @@ -36,13 +36,13 @@ struct node_header {  	__le32 padding;  } __packed; -struct node { +struct btree_node {  	struct node_header header;  	__le64 keys[0];  } __packed; -void inc_children(struct dm_transaction_manager *tm, struct node *n, +void inc_children(struct dm_transaction_manager *tm, struct btree_node *n,  		  struct dm_btree_value_type *vt);  int new_block(struct dm_btree_info *info, struct dm_block **result); @@ -64,7 +64,7 @@ struct ro_spine {  void init_ro_spine(struct ro_spine *s, struct dm_btree_info *info);  int exit_ro_spine(struct ro_spine *s);  int ro_step(struct ro_spine *s, dm_block_t new_child); -struct node *ro_node(struct ro_spine *s); +struct btree_node *ro_node(struct ro_spine *s);  struct shadow_spine {  	struct dm_btree_info *info; @@ -98,17 +98,17 @@ int shadow_root(struct shadow_spine *s);  /*   * Some inlines.   */ -static inline __le64 *key_ptr(struct node *n, uint32_t index) +static inline __le64 *key_ptr(struct btree_node *n, uint32_t index)  {  	return n->keys + index;  } -static inline void *value_base(struct node *n) +static inline void *value_base(struct btree_node *n)  {  	return &n->keys[le32_to_cpu(n->header.max_entries)];  } -static inline void *value_ptr(struct node *n, uint32_t index) +static inline void *value_ptr(struct btree_node *n, uint32_t index)  {  	uint32_t value_size = le32_to_cpu(n->header.value_size);  	return value_base(n) + (value_size * index); @@ -117,7 +117,7 @@ static inline void *value_ptr(struct node *n, uint32_t index)  /*   * Assumes the values are suitably-aligned and converts to core format.   */ -static inline uint64_t value64(struct node *n, uint32_t index) +static inline uint64_t value64(struct btree_node *n, uint32_t index)  {  	__le64 *values_le = value_base(n); @@ -127,7 +127,7 @@ static inline uint64_t value64(struct node *n, uint32_t index)  /*   * Searching for a key within a single node.   */ -int lower_bound(struct node *n, uint64_t key); +int lower_bound(struct btree_node *n, uint64_t key);  extern struct dm_block_validator btree_node_validator; diff --git a/drivers/md/persistent-data/dm-btree-remove.c b/drivers/md/persistent-data/dm-btree-remove.c index aa71e2359a0..c4f28133ef8 100644 --- a/drivers/md/persistent-data/dm-btree-remove.c +++ b/drivers/md/persistent-data/dm-btree-remove.c @@ -53,7 +53,7 @@  /*   * Some little utilities for moving node data around.   */ -static void node_shift(struct node *n, int shift) +static void node_shift(struct btree_node *n, int shift)  {  	uint32_t nr_entries = le32_to_cpu(n->header.nr_entries);  	uint32_t value_size = le32_to_cpu(n->header.value_size); @@ -79,7 +79,7 @@ static void node_shift(struct node *n, int shift)  	}  } -static void node_copy(struct node *left, struct node *right, int shift) +static void node_copy(struct btree_node *left, struct btree_node *right, int shift)  {  	uint32_t nr_left = le32_to_cpu(left->header.nr_entries);  	uint32_t value_size = le32_to_cpu(left->header.value_size); @@ -108,7 +108,7 @@ static void node_copy(struct node *left, struct node *right, int shift)  /*   * Delete a specific entry from a leaf node.   */ -static void delete_at(struct node *n, unsigned index) +static void delete_at(struct btree_node *n, unsigned index)  {  	unsigned nr_entries = le32_to_cpu(n->header.nr_entries);  	unsigned nr_to_copy = nr_entries - (index + 1); @@ -128,7 +128,7 @@ static void delete_at(struct node *n, unsigned index)  	n->header.nr_entries = cpu_to_le32(nr_entries - 1);  } -static unsigned merge_threshold(struct node *n) +static unsigned merge_threshold(struct btree_node *n)  {  	return le32_to_cpu(n->header.max_entries) / 3;  } @@ -136,7 +136,7 @@ static unsigned merge_threshold(struct node *n)  struct child {  	unsigned index;  	struct dm_block *block; -	struct node *n; +	struct btree_node *n;  };  static struct dm_btree_value_type le64_type = { @@ -147,7 +147,7 @@ static struct dm_btree_value_type le64_type = {  	.equal = NULL  }; -static int init_child(struct dm_btree_info *info, struct node *parent, +static int init_child(struct dm_btree_info *info, struct btree_node *parent,  		      unsigned index, struct child *result)  {  	int r, inc; @@ -177,7 +177,7 @@ static int exit_child(struct dm_btree_info *info, struct child *c)  	return dm_tm_unlock(info->tm, c->block);  } -static void shift(struct node *left, struct node *right, int count) +static void shift(struct btree_node *left, struct btree_node *right, int count)  {  	uint32_t nr_left = le32_to_cpu(left->header.nr_entries);  	uint32_t nr_right = le32_to_cpu(right->header.nr_entries); @@ -203,11 +203,11 @@ static void shift(struct node *left, struct node *right, int count)  	right->header.nr_entries = cpu_to_le32(nr_right + count);  } -static void __rebalance2(struct dm_btree_info *info, struct node *parent, +static void __rebalance2(struct dm_btree_info *info, struct btree_node *parent,  			 struct child *l, struct child *r)  { -	struct node *left = l->n; -	struct node *right = r->n; +	struct btree_node *left = l->n; +	struct btree_node *right = r->n;  	uint32_t nr_left = le32_to_cpu(left->header.nr_entries);  	uint32_t nr_right = le32_to_cpu(right->header.nr_entries);  	unsigned threshold = 2 * merge_threshold(left) + 1; @@ -239,7 +239,7 @@ static int rebalance2(struct shadow_spine *s, struct dm_btree_info *info,  		      unsigned left_index)  {  	int r; -	struct node *parent; +	struct btree_node *parent;  	struct child left, right;  	parent = dm_block_data(shadow_current(s)); @@ -270,9 +270,9 @@ static int rebalance2(struct shadow_spine *s, struct dm_btree_info *info,   * in right, then rebalance2.  This wastes some cpu, but I want something   * simple atm.   */ -static void delete_center_node(struct dm_btree_info *info, struct node *parent, +static void delete_center_node(struct dm_btree_info *info, struct btree_node *parent,  			       struct child *l, struct child *c, struct child *r, -			       struct node *left, struct node *center, struct node *right, +			       struct btree_node *left, struct btree_node *center, struct btree_node *right,  			       uint32_t nr_left, uint32_t nr_center, uint32_t nr_right)  {  	uint32_t max_entries = le32_to_cpu(left->header.max_entries); @@ -301,9 +301,9 @@ static void delete_center_node(struct dm_btree_info *info, struct node *parent,  /*   * Redistributes entries among 3 sibling nodes.   */ -static void redistribute3(struct dm_btree_info *info, struct node *parent, +static void redistribute3(struct dm_btree_info *info, struct btree_node *parent,  			  struct child *l, struct child *c, struct child *r, -			  struct node *left, struct node *center, struct node *right, +			  struct btree_node *left, struct btree_node *center, struct btree_node *right,  			  uint32_t nr_left, uint32_t nr_center, uint32_t nr_right)  {  	int s; @@ -343,12 +343,12 @@ static void redistribute3(struct dm_btree_info *info, struct node *parent,  	*key_ptr(parent, r->index) = right->keys[0];  } -static void __rebalance3(struct dm_btree_info *info, struct node *parent, +static void __rebalance3(struct dm_btree_info *info, struct btree_node *parent,  			 struct child *l, struct child *c, struct child *r)  { -	struct node *left = l->n; -	struct node *center = c->n; -	struct node *right = r->n; +	struct btree_node *left = l->n; +	struct btree_node *center = c->n; +	struct btree_node *right = r->n;  	uint32_t nr_left = le32_to_cpu(left->header.nr_entries);  	uint32_t nr_center = le32_to_cpu(center->header.nr_entries); @@ -371,7 +371,7 @@ static int rebalance3(struct shadow_spine *s, struct dm_btree_info *info,  		      unsigned left_index)  {  	int r; -	struct node *parent = dm_block_data(shadow_current(s)); +	struct btree_node *parent = dm_block_data(shadow_current(s));  	struct child left, center, right;  	/* @@ -421,7 +421,7 @@ static int get_nr_entries(struct dm_transaction_manager *tm,  {  	int r;  	struct dm_block *block; -	struct node *n; +	struct btree_node *n;  	r = dm_tm_read_lock(tm, b, &btree_node_validator, &block);  	if (r) @@ -438,7 +438,7 @@ static int rebalance_children(struct shadow_spine *s,  {  	int i, r, has_left_sibling, has_right_sibling;  	uint32_t child_entries; -	struct node *n; +	struct btree_node *n;  	n = dm_block_data(shadow_current(s)); @@ -483,7 +483,7 @@ static int rebalance_children(struct shadow_spine *s,  	return r;  } -static int do_leaf(struct node *n, uint64_t key, unsigned *index) +static int do_leaf(struct btree_node *n, uint64_t key, unsigned *index)  {  	int i = lower_bound(n, key); @@ -506,7 +506,7 @@ static int remove_raw(struct shadow_spine *s, struct dm_btree_info *info,  		      uint64_t key, unsigned *index)  {  	int i = *index, r; -	struct node *n; +	struct btree_node *n;  	for (;;) {  		r = shadow_step(s, root, vt); @@ -556,7 +556,7 @@ int dm_btree_remove(struct dm_btree_info *info, dm_block_t root,  	unsigned level, last_level = info->levels - 1;  	int index = 0, r = 0;  	struct shadow_spine spine; -	struct node *n; +	struct btree_node *n;  	init_shadow_spine(&spine, info);  	for (level = 0; level < info->levels; level++) { diff --git a/drivers/md/persistent-data/dm-btree-spine.c b/drivers/md/persistent-data/dm-btree-spine.c index d9a7912ee8e..f199a0c4ed0 100644 --- a/drivers/md/persistent-data/dm-btree-spine.c +++ b/drivers/md/persistent-data/dm-btree-spine.c @@ -23,7 +23,7 @@ static void node_prepare_for_write(struct dm_block_validator *v,  				   struct dm_block *b,  				   size_t block_size)  { -	struct node *n = dm_block_data(b); +	struct btree_node *n = dm_block_data(b);  	struct node_header *h = &n->header;  	h->blocknr = cpu_to_le64(dm_block_location(b)); @@ -38,15 +38,15 @@ static int node_check(struct dm_block_validator *v,  		      struct dm_block *b,  		      size_t block_size)  { -	struct node *n = dm_block_data(b); +	struct btree_node *n = dm_block_data(b);  	struct node_header *h = &n->header;  	size_t value_size;  	__le32 csum_disk;  	uint32_t flags;  	if (dm_block_location(b) != le64_to_cpu(h->blocknr)) { -		DMERR("node_check failed blocknr %llu wanted %llu", -		      le64_to_cpu(h->blocknr), dm_block_location(b)); +		DMERR_LIMIT("node_check failed: blocknr %llu != wanted %llu", +			    le64_to_cpu(h->blocknr), dm_block_location(b));  		return -ENOTBLK;  	} @@ -54,8 +54,8 @@ static int node_check(struct dm_block_validator *v,  					       block_size - sizeof(__le32),  					       BTREE_CSUM_XOR));  	if (csum_disk != h->csum) { -		DMERR("node_check failed csum %u wanted %u", -		      le32_to_cpu(csum_disk), le32_to_cpu(h->csum)); +		DMERR_LIMIT("node_check failed: csum %u != wanted %u", +			    le32_to_cpu(csum_disk), le32_to_cpu(h->csum));  		return -EILSEQ;  	} @@ -63,12 +63,12 @@ static int node_check(struct dm_block_validator *v,  	if (sizeof(struct node_header) +  	    (sizeof(__le64) + value_size) * le32_to_cpu(h->max_entries) > block_size) { -		DMERR("node_check failed: max_entries too large"); +		DMERR_LIMIT("node_check failed: max_entries too large");  		return -EILSEQ;  	}  	if (le32_to_cpu(h->nr_entries) > le32_to_cpu(h->max_entries)) { -		DMERR("node_check failed, too many entries"); +		DMERR_LIMIT("node_check failed: too many entries");  		return -EILSEQ;  	} @@ -77,7 +77,7 @@ static int node_check(struct dm_block_validator *v,  	 */  	flags = le32_to_cpu(h->flags);  	if (!(flags & INTERNAL_NODE) && !(flags & LEAF_NODE)) { -		DMERR("node_check failed, node is neither INTERNAL or LEAF"); +		DMERR_LIMIT("node_check failed: node is neither INTERNAL or LEAF");  		return -EILSEQ;  	} @@ -164,7 +164,7 @@ int ro_step(struct ro_spine *s, dm_block_t new_child)  	return r;  } -struct node *ro_node(struct ro_spine *s) +struct btree_node *ro_node(struct ro_spine *s)  {  	struct dm_block *block; diff --git a/drivers/md/persistent-data/dm-btree.c b/drivers/md/persistent-data/dm-btree.c index d12b2cc51f1..4caf66918cd 100644 --- a/drivers/md/persistent-data/dm-btree.c +++ b/drivers/md/persistent-data/dm-btree.c @@ -38,7 +38,7 @@ static void array_insert(void *base, size_t elt_size, unsigned nr_elts,  /*----------------------------------------------------------------*/  /* makes the assumption that no two keys are the same. */ -static int bsearch(struct node *n, uint64_t key, int want_hi) +static int bsearch(struct btree_node *n, uint64_t key, int want_hi)  {  	int lo = -1, hi = le32_to_cpu(n->header.nr_entries); @@ -58,12 +58,12 @@ static int bsearch(struct node *n, uint64_t key, int want_hi)  	return want_hi ? hi : lo;  } -int lower_bound(struct node *n, uint64_t key) +int lower_bound(struct btree_node *n, uint64_t key)  {  	return bsearch(n, key, 0);  } -void inc_children(struct dm_transaction_manager *tm, struct node *n, +void inc_children(struct dm_transaction_manager *tm, struct btree_node *n,  		  struct dm_btree_value_type *vt)  {  	unsigned i; @@ -77,7 +77,7 @@ void inc_children(struct dm_transaction_manager *tm, struct node *n,  			vt->inc(vt->context, value_ptr(n, i));  } -static int insert_at(size_t value_size, struct node *node, unsigned index, +static int insert_at(size_t value_size, struct btree_node *node, unsigned index,  		      uint64_t key, void *value)  		      __dm_written_to_disk(value)  { @@ -122,7 +122,7 @@ int dm_btree_empty(struct dm_btree_info *info, dm_block_t *root)  {  	int r;  	struct dm_block *b; -	struct node *n; +	struct btree_node *n;  	size_t block_size;  	uint32_t max_entries; @@ -154,7 +154,7 @@ EXPORT_SYMBOL_GPL(dm_btree_empty);  #define MAX_SPINE_DEPTH 64  struct frame {  	struct dm_block *b; -	struct node *n; +	struct btree_node *n;  	unsigned level;  	unsigned nr_children;  	unsigned current_child; @@ -230,6 +230,11 @@ static void pop_frame(struct del_stack *s)  	dm_tm_unlock(s->tm, f->b);  } +static bool is_internal_level(struct dm_btree_info *info, struct frame *f) +{ +	return f->level < (info->levels - 1); +} +  int dm_btree_del(struct dm_btree_info *info, dm_block_t root)  {  	int r; @@ -241,7 +246,7 @@ int dm_btree_del(struct dm_btree_info *info, dm_block_t root)  	s->tm = info->tm;  	s->top = -1; -	r = push_frame(s, root, 1); +	r = push_frame(s, root, 0);  	if (r)  		goto out; @@ -267,7 +272,7 @@ int dm_btree_del(struct dm_btree_info *info, dm_block_t root)  			if (r)  				goto out; -		} else if (f->level != (info->levels - 1)) { +		} else if (is_internal_level(info, f)) {  			b = value64(f->n, f->current_child);  			f->current_child++;  			r = push_frame(s, b, f->level + 1); @@ -295,7 +300,7 @@ EXPORT_SYMBOL_GPL(dm_btree_del);  /*----------------------------------------------------------------*/  static int btree_lookup_raw(struct ro_spine *s, dm_block_t block, uint64_t key, -			    int (*search_fn)(struct node *, uint64_t), +			    int (*search_fn)(struct btree_node *, uint64_t),  			    uint64_t *result_key, void *v, size_t value_size)  {  	int i, r; @@ -406,7 +411,7 @@ static int btree_split_sibling(struct shadow_spine *s, dm_block_t root,  	size_t size;  	unsigned nr_left, nr_right;  	struct dm_block *left, *right, *parent; -	struct node *ln, *rn, *pn; +	struct btree_node *ln, *rn, *pn;  	__le64 location;  	left = shadow_current(s); @@ -491,7 +496,7 @@ static int btree_split_beneath(struct shadow_spine *s, uint64_t key)  	size_t size;  	unsigned nr_left, nr_right;  	struct dm_block *left, *right, *new_parent; -	struct node *pn, *ln, *rn; +	struct btree_node *pn, *ln, *rn;  	__le64 val;  	new_parent = shadow_current(s); @@ -576,7 +581,7 @@ static int btree_insert_raw(struct shadow_spine *s, dm_block_t root,  			    uint64_t key, unsigned *index)  {  	int r, i = *index, top = 1; -	struct node *node; +	struct btree_node *node;  	for (;;) {  		r = shadow_step(s, root, vt); @@ -643,7 +648,7 @@ static int insert(struct dm_btree_info *info, dm_block_t root,  	unsigned level, index = -1, last_level = info->levels - 1;  	dm_block_t block = root;  	struct shadow_spine spine; -	struct node *n; +	struct btree_node *n;  	struct dm_btree_value_type le64_type;  	le64_type.context = NULL; diff --git a/drivers/md/persistent-data/dm-space-map-common.c b/drivers/md/persistent-data/dm-space-map-common.c index f3a9af8cdec..3e7a88d99eb 100644 --- a/drivers/md/persistent-data/dm-space-map-common.c +++ b/drivers/md/persistent-data/dm-space-map-common.c @@ -39,8 +39,8 @@ static int index_check(struct dm_block_validator *v,  	__le32 csum_disk;  	if (dm_block_location(b) != le64_to_cpu(mi_le->blocknr)) { -		DMERR("index_check failed blocknr %llu wanted %llu", -		      le64_to_cpu(mi_le->blocknr), dm_block_location(b)); +		DMERR_LIMIT("index_check failed: blocknr %llu != wanted %llu", +			    le64_to_cpu(mi_le->blocknr), dm_block_location(b));  		return -ENOTBLK;  	} @@ -48,8 +48,8 @@ static int index_check(struct dm_block_validator *v,  					       block_size - sizeof(__le32),  					       INDEX_CSUM_XOR));  	if (csum_disk != mi_le->csum) { -		DMERR("index_check failed csum %u wanted %u", -		      le32_to_cpu(csum_disk), le32_to_cpu(mi_le->csum)); +		DMERR_LIMIT("index_check failed: csum %u != wanted %u", +			    le32_to_cpu(csum_disk), le32_to_cpu(mi_le->csum));  		return -EILSEQ;  	} @@ -89,8 +89,8 @@ static int bitmap_check(struct dm_block_validator *v,  	__le32 csum_disk;  	if (dm_block_location(b) != le64_to_cpu(disk_header->blocknr)) { -		DMERR("bitmap check failed blocknr %llu wanted %llu", -		      le64_to_cpu(disk_header->blocknr), dm_block_location(b)); +		DMERR_LIMIT("bitmap check failed: blocknr %llu != wanted %llu", +			    le64_to_cpu(disk_header->blocknr), dm_block_location(b));  		return -ENOTBLK;  	} @@ -98,8 +98,8 @@ static int bitmap_check(struct dm_block_validator *v,  					       block_size - sizeof(__le32),  					       BITMAP_CSUM_XOR));  	if (csum_disk != disk_header->csum) { -		DMERR("bitmap check failed csum %u wanted %u", -		      le32_to_cpu(csum_disk), le32_to_cpu(disk_header->csum)); +		DMERR_LIMIT("bitmap check failed: csum %u != wanted %u", +			    le32_to_cpu(csum_disk), le32_to_cpu(disk_header->csum));  		return -EILSEQ;  	} diff --git a/drivers/md/persistent-data/dm-space-map-metadata.c b/drivers/md/persistent-data/dm-space-map-metadata.c index e89ae5e7a51..906cf3df71a 100644 --- a/drivers/md/persistent-data/dm-space-map-metadata.c +++ b/drivers/md/persistent-data/dm-space-map-metadata.c @@ -337,7 +337,7 @@ static int sm_metadata_new_block(struct dm_space_map *sm, dm_block_t *b)  {  	int r = sm_metadata_new_block_(sm, b);  	if (r) -		DMERR("out of metadata space"); +		DMERR("unable to allocate new metadata block");  	return r;  }  |