diff options
Diffstat (limited to 'drivers/md')
| -rw-r--r-- | drivers/md/dm-exception-store.c | 20 | ||||
| -rw-r--r-- | drivers/md/dm-exception-store.h | 8 | ||||
| -rw-r--r-- | drivers/md/dm-snap-persistent.c | 16 | ||||
| -rw-r--r-- | drivers/md/dm-snap.c | 4 | 
4 files changed, 25 insertions, 23 deletions
diff --git a/drivers/md/dm-exception-store.c b/drivers/md/dm-exception-store.c index e5de7627c52..932d1b12314 100644 --- a/drivers/md/dm-exception-store.c +++ b/drivers/md/dm-exception-store.c @@ -155,7 +155,8 @@ static int set_chunk_size(struct dm_exception_store *store,  	char *value;  	chunk_size_ulong = simple_strtoul(chunk_size_arg, &value, 10); -	if (*chunk_size_arg == '\0' || *value != '\0') { +	if (*chunk_size_arg == '\0' || *value != '\0' || +	    chunk_size_ulong > UINT_MAX) {  		*error = "Invalid chunk size";  		return -EINVAL;  	} @@ -171,34 +172,35 @@ static int set_chunk_size(struct dm_exception_store *store,  	 */  	chunk_size_ulong = round_up(chunk_size_ulong, PAGE_SIZE >> 9); -	return dm_exception_store_set_chunk_size(store, chunk_size_ulong, +	return dm_exception_store_set_chunk_size(store, +						 (unsigned) chunk_size_ulong,  						 error);  }  int dm_exception_store_set_chunk_size(struct dm_exception_store *store, -				      unsigned long chunk_size_ulong, +				      unsigned chunk_size,  				      char **error)  {  	/* Check chunk_size is a power of 2 */ -	if (!is_power_of_2(chunk_size_ulong)) { +	if (!is_power_of_2(chunk_size)) {  		*error = "Chunk size is not a power of 2";  		return -EINVAL;  	}  	/* Validate the chunk size against the device block size */ -	if (chunk_size_ulong % (bdev_logical_block_size(store->cow->bdev) >> 9)) { +	if (chunk_size % (bdev_logical_block_size(store->cow->bdev) >> 9)) {  		*error = "Chunk size is not a multiple of device blocksize";  		return -EINVAL;  	} -	if (chunk_size_ulong > INT_MAX >> SECTOR_SHIFT) { +	if (chunk_size > INT_MAX >> SECTOR_SHIFT) {  		*error = "Chunk size is too high";  		return -EINVAL;  	} -	store->chunk_size = chunk_size_ulong; -	store->chunk_mask = chunk_size_ulong - 1; -	store->chunk_shift = ffs(chunk_size_ulong) - 1; +	store->chunk_size = chunk_size; +	store->chunk_mask = chunk_size - 1; +	store->chunk_shift = ffs(chunk_size) - 1;  	return 0;  } diff --git a/drivers/md/dm-exception-store.h b/drivers/md/dm-exception-store.h index 812c71872ba..8a223a48802 100644 --- a/drivers/md/dm-exception-store.h +++ b/drivers/md/dm-exception-store.h @@ -101,9 +101,9 @@ struct dm_exception_store {  	struct dm_dev *cow;  	/* Size of data blocks saved - must be a power of 2 */ -	chunk_t chunk_size; -	chunk_t chunk_mask; -	chunk_t chunk_shift; +	unsigned chunk_size; +	unsigned chunk_mask; +	unsigned chunk_shift;  	void *context;  }; @@ -169,7 +169,7 @@ int dm_exception_store_type_register(struct dm_exception_store_type *type);  int dm_exception_store_type_unregister(struct dm_exception_store_type *type);  int dm_exception_store_set_chunk_size(struct dm_exception_store *store, -				      unsigned long chunk_size_ulong, +				      unsigned chunk_size,  				      char **error);  int dm_exception_store_create(struct dm_target *ti, int argc, char **argv, diff --git a/drivers/md/dm-snap-persistent.c b/drivers/md/dm-snap-persistent.c index d5b2e08750d..0c746420c00 100644 --- a/drivers/md/dm-snap-persistent.c +++ b/drivers/md/dm-snap-persistent.c @@ -284,12 +284,13 @@ static int read_header(struct pstore *ps, int *new_snapshot)  {  	int r;  	struct disk_header *dh; -	chunk_t chunk_size; +	unsigned chunk_size;  	int chunk_size_supplied = 1;  	char *chunk_err;  	/* -	 * Use default chunk size (or hardsect_size, if larger) if none supplied +	 * Use default chunk size (or logical_block_size, if larger) +	 * if none supplied  	 */  	if (!ps->store->chunk_size) {  		ps->store->chunk_size = max(DM_CHUNK_SIZE_DEFAULT_SECTORS, @@ -334,10 +335,9 @@ static int read_header(struct pstore *ps, int *new_snapshot)  		return 0;  	if (chunk_size_supplied) -		DMWARN("chunk size %llu in device metadata overrides " -		       "table chunk size of %llu.", -		       (unsigned long long)chunk_size, -		       (unsigned long long)ps->store->chunk_size); +		DMWARN("chunk size %u in device metadata overrides " +		       "table chunk size of %u.", +		       chunk_size, ps->store->chunk_size);  	/* We had a bogus chunk_size. Fix stuff up. */  	free_area(ps); @@ -345,8 +345,8 @@ static int read_header(struct pstore *ps, int *new_snapshot)  	r = dm_exception_store_set_chunk_size(ps->store, chunk_size,  					      &chunk_err);  	if (r) { -		DMERR("invalid on-disk chunk size %llu: %s.", -		      (unsigned long long)chunk_size, chunk_err); +		DMERR("invalid on-disk chunk size %u: %s.", +		      chunk_size, chunk_err);  		return r;  	} diff --git a/drivers/md/dm-snap.c b/drivers/md/dm-snap.c index 9bc814aa2bb..3a3ba46e6d4 100644 --- a/drivers/md/dm-snap.c +++ b/drivers/md/dm-snap.c @@ -961,7 +961,7 @@ static void start_copy(struct dm_snap_pending_exception *pe)  	src.bdev = bdev;  	src.sector = chunk_to_sector(s->store, pe->e.old_chunk); -	src.count = min(s->store->chunk_size, dev_size - src.sector); +	src.count = min((sector_t)s->store->chunk_size, dev_size - src.sector);  	dest.bdev = s->store->cow->bdev;  	dest.sector = chunk_to_sector(s->store, pe->e.new_chunk); @@ -1402,7 +1402,7 @@ static void origin_resume(struct dm_target *ti)  	struct dm_dev *dev = ti->private;  	struct dm_snapshot *snap;  	struct origin *o; -	chunk_t chunk_size = 0; +	unsigned chunk_size = 0;  	down_read(&_origins_lock);  	o = __lookup_origin(dev->bdev);  |