struct libzbc_data **p_ld)
{
struct libzbc_data *ld = td->io_ops_data;
- int ret, flags = OS_O_DIRECT;
+ int ret, flags = OS_O_DIRECT;
if (ld) {
/* Already open */
return -EINVAL;
}
- if (td_write(td)) {
+ if (td_write(td)) {
if (!read_only)
flags |= O_RDWR;
} else if (td_read(td)) {
flags |= O_RDONLY;
} else if (td_trim(td)) {
td_verror(td, EINVAL, "libzbc does not support trim");
- log_err("%s: libzbc does not support trim\n",
- f->file_name);
- return -EINVAL;
+ log_err("%s: libzbc does not support trim\n", f->file_name);
+ return -EINVAL;
}
- if (td->o.oatomic) {
+ if (td->o.oatomic) {
td_verror(td, EINVAL, "libzbc does not support O_ATOMIC");
- log_err("%s: libzbc does not support O_ATOMIC\n",
- f->file_name);
- return -EINVAL;
- }
+ log_err("%s: libzbc does not support O_ATOMIC\n", f->file_name);
+ return -EINVAL;
+ }
ld = calloc(1, sizeof(*ld));
if (!ld)
return -ENOMEM;
ret = zbc_open(f->file_name,
- flags | ZBC_O_DRV_SCSI | ZBC_O_DRV_ATA, &ld->zdev);
+ flags | ZBC_O_DRV_BLOCK | ZBC_O_DRV_SCSI | ZBC_O_DRV_ATA,
+ &ld->zdev);
if (ret) {
log_err("%s: zbc_open() failed, err=%d\n",
f->file_name, ret);
- return ret;
+ goto err;
}
ret = libzbc_get_dev_info(ld, f);
- if (ret) {
- zbc_close(ld->zdev);
- free(ld);
- return ret;
- }
+ if (ret)
+ goto err_close;
td->io_ops_data = ld;
out:
*p_ld = ld;
return 0;
+
+err_close:
+ zbc_close(ld->zdev);
+err:
+ free(ld);
+ return ret;
}
static int libzbc_close_dev(struct thread_data *td)
zbdz->start = zones[i].zbz_start << 9;
zbdz->len = zones[i].zbz_length << 9;
zbdz->wp = zones[i].zbz_write_pointer << 9;
+ /*
+ * ZBC/ZAC do not define zone capacity, so use the zone size as
+ * the zone capacity.
+ */
+ zbdz->capacity = zbdz->len;
switch (zones[i].zbz_type) {
case ZBC_ZT_CONVENTIONAL:
default:
/* Treat all these conditions as offline (don't use!) */
zbdz->cond = ZBD_ZONE_COND_OFFLINE;
- break;
+ zbdz->wp = zbdz->start;
}
}
return FIO_Q_COMPLETED;
}
-static struct ioengine_ops ioengine = {
+FIO_STATIC struct ioengine_ops ioengine = {
.name = "libzbc",
.version = FIO_IOOPS_VERSION,
.open_file = libzbc_open_file,