diff options
Diffstat (limited to 'drivers/md/dm-table.c')
| -rw-r--r-- | drivers/md/dm-table.c | 60 | 
1 files changed, 28 insertions, 32 deletions
diff --git a/drivers/md/dm-table.c b/drivers/md/dm-table.c index 078da18bb86d..2055a758541d 100644 --- a/drivers/md/dm-table.c +++ b/drivers/md/dm-table.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0-only  /*   * Copyright (C) 2001 Sistina Software (UK) Limited.   * Copyright (C) 2004-2008 Red Hat, Inc. All rights reserved. @@ -72,7 +73,7 @@ static sector_t high(struct dm_table *t, unsigned int l, unsigned int n)  		n = get_child(n, CHILDREN_PER_NODE - 1);  	if (n >= t->counts[l]) -		return (sector_t) - 1; +		return (sector_t) -1;  	return get_node(t, l, n)[KEYS_PER_NODE - 1];  } @@ -126,7 +127,7 @@ static int alloc_targets(struct dm_table *t, unsigned int num)  }  int dm_table_create(struct dm_table **result, fmode_t mode, -		    unsigned num_targets, struct mapped_device *md) +		    unsigned int num_targets, struct mapped_device *md)  {  	struct dm_table *t = kzalloc(sizeof(*t), GFP_KERNEL); @@ -211,7 +212,7 @@ static struct dm_dev_internal *find_device(struct list_head *l, dev_t dev)  {  	struct dm_dev_internal *dd; -	list_for_each_entry (dd, l, list) +	list_for_each_entry(dd, l, list)  		if (dd->dm_dev->bdev->bd_dev == dev)  			return dd; @@ -234,8 +235,7 @@ static int device_area_is_invalid(struct dm_target *ti, struct dm_dev *dev,  		return 0;  	if ((start >= dev_size) || (start + len > dev_size)) { -		DMERR("%s: %pg too small for target: " -		      "start=%llu, len=%llu, dev_size=%llu", +		DMERR("%s: %pg too small for target: start=%llu, len=%llu, dev_size=%llu",  		      dm_device_name(ti->table->md), bdev,  		      (unsigned long long)start,  		      (unsigned long long)len, @@ -280,8 +280,7 @@ static int device_area_is_invalid(struct dm_target *ti, struct dm_dev *dev,  		return 0;  	if (start & (logical_block_size_sectors - 1)) { -		DMERR("%s: start=%llu not aligned to h/w " -		      "logical block size %u of %pg", +		DMERR("%s: start=%llu not aligned to h/w logical block size %u of %pg",  		      dm_device_name(ti->table->md),  		      (unsigned long long)start,  		      limits->logical_block_size, bdev); @@ -289,8 +288,7 @@ static int device_area_is_invalid(struct dm_target *ti, struct dm_dev *dev,  	}  	if (len & (logical_block_size_sectors - 1)) { -		DMERR("%s: len=%llu not aligned to h/w " -		      "logical block size %u of %pg", +		DMERR("%s: len=%llu not aligned to h/w logical block size %u of %pg",  		      dm_device_name(ti->table->md),  		      (unsigned long long)len,  		      limits->logical_block_size, bdev); @@ -364,6 +362,8 @@ int dm_get_device(struct dm_target *ti, const char *path, fmode_t mode,  		if (!dev)  			return -ENODEV;  	} +	if (dev == disk_devt(t->md->disk)) +		return -EINVAL;  	dd = find_device(&t->devices, dev);  	if (!dd) { @@ -371,7 +371,8 @@ int dm_get_device(struct dm_target *ti, const char *path, fmode_t mode,  		if (!dd)  			return -ENOMEM; -		if ((r = dm_get_table_device(t->md, dev, mode, &dd->dm_dev))) { +		r = dm_get_table_device(t->md, dev, mode, &dd->dm_dev); +		if (r) {  			kfree(dd);  			return r;  		} @@ -470,10 +471,10 @@ static int adjoin(struct dm_table *t, struct dm_target *ti)   * On the other hand, dm-switch needs to process bulk data using messages and   * excessive use of GFP_NOIO could cause trouble.   */ -static char **realloc_argv(unsigned *size, char **old_argv) +static char **realloc_argv(unsigned int *size, char **old_argv)  {  	char **argv; -	unsigned new_size; +	unsigned int new_size;  	gfp_t gfp;  	if (*size) { @@ -499,7 +500,7 @@ static char **realloc_argv(unsigned *size, char **old_argv)  int dm_split_args(int *argc, char ***argvp, char *input)  {  	char *start, *end = input, *out, **argv = NULL; -	unsigned array_size = 0; +	unsigned int array_size = 0;  	*argc = 0; @@ -732,9 +733,8 @@ int dm_table_add_target(struct dm_table *t, const char *type,  /*   * Target argument parsing helpers.   */ -static int validate_next_arg(const struct dm_arg *arg, -			     struct dm_arg_set *arg_set, -			     unsigned *value, char **error, unsigned grouped) +static int validate_next_arg(const struct dm_arg *arg, struct dm_arg_set *arg_set, +			     unsigned int *value, char **error, unsigned int grouped)  {  	const char *arg_str = dm_shift_arg(arg_set);  	char dummy; @@ -752,14 +752,14 @@ static int validate_next_arg(const struct dm_arg *arg,  }  int dm_read_arg(const struct dm_arg *arg, struct dm_arg_set *arg_set, -		unsigned *value, char **error) +		unsigned int *value, char **error)  {  	return validate_next_arg(arg, arg_set, value, error, 0);  }  EXPORT_SYMBOL(dm_read_arg);  int dm_read_arg_group(const struct dm_arg *arg, struct dm_arg_set *arg_set, -		      unsigned *value, char **error) +		      unsigned int *value, char **error)  {  	return validate_next_arg(arg, arg_set, value, error, 1);  } @@ -780,7 +780,7 @@ const char *dm_shift_arg(struct dm_arg_set *as)  }  EXPORT_SYMBOL(dm_shift_arg); -void dm_consume_args(struct dm_arg_set *as, unsigned num_args) +void dm_consume_args(struct dm_arg_set *as, unsigned int num_args)  {  	BUG_ON(as->argc < num_args);  	as->argc -= num_args; @@ -856,7 +856,7 @@ static int device_is_rq_stackable(struct dm_target *ti, struct dm_dev *dev,  static int dm_table_determine_type(struct dm_table *t)  { -	unsigned bio_based = 0, request_based = 0, hybrid = 0; +	unsigned int bio_based = 0, request_based = 0, hybrid = 0;  	struct dm_target *ti;  	struct list_head *devices = dm_table_get_devices(t);  	enum dm_queue_mode live_md_type = dm_get_md_type(t->md); @@ -881,8 +881,7 @@ static int dm_table_determine_type(struct dm_table *t)  			bio_based = 1;  		if (bio_based && request_based) { -			DMERR("Inconsistent table: different target types" -			      " can't be mixed up"); +			DMERR("Inconsistent table: different target types can't be mixed up");  			return -EINVAL;  		}  	} @@ -1185,8 +1184,7 @@ static int dm_table_register_integrity(struct dm_table *t)  	 * profile the new profile should not conflict.  	 */  	if (blk_integrity_compare(dm_disk(md), template_disk) < 0) { -		DMERR("%s: conflict with existing integrity profile: " -		      "%s profile mismatch", +		DMERR("%s: conflict with existing integrity profile: %s profile mismatch",  		      dm_device_name(t->md),  		      template_disk->disk_name);  		return 1; @@ -1215,7 +1213,7 @@ static int dm_keyslot_evict_callback(struct dm_target *ti, struct dm_dev *dev,  	struct dm_keyslot_evict_args *args = data;  	int err; -	err = blk_crypto_evict_key(bdev_get_queue(dev->bdev), args->key); +	err = blk_crypto_evict_key(dev->bdev, args->key);  	if (!args->err)  		args->err = err;  	/* Always try to evict the key from all devices. */ @@ -1527,7 +1525,7 @@ static bool dm_table_any_dev_attr(struct dm_table *t,  		if (ti->type->iterate_devices &&  		    ti->type->iterate_devices(ti, func, data))  			return true; -        } +	}  	return false;  } @@ -1535,7 +1533,7 @@ static bool dm_table_any_dev_attr(struct dm_table *t,  static int count_device(struct dm_target *ti, struct dm_dev *dev,  			sector_t start, sector_t len, void *data)  { -	unsigned *num_devices = data; +	unsigned int *num_devices = data;  	(*num_devices)++; @@ -1565,7 +1563,7 @@ bool dm_table_has_no_data_devices(struct dm_table *t)  {  	for (unsigned int i = 0; i < t->num_targets; i++) {  		struct dm_target *ti = dm_table_get_target(t, i); -		unsigned num_devices = 0; +		unsigned int num_devices = 0;  		if (!ti->type->iterate_devices)  			return false; @@ -1708,8 +1706,7 @@ combine_limits:  		 * for the table.  		 */  		if (blk_stack_limits(limits, &ti_limits, 0) < 0) -			DMWARN("%s: adding target device " -			       "(start sect %llu len %llu) " +			DMWARN("%s: adding target device (start sect %llu len %llu) "  			       "caused an alignment inconsistency",  			       dm_device_name(t->md),  			       (unsigned long long) ti->begin, @@ -1971,8 +1968,7 @@ int dm_table_set_restrictions(struct dm_table *t, struct request_queue *q,  		blk_queue_flag_set(QUEUE_FLAG_DAX, q);  		if (dm_table_supports_dax(t, device_not_dax_synchronous_capable))  			set_dax_synchronous(t->md->dax_dev); -	} -	else +	} else  		blk_queue_flag_clear(QUEUE_FLAG_DAX, q);  	if (dm_table_any_dev_attr(t, device_dax_write_cache_enabled, NULL))  |