core: Fix resolution of nested DM devices for cgroups

When using the cgroups IO controller, the device that is controlled
should always be the toplevel block device. This did not get resolved
correctly for an LVM volume inside a LUKS device, because the code would
only resolve one level of indirection.

Fix this by recursively looking up the originating block device for DM
devices.

Resolves: #15008
This commit is contained in:
Benjamin Berg
2020-03-06 16:11:44 +00:00
committed by Chris Down
parent 57680ddd40
commit b7cf4b4ef5
+2 -2
View File
@@ -678,8 +678,8 @@ static int lookup_block_device(const char *p, dev_t *ret) {
return log_warning_errno(r, "Failed to determine block device backing btrfs file system '%s': %m", p);
}
/* If this is a LUKS device, try to get the originating block device */
(void) block_get_originating(*ret, ret);
/* If this is a LUKS/DM device, recursively try to get the originating block device */
while (block_get_originating(*ret, ret) > 0);
/* If this is a partition, try to get the originating block device */
(void) block_get_whole_disk(*ret, ret);