aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/md/dm-thin.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/md/dm-thin.c')
-rw-r--r--drivers/md/dm-thin.c19
1 files changed, 4 insertions, 15 deletions
diff --git a/drivers/md/dm-thin.c b/drivers/md/dm-thin.c
index bcb143396fe0..2378ee88b1e8 100644
--- a/drivers/md/dm-thin.c
+++ b/drivers/md/dm-thin.c
@@ -33,16 +33,6 @@
33#define DATA_DEV_BLOCK_SIZE_MAX_SECTORS (1024 * 1024 * 1024 >> SECTOR_SHIFT) 33#define DATA_DEV_BLOCK_SIZE_MAX_SECTORS (1024 * 1024 * 1024 >> SECTOR_SHIFT)
34 34
35/* 35/*
36 * The metadata device is currently limited in size. The limitation is
37 * checked lower down in dm-space-map-metadata, but we also check it here
38 * so we can fail early.
39 *
40 * We have one block of index, which can hold 255 index entries. Each
41 * index entry contains allocation info about 16k metadata blocks.
42 */
43#define METADATA_DEV_MAX_SECTORS (255 * (1 << 14) * (THIN_METADATA_BLOCK_SIZE / (1 << SECTOR_SHIFT)))
44
45/*
46 * Device id is restricted to 24 bits. 36 * Device id is restricted to 24 bits.
47 */ 37 */
48#define MAX_DEV_ID ((1 << 24) - 1) 38#define MAX_DEV_ID ((1 << 24) - 1)
@@ -1736,6 +1726,7 @@ static int pool_ctr(struct dm_target *ti, unsigned argc, char **argv)
1736 dm_block_t low_water_blocks; 1726 dm_block_t low_water_blocks;
1737 struct dm_dev *metadata_dev; 1727 struct dm_dev *metadata_dev;
1738 sector_t metadata_dev_size; 1728 sector_t metadata_dev_size;
1729 char b[BDEVNAME_SIZE];
1739 1730
1740 /* 1731 /*
1741 * FIXME Remove validation from scope of lock. 1732 * FIXME Remove validation from scope of lock.
@@ -1757,11 +1748,9 @@ static int pool_ctr(struct dm_target *ti, unsigned argc, char **argv)
1757 } 1748 }
1758 1749
1759 metadata_dev_size = i_size_read(metadata_dev->bdev->bd_inode) >> SECTOR_SHIFT; 1750 metadata_dev_size = i_size_read(metadata_dev->bdev->bd_inode) >> SECTOR_SHIFT;
1760 if (metadata_dev_size > METADATA_DEV_MAX_SECTORS) { 1751 if (metadata_dev_size > THIN_METADATA_MAX_SECTORS_WARNING)
1761 ti->error = "Metadata device is too large"; 1752 DMWARN("Metadata device %s is larger than %u sectors: excess space will not be used.",
1762 r = -EINVAL; 1753 bdevname(metadata_dev->bdev, b), THIN_METADATA_MAX_SECTORS);
1763 goto out_metadata;
1764 }
1765 1754
1766 r = dm_get_device(ti, argv[1], FMODE_READ | FMODE_WRITE, &data_dev); 1755 r = dm_get_device(ti, argv[1], FMODE_READ | FMODE_WRITE, &data_dev);
1767 if (r) { 1756 if (r) {