]> git.sesse.net Git - bcachefs-tools-debian/blob - libbcachefs/bcachefs_ioctl.h
Update bcachefs sources to f4b290345a bcachefs: device resize
[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_DISK_EVACUATE _IOW(0xbc,      9,  struct bch_ioctl_disk)
50 #define BCH_IOCTL_DATA          _IOW(0xbc,      10, struct bch_ioctl_data)
51 #define BCH_IOCTL_USAGE         _IOWR(0xbc,     11, struct bch_ioctl_usage)
52 #define BCH_IOCTL_READ_SUPER    _IOW(0xbc,      12, struct bch_ioctl_read_super)
53 #define BCH_IOCTL_DISK_GET_IDX  _IOW(0xbc,      13,  struct bch_ioctl_disk_get_idx)
54 #define BCH_IOCTL_DISK_RESIZE   _IOW(0xbc,      13,  struct bch_ioctl_disk_resize)
55
56 struct bch_ioctl_query_uuid {
57         uuid_le                 uuid;
58 };
59
60 struct bch_ioctl_start {
61         __u32                   flags;
62         __u32                   pad;
63 };
64
65 struct bch_ioctl_disk {
66         __u32                   flags;
67         __u32                   pad;
68         __u64                   dev;
69 };
70
71 struct bch_ioctl_disk_set_state {
72         __u32                   flags;
73         __u8                    new_state;
74         __u8                    pad[3];
75         __u64                   dev;
76 };
77
78 #define BCH_REWRITE_INCREASE_REPLICAS   (1 << 0)
79 #define BCH_REWRITE_DECREASE_REPLICAS   (1 << 1)
80
81 #define BCH_REWRITE_RECOMPRESS          (1 << 0)
82 #define BCH_REWRITE_DECREASE_REPLICAS   (1 << 1)
83
84 enum bch_data_ops {
85         BCH_DATA_SCRUB,
86 };
87
88 struct bch_data_op {
89         __u8                    type;
90 };
91
92 struct bch_ioctl_data {
93         __u32                   flags;
94         __u32                   pad;
95
96         __u64                   start_inode;
97         __u64                   start_offset;
98
99         __u64                   end_inode;
100         __u64                   end_offset;
101 };
102
103 struct bch_ioctl_dev_usage {
104         __u8                    state;
105         __u8                    alive;
106         __u8                    pad[6];
107         __u32                   dev;
108
109         __u32                   bucket_size;
110         __u64                   nr_buckets;
111
112         __u64                   buckets[BCH_DATA_NR];
113         __u64                   sectors[BCH_DATA_NR];
114 };
115
116 struct bch_ioctl_fs_usage {
117         __u64                   capacity;
118         __u64                   used;
119         __u64                   online_reserved;
120         __u64                   persistent_reserved[BCH_REPLICAS_MAX];
121         __u64                   sectors[BCH_DATA_NR][BCH_REPLICAS_MAX];
122 };
123
124 struct bch_ioctl_usage {
125         __u16                   nr_devices;
126         __u16                   pad[3];
127
128         struct bch_ioctl_fs_usage fs;
129         struct bch_ioctl_dev_usage devs[0];
130 };
131
132 struct bch_ioctl_read_super {
133         __u32                   flags;
134         __u32                   pad;
135         __u64                   dev;
136         __u64                   size;
137         __u64                   sb;
138 };
139
140 struct bch_ioctl_disk_get_idx {
141         __u64                   dev;
142 };
143
144 struct bch_ioctl_disk_resize {
145         __u32                   flags;
146         __u32                   pad;
147         __u64                   dev;
148         __u64                   nbuckets;
149 };
150
151 #endif /* _BCACHEFS_IOCTL_H */