Merge branch 'nvme/support-sync-fua-for-iouring-v2' of https://github.com/minwooim/fio
[fio.git] / oslib / blkzoned.h
1 /*
2  * Copyright (C) 2020 Western Digital Corporation or its affiliates.
3  *
4  * This file is released under the GPL.
5  */
6 #ifndef FIO_BLKZONED_H
7 #define FIO_BLKZONED_H
8
9 #include "zbd_types.h"
10
11 #ifdef CONFIG_HAS_BLKZONED
12 extern int blkzoned_get_zoned_model(struct thread_data *td,
13                         struct fio_file *f, enum zbd_zoned_model *model);
14 extern int blkzoned_report_zones(struct thread_data *td,
15                                 struct fio_file *f, uint64_t offset,
16                                 struct zbd_zone *zones, unsigned int nr_zones);
17 extern int blkzoned_reset_wp(struct thread_data *td, struct fio_file *f,
18                                 uint64_t offset, uint64_t length);
19 extern int blkzoned_get_max_open_zones(struct thread_data *td, struct fio_file *f,
20                                        unsigned int *max_open_zones);
21 extern int blkzoned_get_max_active_zones(struct thread_data *td,
22                                          struct fio_file *f,
23                                          unsigned int *max_active_zones);
24 extern int blkzoned_finish_zone(struct thread_data *td, struct fio_file *f,
25                                 uint64_t offset, uint64_t length);
26 #else
27 /*
28  * Define stubs for systems that do not have zoned block device support.
29  */
30 static inline int blkzoned_get_zoned_model(struct thread_data *td,
31                         struct fio_file *f, enum zbd_zoned_model *model)
32 {
33         /*
34          * If this is a block device file, allow zbd emulation.
35          */
36         if (f->filetype == FIO_TYPE_BLOCK) {
37                 *model = ZBD_NONE;
38                 return 0;
39         }
40
41         return -ENODEV;
42 }
43 static inline int blkzoned_report_zones(struct thread_data *td,
44                                 struct fio_file *f, uint64_t offset,
45                                 struct zbd_zone *zones, unsigned int nr_zones)
46 {
47         return -EIO;
48 }
49 static inline int blkzoned_reset_wp(struct thread_data *td, struct fio_file *f,
50                                     uint64_t offset, uint64_t length)
51 {
52         return -EIO;
53 }
54 static inline int blkzoned_get_max_open_zones(struct thread_data *td, struct fio_file *f,
55                                               unsigned int *max_open_zones)
56 {
57         return -EIO;
58 }
59 static inline int blkzoned_get_max_active_zones(struct thread_data *td,
60                                                 struct fio_file *f,
61                                                 unsigned int *max_open_zones)
62 {
63         return -EIO;
64 }
65 static inline int blkzoned_finish_zone(struct thread_data *td,
66                                        struct fio_file *f,
67                                        uint64_t offset, uint64_t length)
68 {
69         return -EIO;
70 }
71 #endif
72
73 #endif /* FIO_BLKZONED_H */