summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2022-04-04 15:18:57 +0200
committerLennart Poettering <lennart@poettering.net>2022-04-04 18:21:41 +0200
commit1ce0d040593c92adebceed29618f170faaee0839 (patch)
tree97749f056420561a73be316c483526b7b6587618
parentd4df6ce2154caa4e1f2fc2df818cd32b523a96ab (diff)
downloadsystemd-1ce0d040593c92adebceed29618f170faaee0839.tar.gz
sd-device: actually read diskseq if told so
sd_device_get_diskseq() actually called device_read_uevent_file() but that function didn't actually parse DISKSEQ= so far. Fix that.
-rw-r--r--src/libsystemd/sd-device/device-internal.h1
-rw-r--r--src/libsystemd/sd-device/device-private.c22
-rw-r--r--src/libsystemd/sd-device/sd-device.c33
3 files changed, 33 insertions, 23 deletions
diff --git a/src/libsystemd/sd-device/device-internal.h b/src/libsystemd/sd-device/device-internal.h
index 49d0f0fd1f..7ea964acf9 100644
--- a/src/libsystemd/sd-device/device-internal.h
+++ b/src/libsystemd/sd-device/device-internal.h
@@ -109,6 +109,7 @@ int device_set_devname(sd_device *device, const char *devname);
int device_set_devtype(sd_device *device, const char *devtype);
int device_set_devnum(sd_device *device, const char *major, const char *minor);
int device_set_subsystem(sd_device *device, const char *subsystem);
+int device_set_diskseq(sd_device *device, const char *str);
int device_set_drivers_subsystem(sd_device *device);
int device_set_driver(sd_device *device, const char *driver);
int device_set_usec_initialized(sd_device *device, usec_t when);
diff --git a/src/libsystemd/sd-device/device-private.c b/src/libsystemd/sd-device/device-private.c
index 5f3644aac4..de12ad7e00 100644
--- a/src/libsystemd/sd-device/device-private.c
+++ b/src/libsystemd/sd-device/device-private.c
@@ -255,28 +255,6 @@ static int device_set_seqnum(sd_device *device, const char *str) {
return 0;
}
-static int device_set_diskseq(sd_device *device, const char *str) {
- uint64_t diskseq;
- int r;
-
- assert(device);
- assert(str);
-
- r = safe_atou64(str, &diskseq);
- if (r < 0)
- return r;
- if (diskseq == 0)
- return -EINVAL;
-
- r = device_add_property_internal(device, "DISKSEQ", str);
- if (r < 0)
- return r;
-
- device->diskseq = diskseq;
-
- return 0;
-}
-
static int device_amend(sd_device *device, const char *key, const char *value) {
int r;
diff --git a/src/libsystemd/sd-device/sd-device.c b/src/libsystemd/sd-device/sd-device.c
index bf9217b649..22200c0eea 100644
--- a/src/libsystemd/sd-device/sd-device.c
+++ b/src/libsystemd/sd-device/sd-device.c
@@ -570,7 +570,34 @@ int device_set_devnum(sd_device *device, const char *major, const char *minor) {
return 0;
}
-static int handle_uevent_line(sd_device *device, const char *key, const char *value, const char **major, const char **minor) {
+int device_set_diskseq(sd_device *device, const char *str) {
+ uint64_t diskseq;
+ int r;
+
+ assert(device);
+ assert(str);
+
+ r = safe_atou64(str, &diskseq);
+ if (r < 0)
+ return r;
+ if (diskseq == 0)
+ return -EINVAL;
+
+ r = device_add_property_internal(device, "DISKSEQ", str);
+ if (r < 0)
+ return r;
+
+ device->diskseq = diskseq;
+
+ return 0;
+}
+
+static int handle_uevent_line(
+ sd_device *device,
+ const char *key,
+ const char *value,
+ const char **major,
+ const char **minor) {
int r;
assert(device);
@@ -595,6 +622,10 @@ static int handle_uevent_line(sd_device *device, const char *key, const char *va
r = device_set_devmode(device, value);
if (r < 0)
return r;
+ } else if (streq(key, "DISKSEQ")) {
+ r = device_set_diskseq(device, value);
+ if (r < 0)
+ return r;
} else if (streq(key, "MAJOR"))
*major = value;
else if (streq(key, "MINOR"))