From: Yu Watanabe Date: Thu, 18 Feb 2021 08:13:41 +0000 (+0900) Subject: sd-device: do not cache an empty string but clear cache on failre X-Git-Tag: v248-rc1~19^2~17 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=23ff570ba885b4112d6a0c972acf13c17e5ba775;p=thirdparty%2Fsystemd.git 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. --- diff --git a/src/libsystemd/sd-device/sd-device.c b/src/libsystemd/sd-device/sd-device.c index cc0220b04e3..68eabdef1a2 100644 --- a/src/libsystemd/sd-device/sd-device.c +++ b/src/libsystemd/sd-device/sd-device.c @@ -1985,21 +1985,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_cache_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_cached_sysattr_value(device, sysattr); + return r; } r = device_cache_sysattr_value(device, sysattr, value);