Skip to content

Commit d3c7b35

Browse files
mauelshasnitm
authored andcommitted
dm: add emulated block size target
This new target is similar to the linear target except that it emulates a smaller logical block size on a device with a larger logical block size. Its main purpose is to emulate 512 byte sectors on 4K native disks (i.e. 512e). See Documentation/admin-guide/device-mapper/dm-ebs.rst for details. Reviewed-by: Damien Le Moal <[email protected]> Signed-off-by: Heinz Mauelshagen <[email protected]> Signed-off-by: Randy Dunlap <[email protected]> [Kconfig fixes] Signed-off-by: Zheng Bin <[email protected]> [static fixes] Signed-off-by: Mike Snitzer <[email protected]>
1 parent 2361ae5 commit d3c7b35

File tree

4 files changed

+505
-0
lines changed

4 files changed

+505
-0
lines changed
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
======
2+
dm-ebs
3+
======
4+
5+
6+
This target is similar to the linear target except that it emulates
7+
a smaller logical block size on a device with a larger logical block
8+
size. Its main purpose is to provide emulation of 512 byte sectors on
9+
devices that do not provide this emulation (i.e. 4K native disks).
10+
11+
Supported emulated logical block sizes 512, 1024, 2048 and 4096.
12+
13+
Underlying block size can be set to > 4K to test buffering larger units.
14+
15+
16+
Table parameters
17+
----------------
18+
<dev path> <offset> <emulated sectors> [<underlying sectors>]
19+
20+
Mandatory parameters:
21+
22+
<dev path>:
23+
Full pathname to the underlying block-device,
24+
or a "major:minor" device-number.
25+
<offset>:
26+
Starting sector within the device;
27+
has to be a multiple of <emulated sectors>.
28+
<emulated sectors>:
29+
Number of sectors defining the logical block size to be emulated;
30+
1, 2, 4, 8 sectors of 512 bytes supported.
31+
32+
Optional parameter:
33+
34+
<underyling sectors>:
35+
Number of sectors defining the logical block size of <dev path>.
36+
2^N supported, e.g. 8 = emulate 8 sectors of 512 bytes = 4KiB.
37+
If not provided, the logical block size of <dev path> will be used.
38+
39+
40+
Examples:
41+
42+
Emulate 1 sector = 512 bytes logical block size on /dev/sda starting at
43+
offset 1024 sectors with underlying devices block size automatically set:
44+
45+
ebs /dev/sda 1024 1
46+
47+
Emulate 2 sector = 1KiB logical block size on /dev/sda starting at
48+
offset 128 sectors, enforce 2KiB underlying device block size.
49+
This presumes 2KiB logical blocksize on /dev/sda or less to work:
50+
51+
ebs /dev/sda 128 2 4

drivers/md/Kconfig

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -337,6 +337,14 @@ config DM_WRITECACHE
337337
The writecache target doesn't cache reads because reads are supposed
338338
to be cached in standard RAM.
339339

340+
config DM_EBS
341+
tristate "Emulated block size target (EXPERIMENTAL)"
342+
depends on BLK_DEV_DM
343+
select DM_BUFIO
344+
help
345+
dm-ebs emulates smaller logical block size on backing devices
346+
with larger ones (e.g. 512 byte sectors on 4K native disks).
347+
340348
config DM_ERA
341349
tristate "Era target (EXPERIMENTAL)"
342350
depends on BLK_DEV_DM

drivers/md/Makefile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ dm-thin-pool-y += dm-thin.o dm-thin-metadata.o
1717
dm-cache-y += dm-cache-target.o dm-cache-metadata.o dm-cache-policy.o \
1818
dm-cache-background-tracker.o
1919
dm-cache-smq-y += dm-cache-policy-smq.o
20+
dm-ebs-y += dm-ebs-target.o
2021
dm-era-y += dm-era-target.o
2122
dm-clone-y += dm-clone-target.o dm-clone-metadata.o
2223
dm-verity-y += dm-verity-target.o
@@ -65,6 +66,7 @@ obj-$(CONFIG_DM_THIN_PROVISIONING) += dm-thin-pool.o
6566
obj-$(CONFIG_DM_VERITY) += dm-verity.o
6667
obj-$(CONFIG_DM_CACHE) += dm-cache.o
6768
obj-$(CONFIG_DM_CACHE_SMQ) += dm-cache-smq.o
69+
obj-$(CONFIG_DM_EBS) += dm-ebs.o
6870
obj-$(CONFIG_DM_ERA) += dm-era.o
6971
obj-$(CONFIG_DM_CLONE) += dm-clone.o
7072
obj-$(CONFIG_DM_LOG_WRITES) += dm-log-writes.o

0 commit comments

Comments
 (0)