]> git.sesse.net Git - bcachefs-tools-debian/blob - libbcachefs/bcachefs_ioctl.h
Update bcachefs sources to d5e561b3cc bcachefs: BCH_DATA ioctl
[bcachefs-tools-debian] / libbcachefs / bcachefs_ioctl.h
1 #ifndef _BCACHEFS_IOCTL_H
2 #define _BCACHEFS_IOCTL_H
3
4 #include <linux/uuid.h>
5 #include <asm/ioctl.h>
6 #include "bcachefs_format.h"
7
8 #define BCH_FORCE_IF_DATA_LOST          (1 << 0)
9 #define BCH_FORCE_IF_METADATA_LOST      (1 << 1)
10 #define BCH_FORCE_IF_DATA_DEGRADED      (1 << 2)
11 #define BCH_FORCE_IF_METADATA_DEGRADED  (1 << 3)
12
13 #define BCH_FORCE_IF_DEGRADED                   \
14         (BCH_FORCE_IF_DATA_DEGRADED|            \
15          BCH_FORCE_IF_METADATA_DEGRADED)
16
17 #define BCH_BY_INDEX                    (1 << 4)
18
19 #define BCH_READ_DEV                    (1 << 5)
20
21 /* global control dev: */
22
23 #define BCH_IOCTL_ASSEMBLE      _IOW(0xbc, 1, struct bch_ioctl_assemble)
24 #define BCH_IOCTL_INCREMENTAL   _IOW(0xbc, 2, struct bch_ioctl_incremental)
25
26 struct bch_ioctl_assemble {
27         __u32                   flags;
28         __u32                   nr_devs;
29         __u64                   pad;
30         __u64                   devs[];
31 };
32
33 struct bch_ioctl_incremental {
34         __u32                   flags;
35         __u64                   pad;
36         __u64                   dev;
37 };
38
39 /* filesystem ioctls: */
40
41 #define BCH_IOCTL_QUERY_UUID    _IOR(0xbc,      1,  struct bch_ioctl_query_uuid)
42 #define BCH_IOCTL_START         _IOW(0xbc,      2,  struct bch_ioctl_start)
43 #define BCH_IOCTL_STOP          _IO(0xbc,       3)
44 #define BCH_IOCTL_DISK_ADD      _IOW(0xbc,      4,  struct bch_ioctl_disk)
45 #define BCH_IOCTL_DISK_REMOVE   _IOW(0xbc,      5,  struct bch_ioctl_disk)
46 #define BCH_IOCTL_DISK_ONLINE   _IOW(0xbc,      6,  struct bch_ioctl_disk)
47 #define BCH_IOCTL_DISK_OFFLINE  _IOW(0xbc,      7,  struct bch_ioctl_disk)
48 #define BCH_IOCTL_DISK_SET_STATE _IOW(0xbc,     8,  struct bch_ioctl_disk_set_state)
49 #define BCH_IOCTL_DATA          _IOW(0xbc,      10, struct bch_ioctl_data)
50 #define BCH_IOCTL_USAGE         _IOWR(0xbc,     11, struct bch_ioctl_usage)
51 #define BCH_IOCTL_READ_SUPER    _IOW(0xbc,      12, struct bch_ioctl_read_super)
52 #define BCH_IOCTL_DISK_GET_IDX  _IOW(0xbc,      13,  struct bch_ioctl_disk_get_idx)
53 #define BCH_IOCTL_DISK_RESIZE   _IOW(0xbc,      13,  struct bch_ioctl_disk_resize)
54
55 struct bch_ioctl_query_uuid {
56         uuid_le                 uuid;
57 };
58
59 struct bch_ioctl_start {
60         __u32                   flags;
61         __u32                   pad;
62 };
63
64 struct bch_ioctl_disk {
65         __u32                   flags;
66         __u32                   pad;
67         __u64                   dev;
68 };
69
70 struct bch_ioctl_disk_set_state {
71         __u32                   flags;
72         __u8                    new_state;
73         __u8                    pad[3];
74         __u64                   dev;
75 };
76
77 enum bch_data_ops {
78         BCH_DATA_OP_SCRUB       = 0,
79         BCH_DATA_OP_REREPLICATE = 1,
80         BCH_DATA_OP_MIGRATE     = 2,
81         BCH_DATA_OP_NR          = 3,
82 };
83
84 struct bch_ioctl_data {
85         __u32                   op;
86         __u32                   flags;
87
88         struct bpos             start;
89         struct bpos             end;
90
91         union {
92         struct {
93                 __u32           dev;
94                 __u32           pad;
95         }                       migrate;
96         };
97 } __attribute__((packed, aligned(8)));
98
99 struct bch_ioctl_data_progress {
100         __u8                    data_type;
101         __u8                    btree_id;
102         __u8                    pad[2];
103         struct bpos             pos;
104
105         __u64                   sectors_done;
106         __u64                   sectors_total;
107 } __attribute__((packed, aligned(8)));
108
109 struct bch_ioctl_dev_usage {
110         __u8                    state;
111         __u8                    alive;
112         __u8                    pad[6];
113         __u32                   dev;
114
115         __u32                   bucket_size;
116         __u64                   nr_buckets;
117
118         __u64                   buckets[BCH_DATA_NR];
119         __u64                   sectors[BCH_DATA_NR];
120 };
121
122 struct bch_ioctl_fs_usage {
123         __u64                   capacity;
124         __u64                   used;
125         __u64                   online_reserved;
126         __u64                   persistent_reserved[BCH_REPLICAS_MAX];
127         __u64                   sectors[BCH_DATA_NR][BCH_REPLICAS_MAX];
128 };
129
130 struct bch_ioctl_usage {
131         __u16                   nr_devices;
132         __u16                   pad[3];
133
134         struct bch_ioctl_fs_usage fs;
135         struct bch_ioctl_dev_usage devs[0];
136 };
137
138 struct bch_ioctl_read_super {
139         __u32                   flags;
140         __u32                   pad;
141         __u64                   dev;
142         __u64                   size;
143         __u64                   sb;
144 };
145
146 struct bch_ioctl_disk_get_idx {
147         __u64                   dev;
148 };
149
150 struct bch_ioctl_disk_resize {
151         __u32                   flags;
152         __u32                   pad;
153         __u64                   dev;
154         __u64                   nbuckets;
155 };
156
157 #endif /* _BCACHEFS_IOCTL_H */