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 <y0.cho@samsung.com>
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);