Skip to content

Commit fa78526

Browse files
committed
Merge tag 'for-5.19/dm-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/device-mapper/linux-dm
Pull device mapper fixes from Mike Snitzer: - Fix DM core's dm_table_supports_poll to return false if target has no data devices. - Fix DM verity target so that it cannot be switched to a different DM target type (e.g. dm-linear) via DM table reload. * tag 'for-5.19/dm-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/device-mapper/linux-dm: dm verity: set DM_TARGET_IMMUTABLE feature flag dm table: fix dm_table_supports_poll to return false if no data devices
2 parents c799314 + 4caae58 commit fa78526

File tree

2 files changed

+16
-4
lines changed

2 files changed

+16
-4
lines changed

drivers/md/dm-table.c

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1005,7 +1005,7 @@ bool dm_table_request_based(struct dm_table *t)
10051005
return __table_type_request_based(dm_table_get_type(t));
10061006
}
10071007

1008-
static int dm_table_supports_poll(struct dm_table *t);
1008+
static bool dm_table_supports_poll(struct dm_table *t);
10091009

10101010
static int dm_table_alloc_md_mempools(struct dm_table *t, struct mapped_device *md)
10111011
{
@@ -1027,7 +1027,7 @@ static int dm_table_alloc_md_mempools(struct dm_table *t, struct mapped_device *
10271027
per_io_data_size = max(per_io_data_size, ti->per_io_data_size);
10281028
min_pool_size = max(min_pool_size, ti->num_flush_bios);
10291029
}
1030-
poll_supported = !!dm_table_supports_poll(t);
1030+
poll_supported = dm_table_supports_poll(t);
10311031
}
10321032

10331033
t->mempools = dm_alloc_md_mempools(md, type, per_io_data_size, min_pool_size,
@@ -1547,9 +1547,20 @@ static int count_device(struct dm_target *ti, struct dm_dev *dev,
15471547
return 0;
15481548
}
15491549

1550-
static int dm_table_supports_poll(struct dm_table *t)
1550+
static bool dm_table_supports_poll(struct dm_table *t)
15511551
{
1552-
return !dm_table_any_dev_attr(t, device_not_poll_capable, NULL);
1552+
struct dm_target *ti;
1553+
unsigned i = 0;
1554+
1555+
while (i < dm_table_get_num_targets(t)) {
1556+
ti = dm_table_get_target(t, i++);
1557+
1558+
if (!ti->type->iterate_devices ||
1559+
ti->type->iterate_devices(ti, device_not_poll_capable, NULL))
1560+
return false;
1561+
}
1562+
1563+
return true;
15531564
}
15541565

15551566
/*

drivers/md/dm-verity-target.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1312,6 +1312,7 @@ static int verity_ctr(struct dm_target *ti, unsigned argc, char **argv)
13121312

13131313
static struct target_type verity_target = {
13141314
.name = "verity",
1315+
.features = DM_TARGET_IMMUTABLE,
13151316
.version = {1, 8, 0},
13161317
.module = THIS_MODULE,
13171318
.ctr = verity_ctr,

0 commit comments

Comments
 (0)