From a31178bd70164b1fc11624d926e1002b34b0efff Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Thu, 18 Feb 2021 17:13:41 +0900 Subject: [PATCH] sd-device: do not cache an empty string but clear cache on failre And propagate the original error on write. Note that some attributes are read-only. Original: upstream, https://github.com/systemd/systemd/pull/18684 Change-Id: I995f86a156b5e974844e0fec9aabf384302a0c3b Signed-off-by: Youngjae Cho --- src/libsystemd/sd-device/sd-device.c | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) diff --git a/src/libsystemd/sd-device/sd-device.c b/src/libsystemd/sd-device/sd-device.c index f35612f..04696f4 100644 --- a/src/libsystemd/sd-device/sd-device.c +++ b/src/libsystemd/sd-device/sd-device.c @@ -1851,21 +1851,9 @@ _public_ int sd_device_set_sysattr_value(sd_device *device, const char *sysattr, r = write_string_file(path, value, WRITE_STRING_FILE_DISABLE_BUFFER | WRITE_STRING_FILE_NOFOLLOW); if (r < 0) { - if (r == -ELOOP) - return -EINVAL; - if (r == -EISDIR) - return r; - - r = free_and_strdup(&value, ""); - if (r < 0) - return r; - - r = device_add_sysattr_value(device, sysattr, value); - if (r < 0) - return r; - TAKE_PTR(value); - - return -ENXIO; + /* On failure, clear cache entry, as we do not know how it fails. */ + device_remove_sysattr_value(device, sysattr); + return r; } r = device_add_sysattr_value(device, sysattr, value); -- 2.7.4