From: Thomas Weißschuh Date: Wed, 28 Dec 2022 01:47:08 +0000 (+0000) Subject: libblkid: topology: probe diskseq X-Git-Tag: v2.39-rc1~349^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0cb7e07830c412103a0e939683c2c74b7bcf5be9;p=thirdparty%2Futil-linux.git libblkid: topology: probe diskseq --- diff --git a/libblkid/docs/libblkid-sections.txt b/libblkid/docs/libblkid-sections.txt index d54cf66e0f..9297002532 100644 --- a/libblkid/docs/libblkid-sections.txt +++ b/libblkid/docs/libblkid-sections.txt @@ -151,6 +151,7 @@ blkid_probe_enable_topology blkid_probe_get_topology blkid_topology_get_alignment_offset blkid_topology_get_dax +blkid_topology_get_diskseq blkid_topology_get_logical_sector_size blkid_topology_get_minimum_io_size blkid_topology_get_optimal_io_size diff --git a/libblkid/samples/topology.c b/libblkid/samples/topology.c index 7d21567d54..8dfb9c5bb2 100644 --- a/libblkid/samples/topology.c +++ b/libblkid/samples/topology.c @@ -11,6 +11,7 @@ #include #include #include +#include #include @@ -53,6 +54,8 @@ int main(int argc, char *argv[]) blkid_topology_get_physical_sector_size(tp)); printf("\tdax support : %lu\n", blkid_topology_get_dax(tp)); + printf("\tdiskseq : %"PRId64"\n", + blkid_topology_get_diskseq(tp)); } /* diff --git a/libblkid/src/blkid.h.in b/libblkid/src/blkid.h.in index 6132cb8a1a..c232d72fd1 100644 --- a/libblkid/src/blkid.h.in +++ b/libblkid/src/blkid.h.in @@ -333,6 +333,8 @@ extern unsigned long blkid_topology_get_physical_sector_size(blkid_topology tp) __ul_attribute__((nonnull)); extern unsigned long blkid_topology_get_dax(blkid_topology tp) __ul_attribute__((nonnull)); +extern uint64_t blkid_topology_get_diskseq(blkid_topology tp) + __ul_attribute__((nonnull)); /* * partitions probing diff --git a/libblkid/src/libblkid.sym b/libblkid/src/libblkid.sym index 366f2c0c04..775b0246ca 100644 --- a/libblkid/src/libblkid.sym +++ b/libblkid/src/libblkid.sym @@ -183,3 +183,7 @@ BLKID_2_37 { blkid_probe_set_hint; blkid_probe_reset_hints; } BLKID_2_36; + +BLKID_2_39 { + blkid_topology_get_diskseq; +} BLKID_2_37; diff --git a/libblkid/src/topology/ioctl.c b/libblkid/src/topology/ioctl.c index 3aba09e4fc..0603eb9127 100644 --- a/libblkid/src/topology/ioctl.c +++ b/libblkid/src/topology/ioctl.c @@ -33,7 +33,8 @@ static struct topology_val { { BLKALIGNOFF, NULL, blkid_topology_set_alignment_offset }, { BLKIOMIN, blkid_topology_set_minimum_io_size }, { BLKIOOPT, blkid_topology_set_optimal_io_size }, - { BLKPBSZGET, blkid_topology_set_physical_sector_size } + { BLKPBSZGET, blkid_topology_set_physical_sector_size }, + { BLKGETDISKSEQ, blkid_topology_set_diskseq }, /* we read BLKSSZGET in topology.c */ }; diff --git a/libblkid/src/topology/sysfs.c b/libblkid/src/topology/sysfs.c index 745cd115aa..fe13f940f1 100644 --- a/libblkid/src/topology/sysfs.c +++ b/libblkid/src/topology/sysfs.c @@ -38,6 +38,7 @@ static struct topology_val { { "queue/optimal_io_size", blkid_topology_set_optimal_io_size }, { "queue/physical_block_size", blkid_topology_set_physical_sector_size }, { "queue/dax", blkid_topology_set_dax }, + { "diskseq", blkid_topology_set_diskseq }, }; static int probe_sysfs_tp(blkid_probe pr, diff --git a/libblkid/src/topology/topology.c b/libblkid/src/topology/topology.c index d638c4c203..d34e7a0bbb 100644 --- a/libblkid/src/topology/topology.c +++ b/libblkid/src/topology/topology.c @@ -68,6 +68,7 @@ struct blkid_struct_topology { unsigned long logical_sector_size; unsigned long physical_sector_size; unsigned long dax; + uint64_t diskseq; }; /* @@ -312,6 +313,14 @@ int blkid_topology_set_dax(blkid_probe pr, unsigned long val) val); } +int blkid_topology_set_diskseq(blkid_probe pr, uint64_t val) +{ + return topology_set_value(pr, + "DISKSEQ", + offsetof(struct blkid_struct_topology, diskseq), + val); +} + /** * blkid_topology_get_alignment_offset: * @tp: topology @@ -379,3 +388,16 @@ unsigned long blkid_topology_get_dax(blkid_topology tp) { return tp->dax; } + +/** + * blkid_topology_get_diskseq + * @tp: topology + * + * Returns: disk sequence number + * + * Since: 2.39 + */ +uint64_t blkid_topology_get_diskseq(blkid_topology tp) +{ + return tp->diskseq; +} diff --git a/libblkid/src/topology/topology.h b/libblkid/src/topology/topology.h index 3e46af9ac5..9810fe46b2 100644 --- a/libblkid/src/topology/topology.h +++ b/libblkid/src/topology/topology.h @@ -8,6 +8,7 @@ extern int blkid_topology_set_minimum_io_size(blkid_probe pr, unsigned long val) extern int blkid_topology_set_optimal_io_size(blkid_probe pr, unsigned long val); extern int blkid_topology_set_physical_sector_size(blkid_probe pr, unsigned long val); extern int blkid_topology_set_dax(blkid_probe pr, unsigned long val); +extern int blkid_topology_set_diskseq(blkid_probe pr, uint64_t val); /* * topology probers diff --git a/tests/expected/blkid/topology-disk b/tests/expected/blkid/topology-disk index 1c812b6ca1..c958c4c14d 100644 --- a/tests/expected/blkid/topology-disk +++ b/tests/expected/blkid/topology-disk @@ -1,3 +1,4 @@ +ID_FS_DISKSEQ=S ID_IOLIMIT_LOGICAL_SECTOR_SIZE=512 ID_IOLIMIT_MINIMUM_IO_SIZE=512 ID_IOLIMIT_PHYSICAL_SECTOR_SIZE=512 diff --git a/tests/expected/blkid/topology-partition b/tests/expected/blkid/topology-partition index 1c812b6ca1..c958c4c14d 100644 --- a/tests/expected/blkid/topology-partition +++ b/tests/expected/blkid/topology-partition @@ -1,3 +1,4 @@ +ID_FS_DISKSEQ=S ID_IOLIMIT_LOGICAL_SECTOR_SIZE=512 ID_IOLIMIT_MINIMUM_IO_SIZE=512 ID_IOLIMIT_PHYSICAL_SECTOR_SIZE=512 diff --git a/tests/ts/blkid/topology b/tests/ts/blkid/topology index 6dde1bc35a..fcf0724731 100755 --- a/tests/ts/blkid/topology +++ b/tests/ts/blkid/topology @@ -36,6 +36,7 @@ echo -e 'label: dos\n- - - -' | "$TS_CMD_SFDISK" -q "$TS_LODEV" "$TS_CMD_BLKID" -i -o udev "$TS_LODEV" \ 2> "$TS_ERRLOG" \ + | sed -E -e 's/^ID_FS_DISKSEQ=[[:digit:]]+$/ID_FS_DISKSEQ=S/' \ | sort > "$TS_OUTPUT" ts_finalize_subtest @@ -45,6 +46,7 @@ ts_init_subtest partition "$TS_CMD_BLKID" -i -o udev "$TS_LODEV"p1 \ 2> "$TS_ERRLOG" \ + | sed -E -e 's/^ID_FS_DISKSEQ=[[:digit:]]+$/ID_FS_DISKSEQ=S/' \ | sort > "$TS_OUTPUT" ts_finalize_subtest