summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Berg <bberg@redhat.com>2020-03-05 11:35:45 +0100
committerChris Down <chris@chrisdown.name>2020-03-06 16:11:44 +0000
commitb7cf4b4ef5d0336443f21809b1506bc4a8aa75a9 (patch)
tree367a814b9d801560b3fd254560ece2dd970c8d0c
parent57680ddd403530b88c0150642962e222a70e1b2b (diff)
downloadsystemd-b7cf4b4ef5d0336443f21809b1506bc4a8aa75a9.tar.gz
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
-rw-r--r--src/core/cgroup.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/core/cgroup.c b/src/core/cgroup.c
index 89fa97cb60..ddd3f40817 100644
--- a/src/core/cgroup.c
+++ b/src/core/cgroup.c
@@ -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);