From: Lennart Poettering Date: Mon, 13 Jan 2020 19:02:01 +0000 (+0100) Subject: cgroup: use log_warning_errno() where possible X-Git-Tag: v245-rc1~126^2~4 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=57f1030b1373455c531bf01e005fd62edcf5005f;p=thirdparty%2Fsystemd.git cgroup: use log_warning_errno() where possible --- diff --git a/src/core/cgroup.c b/src/core/cgroup.c index af2efd46fa7..4e9e59ac822 100644 --- a/src/core/cgroup.c +++ b/src/core/cgroup.c @@ -651,30 +651,31 @@ static int lookup_block_device(const char *p, dev_t *ret) { r = device_path_parse_major_minor(p, &mode, &rdev); if (r == -ENODEV) { /* not a parsable device node, need to go to disk */ struct stat st; + if (stat(p, &st) < 0) return log_warning_errno(errno, "Couldn't stat device '%s': %m", p); + rdev = (dev_t)st.st_rdev; dev = (dev_t)st.st_dev; mode = st.st_mode; } else if (r < 0) return log_warning_errno(r, "Failed to parse major/minor from path '%s': %m", p); - if (S_ISCHR(mode)) { - log_warning("Device node '%s' is a character device, but block device needed.", p); - return -ENOTBLK; - } else if (S_ISBLK(mode)) + if (S_ISCHR(mode)) + return log_warning_errno(SYNTHETIC_ERRNO(ENOTBLK), + "Device node '%s' is a character device, but block device needed.", p); + if (S_ISBLK(mode)) *ret = rdev; else if (major(dev) != 0) *ret = dev; /* If this is not a device node then use the block device this file is stored on */ else { /* If this is btrfs, getting the backing block device is a bit harder */ r = btrfs_get_block_device(p, ret); - if (r < 0 && r != -ENOTTY) + if (r == -ENOTTY) + return log_warning_errno(SYNTHETIC_ERRNO(ENODEV), + "'%s' is not a block device node, and file system block device cannot be determined or is not local.", p); + if (r < 0) return log_warning_errno(r, "Failed to determine block device backing btrfs file system '%s': %m", p); - if (r == -ENOTTY) { - log_warning("'%s' is not a block device node, and file system block device cannot be determined or is not local.", p); - return -ENODEV; - } } /* If this is a LUKS device, try to get the originating block device */