vfs: Add new setgid_create_acl test
[xfstests-dev.git] / src / log-writes / log-writes.h
1 // SPDX-License-Identifier: GPL-2.0
2 #ifndef _LOG_WRITES_H_
3 #define _LOG_WRITES_H_
4
5 #include <linux/types.h>
6 #include <endian.h>
7 #if __BYTE_ORDER == __LITTLE_ENDIAN
8 #include <linux/byteorder/little_endian.h>
9 #else
10 #include <linux/byteorder/big_endian.h>
11 #endif
12
13 extern int log_writes_verbose;
14
15 #define le64_to_cpu __le64_to_cpu
16 #define le32_to_cpu __le32_to_cpu
17
18 typedef __u64 u64;
19 typedef __u32 u32;
20
21 /*
22  * Constants copied from kernel file drivers/md/dm-log-writes.c
23  */
24 #define LOG_FLUSH_FLAG          (1 << 0)
25 #define LOG_FUA_FLAG            (1 << 1)
26 #define LOG_DISCARD_FLAG        (1 << 2)
27 #define LOG_MARK_FLAG           (1 << 3)
28 #define LOG_METADATA_FLAG       (1 << 4)
29
30 #define WRITE_LOG_VERSION 1
31 #define WRITE_LOG_MAGIC 0x6a736677736872
32
33
34 /*
35  * Basic info about the log for userspace.
36  *
37  * Copied from kernel file drivers/md/dm-log-writes.c
38  */
39 struct log_write_super {
40         __le64 magic;
41         __le64 version;
42         __le64 nr_entries;
43         __le32 sectorsize;
44 };
45
46 /*
47  * sector - the sector we wrote.
48  * nr_sectors - the number of sectors we wrote.
49  * flags - flags for this log entry.
50  * data_len - the size of the data in this log entry, this is for private log
51  * entry stuff, the MARK data provided by userspace for example.
52  *
53  * Copied from kernel file drivers/md/dm-log-writes.c
54  */
55 struct log_write_entry {
56         __le64 sector;
57         __le64 nr_sectors;
58         __le64 flags;
59         __le64 data_len;
60         /* Read extra byte when seeking to verify that header is zero padded */
61         char data[1];
62 };
63
64 #define LOG_IGNORE_DISCARD (1 << 0)
65 #define LOG_DISCARD_NOT_SUPP (1 << 1)
66
67 struct log {
68         int logfd;
69         int replayfd;
70         unsigned long flags;
71         u64 sectorsize;
72         u64 start_sector;
73         u64 end_sector;
74         u64 nr_entries;
75         u64 cur_entry;
76         u64 max_zero_size;
77         off_t cur_pos;
78 };
79
80 struct log *log_open(char *logfile, char *replayfile);
81 int log_replay_next_entry(struct log *log, struct log_write_entry *entry,
82                           int read_data);
83 int log_seek_entry(struct log *log, u64 entry_num);
84 int log_seek_next_entry(struct log *log, struct log_write_entry *entry,
85                         int read_data);
86 void log_free(struct log *log);
87
88 #endif