From b7cf4b4ef5d0336443f21809b1506bc4a8aa75a9 Mon Sep 17 00:00:00 2001 From: Benjamin Berg Date: Thu, 5 Mar 2020 11:35:45 +0100 Subject: [PATCH] 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 --- src/core/cgroup.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/core/cgroup.c b/src/core/cgroup.c index 89fa97cb603..ddd3f408174 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); -- 2.47.3