mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 19:21:31 -04:00
dm cache: add data block size limits to code and Documentation
Place upper bound on the cache's data block size (1GB). Inform users that the data block size can't be any arbitrary number, i.e. its value must be between 32KB and 1GB. Also, it should be a multiple of 32KB. Signed-off-by: Mike Snitzer <[email protected]> Signed-off-by: Alasdair G Kergon <[email protected]> Acked-by: Joe Thornber <[email protected]>
This commit is contained in:
parent
66bb2644ca
commit
0547304463
2 changed files with 12 additions and 8 deletions
|
|
@ -67,9 +67,11 @@ static void free_bitset(unsigned long *bits)
|
|||
#define MIGRATION_COUNT_WINDOW 10
|
||||
|
||||
/*
|
||||
* The block size of the device holding cache data must be >= 32KB
|
||||
* The block size of the device holding cache data must be
|
||||
* between 32KB and 1GB.
|
||||
*/
|
||||
#define DATA_DEV_BLOCK_SIZE_MIN_SECTORS (32 * 1024 >> SECTOR_SHIFT)
|
||||
#define DATA_DEV_BLOCK_SIZE_MAX_SECTORS (1024 * 1024 * 1024 >> SECTOR_SHIFT)
|
||||
|
||||
/*
|
||||
* FIXME: the cache is read/write for the time being.
|
||||
|
|
@ -1687,24 +1689,25 @@ static int parse_origin_dev(struct cache_args *ca, struct dm_arg_set *as,
|
|||
static int parse_block_size(struct cache_args *ca, struct dm_arg_set *as,
|
||||
char **error)
|
||||
{
|
||||
unsigned long tmp;
|
||||
unsigned long block_size;
|
||||
|
||||
if (!at_least_one_arg(as, error))
|
||||
return -EINVAL;
|
||||
|
||||
if (kstrtoul(dm_shift_arg(as), 10, &tmp) || !tmp ||
|
||||
tmp < DATA_DEV_BLOCK_SIZE_MIN_SECTORS ||
|
||||
tmp & (DATA_DEV_BLOCK_SIZE_MIN_SECTORS - 1)) {
|
||||
if (kstrtoul(dm_shift_arg(as), 10, &block_size) || !block_size ||
|
||||
block_size < DATA_DEV_BLOCK_SIZE_MIN_SECTORS ||
|
||||
block_size > DATA_DEV_BLOCK_SIZE_MAX_SECTORS ||
|
||||
block_size & (DATA_DEV_BLOCK_SIZE_MIN_SECTORS - 1)) {
|
||||
*error = "Invalid data block size";
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (tmp > ca->cache_sectors) {
|
||||
if (block_size > ca->cache_sectors) {
|
||||
*error = "Data block size is larger than the cache device";
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
ca->block_size = tmp;
|
||||
ca->block_size = block_size;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue