diff options
author | Benjamin Berg <bberg@redhat.com> | 2020-03-05 11:35:45 +0100 |
---|---|---|
committer | Chris Down <chris@chrisdown.name> | 2020-03-06 16:11:44 +0000 |
commit | b7cf4b4ef5d0336443f21809b1506bc4a8aa75a9 (patch) | |
tree | 367a814b9d801560b3fd254560ece2dd970c8d0c | |
parent | 57680ddd403530b88c0150642962e222a70e1b2b (diff) | |
download | systemd-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.c | 4 |
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); |