projects
/
fio.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
zbd: Support zone capacity smaller than zone size
[fio.git]
/
oslib
/
linux-blkzoned.c
diff --git
a/oslib/linux-blkzoned.c
b/oslib/linux-blkzoned.c
index 61ea3a53d6d5ce1b029db3bef33a18ece1baa4ac..6fe78b9ce79dc24abe24af38b7784f34e1029648 100644
(file)
--- a/
oslib/linux-blkzoned.c
+++ b/
oslib/linux-blkzoned.c
@@
-113,6
+113,16
@@
out:
return 0;
}
return 0;
}
+static uint64_t zone_capacity(struct blk_zone_report *hdr,
+ struct blk_zone *blkz)
+{
+#ifdef CONFIG_HAVE_REP_CAPACITY
+ if (hdr->flags & BLK_ZONE_REP_CAPACITY)
+ return blkz->capacity << 9;
+#endif
+ return blkz->len << 9;
+}
+
int blkzoned_report_zones(struct thread_data *td, struct fio_file *f,
uint64_t offset, struct zbd_zone *zones,
unsigned int nr_zones)
int blkzoned_report_zones(struct thread_data *td, struct fio_file *f,
uint64_t offset, struct zbd_zone *zones,
unsigned int nr_zones)
@@
-143,12
+153,13
@@
int blkzoned_report_zones(struct thread_data *td, struct fio_file *f,
}
nr_zones = hdr->nr_zones;
}
nr_zones = hdr->nr_zones;
- blkz =
&hdr->zones[0]
;
+ blkz =
(void *) hdr + sizeof(*hdr)
;
z = &zones[0];
for (i = 0; i < nr_zones; i++, z++, blkz++) {
z->start = blkz->start << 9;
z->wp = blkz->wp << 9;
z->len = blkz->len << 9;
z = &zones[0];
for (i = 0; i < nr_zones; i++, z++, blkz++) {
z->start = blkz->start << 9;
z->wp = blkz->wp << 9;
z->len = blkz->len << 9;
+ z->capacity = zone_capacity(hdr, blkz);
switch (blkz->type) {
case BLK_ZONE_TYPE_CONVENTIONAL:
switch (blkz->type) {
case BLK_ZONE_TYPE_CONVENTIONAL: