xref: /aosp_15_r20/external/kernel-headers/original/uapi/linux/incrementalfs.h (revision f80ad8b4341604f5951dab671d41019a6d7087ce)
1*f80ad8b4SAndroid Build Coastguard Worker /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2*f80ad8b4SAndroid Build Coastguard Worker /*
3*f80ad8b4SAndroid Build Coastguard Worker  * Userspace interface for Incremental FS.
4*f80ad8b4SAndroid Build Coastguard Worker  *
5*f80ad8b4SAndroid Build Coastguard Worker  * Incremental FS is special-purpose Linux virtual file system that allows
6*f80ad8b4SAndroid Build Coastguard Worker  * execution of a program while its binary and resource files are still being
7*f80ad8b4SAndroid Build Coastguard Worker  * lazily downloaded over the network, USB etc.
8*f80ad8b4SAndroid Build Coastguard Worker  *
9*f80ad8b4SAndroid Build Coastguard Worker  * Copyright 2019 Google LLC
10*f80ad8b4SAndroid Build Coastguard Worker  */
11*f80ad8b4SAndroid Build Coastguard Worker #ifndef _UAPI_LINUX_INCREMENTALFS_H
12*f80ad8b4SAndroid Build Coastguard Worker #define _UAPI_LINUX_INCREMENTALFS_H
13*f80ad8b4SAndroid Build Coastguard Worker 
14*f80ad8b4SAndroid Build Coastguard Worker #include <linux/limits.h>
15*f80ad8b4SAndroid Build Coastguard Worker #include <linux/ioctl.h>
16*f80ad8b4SAndroid Build Coastguard Worker #include <linux/types.h>
17*f80ad8b4SAndroid Build Coastguard Worker #include <linux/xattr.h>
18*f80ad8b4SAndroid Build Coastguard Worker 
19*f80ad8b4SAndroid Build Coastguard Worker /* ===== constants ===== */
20*f80ad8b4SAndroid Build Coastguard Worker #define INCFS_NAME "incremental-fs"
21*f80ad8b4SAndroid Build Coastguard Worker 
22*f80ad8b4SAndroid Build Coastguard Worker /*
23*f80ad8b4SAndroid Build Coastguard Worker  * Magic number used in file header and in memory superblock
24*f80ad8b4SAndroid Build Coastguard Worker  * Note that it is a 5 byte unsigned long. Thus on 32 bit kernels, it is
25*f80ad8b4SAndroid Build Coastguard Worker  * truncated to a 4 byte number
26*f80ad8b4SAndroid Build Coastguard Worker  */
27*f80ad8b4SAndroid Build Coastguard Worker #define INCFS_MAGIC_NUMBER (0x5346434e49ul & ULONG_MAX)
28*f80ad8b4SAndroid Build Coastguard Worker 
29*f80ad8b4SAndroid Build Coastguard Worker #define INCFS_DATA_FILE_BLOCK_SIZE 4096
30*f80ad8b4SAndroid Build Coastguard Worker #define INCFS_HEADER_VER 1
31*f80ad8b4SAndroid Build Coastguard Worker 
32*f80ad8b4SAndroid Build Coastguard Worker /* TODO: This value is assumed in incfs_copy_signature_info_from_user to be the
33*f80ad8b4SAndroid Build Coastguard Worker  * actual signature length. Set back to 64 when fixed.
34*f80ad8b4SAndroid Build Coastguard Worker  */
35*f80ad8b4SAndroid Build Coastguard Worker #define INCFS_MAX_HASH_SIZE 32
36*f80ad8b4SAndroid Build Coastguard Worker #define INCFS_MAX_FILE_ATTR_SIZE 512
37*f80ad8b4SAndroid Build Coastguard Worker 
38*f80ad8b4SAndroid Build Coastguard Worker #define INCFS_INDEX_NAME ".index"
39*f80ad8b4SAndroid Build Coastguard Worker #define INCFS_INCOMPLETE_NAME ".incomplete"
40*f80ad8b4SAndroid Build Coastguard Worker #define INCFS_PENDING_READS_FILENAME ".pending_reads"
41*f80ad8b4SAndroid Build Coastguard Worker #define INCFS_LOG_FILENAME ".log"
42*f80ad8b4SAndroid Build Coastguard Worker #define INCFS_BLOCKS_WRITTEN_FILENAME ".blocks_written"
43*f80ad8b4SAndroid Build Coastguard Worker #define INCFS_XATTR_ID_NAME (XATTR_USER_PREFIX "incfs.id")
44*f80ad8b4SAndroid Build Coastguard Worker #define INCFS_XATTR_SIZE_NAME (XATTR_USER_PREFIX "incfs.size")
45*f80ad8b4SAndroid Build Coastguard Worker #define INCFS_XATTR_METADATA_NAME (XATTR_USER_PREFIX "incfs.metadata")
46*f80ad8b4SAndroid Build Coastguard Worker #define INCFS_XATTR_VERITY_NAME (XATTR_USER_PREFIX "incfs.verity")
47*f80ad8b4SAndroid Build Coastguard Worker 
48*f80ad8b4SAndroid Build Coastguard Worker #define INCFS_MAX_SIGNATURE_SIZE 8096
49*f80ad8b4SAndroid Build Coastguard Worker #define INCFS_SIGNATURE_VERSION 2
50*f80ad8b4SAndroid Build Coastguard Worker #define INCFS_SIGNATURE_SECTIONS 2
51*f80ad8b4SAndroid Build Coastguard Worker 
52*f80ad8b4SAndroid Build Coastguard Worker #define INCFS_IOCTL_BASE_CODE 'g'
53*f80ad8b4SAndroid Build Coastguard Worker 
54*f80ad8b4SAndroid Build Coastguard Worker /* ===== ioctl requests on the command dir ===== */
55*f80ad8b4SAndroid Build Coastguard Worker 
56*f80ad8b4SAndroid Build Coastguard Worker /*
57*f80ad8b4SAndroid Build Coastguard Worker  * Create a new file
58*f80ad8b4SAndroid Build Coastguard Worker  * May only be called on .pending_reads file
59*f80ad8b4SAndroid Build Coastguard Worker  */
60*f80ad8b4SAndroid Build Coastguard Worker #define INCFS_IOC_CREATE_FILE \
61*f80ad8b4SAndroid Build Coastguard Worker 	_IOWR(INCFS_IOCTL_BASE_CODE, 30, struct incfs_new_file_args)
62*f80ad8b4SAndroid Build Coastguard Worker 
63*f80ad8b4SAndroid Build Coastguard Worker /* Read file signature */
64*f80ad8b4SAndroid Build Coastguard Worker #define INCFS_IOC_READ_FILE_SIGNATURE                                          \
65*f80ad8b4SAndroid Build Coastguard Worker 	_IOR(INCFS_IOCTL_BASE_CODE, 31, struct incfs_get_file_sig_args)
66*f80ad8b4SAndroid Build Coastguard Worker 
67*f80ad8b4SAndroid Build Coastguard Worker /*
68*f80ad8b4SAndroid Build Coastguard Worker  * Fill in one or more data block. This may only be called on a handle
69*f80ad8b4SAndroid Build Coastguard Worker  * passed as a parameter to INCFS_IOC_PERMIT_FILLING
70*f80ad8b4SAndroid Build Coastguard Worker  *
71*f80ad8b4SAndroid Build Coastguard Worker  * Returns number of blocks filled in, or error if none were
72*f80ad8b4SAndroid Build Coastguard Worker  */
73*f80ad8b4SAndroid Build Coastguard Worker #define INCFS_IOC_FILL_BLOCKS                                                  \
74*f80ad8b4SAndroid Build Coastguard Worker 	_IOR(INCFS_IOCTL_BASE_CODE, 32, struct incfs_fill_blocks)
75*f80ad8b4SAndroid Build Coastguard Worker 
76*f80ad8b4SAndroid Build Coastguard Worker /*
77*f80ad8b4SAndroid Build Coastguard Worker  * Permit INCFS_IOC_FILL_BLOCKS on the given file descriptor
78*f80ad8b4SAndroid Build Coastguard Worker  * May only be called on .pending_reads file
79*f80ad8b4SAndroid Build Coastguard Worker  *
80*f80ad8b4SAndroid Build Coastguard Worker  * Returns 0 on success or error
81*f80ad8b4SAndroid Build Coastguard Worker  */
82*f80ad8b4SAndroid Build Coastguard Worker #define INCFS_IOC_PERMIT_FILL                                                  \
83*f80ad8b4SAndroid Build Coastguard Worker 	_IOW(INCFS_IOCTL_BASE_CODE, 33, struct incfs_permit_fill)
84*f80ad8b4SAndroid Build Coastguard Worker 
85*f80ad8b4SAndroid Build Coastguard Worker /*
86*f80ad8b4SAndroid Build Coastguard Worker  * Fills buffer with ranges of populated blocks
87*f80ad8b4SAndroid Build Coastguard Worker  *
88*f80ad8b4SAndroid Build Coastguard Worker  * Returns 0 if all ranges written
89*f80ad8b4SAndroid Build Coastguard Worker  *	   error otherwise
90*f80ad8b4SAndroid Build Coastguard Worker  *
91*f80ad8b4SAndroid Build Coastguard Worker  *	   Either way, range_buffer_size_out is set to the number
92*f80ad8b4SAndroid Build Coastguard Worker  *	   of bytes written. Should be set to 0 by caller. The ranges
93*f80ad8b4SAndroid Build Coastguard Worker  *	   filled are valid, but if an error was returned there might
94*f80ad8b4SAndroid Build Coastguard Worker  *	   be more ranges to come.
95*f80ad8b4SAndroid Build Coastguard Worker  *
96*f80ad8b4SAndroid Build Coastguard Worker  *	   Ranges are ranges of filled blocks:
97*f80ad8b4SAndroid Build Coastguard Worker  *
98*f80ad8b4SAndroid Build Coastguard Worker  *	   1 2 7 9
99*f80ad8b4SAndroid Build Coastguard Worker  *
100*f80ad8b4SAndroid Build Coastguard Worker  *	   means blocks 1, 2, 7, 8, 9 are filled, 0, 3, 4, 5, 6 and 10 on
101*f80ad8b4SAndroid Build Coastguard Worker  *	   are not
102*f80ad8b4SAndroid Build Coastguard Worker  *
103*f80ad8b4SAndroid Build Coastguard Worker  *	   If hashing is enabled for the file, the hash blocks are simply
104*f80ad8b4SAndroid Build Coastguard Worker  *	   treated as though they immediately followed the data blocks.
105*f80ad8b4SAndroid Build Coastguard Worker  */
106*f80ad8b4SAndroid Build Coastguard Worker #define INCFS_IOC_GET_FILLED_BLOCKS                                            \
107*f80ad8b4SAndroid Build Coastguard Worker 	_IOR(INCFS_IOCTL_BASE_CODE, 34, struct incfs_get_filled_blocks_args)
108*f80ad8b4SAndroid Build Coastguard Worker 
109*f80ad8b4SAndroid Build Coastguard Worker /*
110*f80ad8b4SAndroid Build Coastguard Worker  * Creates a new mapped file
111*f80ad8b4SAndroid Build Coastguard Worker  * May only be called on .pending_reads file
112*f80ad8b4SAndroid Build Coastguard Worker  */
113*f80ad8b4SAndroid Build Coastguard Worker #define INCFS_IOC_CREATE_MAPPED_FILE \
114*f80ad8b4SAndroid Build Coastguard Worker 	_IOWR(INCFS_IOCTL_BASE_CODE, 35, struct incfs_create_mapped_file_args)
115*f80ad8b4SAndroid Build Coastguard Worker 
116*f80ad8b4SAndroid Build Coastguard Worker /*
117*f80ad8b4SAndroid Build Coastguard Worker  * Get number of blocks, total and filled
118*f80ad8b4SAndroid Build Coastguard Worker  * May only be called on .pending_reads file
119*f80ad8b4SAndroid Build Coastguard Worker  */
120*f80ad8b4SAndroid Build Coastguard Worker #define INCFS_IOC_GET_BLOCK_COUNT \
121*f80ad8b4SAndroid Build Coastguard Worker 	_IOR(INCFS_IOCTL_BASE_CODE, 36, struct incfs_get_block_count_args)
122*f80ad8b4SAndroid Build Coastguard Worker 
123*f80ad8b4SAndroid Build Coastguard Worker /*
124*f80ad8b4SAndroid Build Coastguard Worker  * Get per UID read timeouts
125*f80ad8b4SAndroid Build Coastguard Worker  * May only be called on .pending_reads file
126*f80ad8b4SAndroid Build Coastguard Worker  */
127*f80ad8b4SAndroid Build Coastguard Worker #define INCFS_IOC_GET_READ_TIMEOUTS \
128*f80ad8b4SAndroid Build Coastguard Worker 	_IOR(INCFS_IOCTL_BASE_CODE, 37, struct incfs_get_read_timeouts_args)
129*f80ad8b4SAndroid Build Coastguard Worker 
130*f80ad8b4SAndroid Build Coastguard Worker /*
131*f80ad8b4SAndroid Build Coastguard Worker  * Set per UID read timeouts
132*f80ad8b4SAndroid Build Coastguard Worker  * May only be called on .pending_reads file
133*f80ad8b4SAndroid Build Coastguard Worker  */
134*f80ad8b4SAndroid Build Coastguard Worker #define INCFS_IOC_SET_READ_TIMEOUTS \
135*f80ad8b4SAndroid Build Coastguard Worker 	_IOW(INCFS_IOCTL_BASE_CODE, 38, struct incfs_set_read_timeouts_args)
136*f80ad8b4SAndroid Build Coastguard Worker 
137*f80ad8b4SAndroid Build Coastguard Worker /*
138*f80ad8b4SAndroid Build Coastguard Worker  * Get last read error
139*f80ad8b4SAndroid Build Coastguard Worker  * May only be called on .pending_reads file
140*f80ad8b4SAndroid Build Coastguard Worker  */
141*f80ad8b4SAndroid Build Coastguard Worker #define INCFS_IOC_GET_LAST_READ_ERROR \
142*f80ad8b4SAndroid Build Coastguard Worker 	_IOW(INCFS_IOCTL_BASE_CODE, 39, struct incfs_get_last_read_error_args)
143*f80ad8b4SAndroid Build Coastguard Worker 
144*f80ad8b4SAndroid Build Coastguard Worker /* ===== sysfs feature flags ===== */
145*f80ad8b4SAndroid Build Coastguard Worker /*
146*f80ad8b4SAndroid Build Coastguard Worker  * Each flag is represented by a file in /sys/fs/incremental-fs/features
147*f80ad8b4SAndroid Build Coastguard Worker  * If the file exists the feature is supported
148*f80ad8b4SAndroid Build Coastguard Worker  * Also the file contents will be the line "supported"
149*f80ad8b4SAndroid Build Coastguard Worker  */
150*f80ad8b4SAndroid Build Coastguard Worker 
151*f80ad8b4SAndroid Build Coastguard Worker /*
152*f80ad8b4SAndroid Build Coastguard Worker  * Basic flag stating that the core incfs file system is available
153*f80ad8b4SAndroid Build Coastguard Worker  */
154*f80ad8b4SAndroid Build Coastguard Worker #define INCFS_FEATURE_FLAG_COREFS "corefs"
155*f80ad8b4SAndroid Build Coastguard Worker 
156*f80ad8b4SAndroid Build Coastguard Worker /*
157*f80ad8b4SAndroid Build Coastguard Worker  * zstd compression support
158*f80ad8b4SAndroid Build Coastguard Worker  */
159*f80ad8b4SAndroid Build Coastguard Worker #define INCFS_FEATURE_FLAG_ZSTD "zstd"
160*f80ad8b4SAndroid Build Coastguard Worker 
161*f80ad8b4SAndroid Build Coastguard Worker /*
162*f80ad8b4SAndroid Build Coastguard Worker  * v2 feature set support. Covers:
163*f80ad8b4SAndroid Build Coastguard Worker  *   INCFS_IOC_CREATE_MAPPED_FILE
164*f80ad8b4SAndroid Build Coastguard Worker  *   INCFS_IOC_GET_BLOCK_COUNT
165*f80ad8b4SAndroid Build Coastguard Worker  *   INCFS_IOC_GET_READ_TIMEOUTS/INCFS_IOC_SET_READ_TIMEOUTS
166*f80ad8b4SAndroid Build Coastguard Worker  *   .blocks_written status file
167*f80ad8b4SAndroid Build Coastguard Worker  *   .incomplete folder
168*f80ad8b4SAndroid Build Coastguard Worker  *   report_uid mount option
169*f80ad8b4SAndroid Build Coastguard Worker  */
170*f80ad8b4SAndroid Build Coastguard Worker #define INCFS_FEATURE_FLAG_V2 "v2"
171*f80ad8b4SAndroid Build Coastguard Worker 
172*f80ad8b4SAndroid Build Coastguard Worker enum incfs_compression_alg {
173*f80ad8b4SAndroid Build Coastguard Worker 	COMPRESSION_NONE = 0,
174*f80ad8b4SAndroid Build Coastguard Worker 	COMPRESSION_LZ4 = 1,
175*f80ad8b4SAndroid Build Coastguard Worker 	COMPRESSION_ZSTD = 2,
176*f80ad8b4SAndroid Build Coastguard Worker };
177*f80ad8b4SAndroid Build Coastguard Worker 
178*f80ad8b4SAndroid Build Coastguard Worker enum incfs_block_flags {
179*f80ad8b4SAndroid Build Coastguard Worker 	INCFS_BLOCK_FLAGS_NONE = 0,
180*f80ad8b4SAndroid Build Coastguard Worker 	INCFS_BLOCK_FLAGS_HASH = 1,
181*f80ad8b4SAndroid Build Coastguard Worker };
182*f80ad8b4SAndroid Build Coastguard Worker 
183*f80ad8b4SAndroid Build Coastguard Worker typedef struct {
184*f80ad8b4SAndroid Build Coastguard Worker 	__u8 bytes[16];
185*f80ad8b4SAndroid Build Coastguard Worker } incfs_uuid_t __attribute__((aligned (8)));
186*f80ad8b4SAndroid Build Coastguard Worker 
187*f80ad8b4SAndroid Build Coastguard Worker /*
188*f80ad8b4SAndroid Build Coastguard Worker  * Description of a pending read. A pending read - a read call by
189*f80ad8b4SAndroid Build Coastguard Worker  * a userspace program for which the filesystem currently doesn't have data.
190*f80ad8b4SAndroid Build Coastguard Worker  *
191*f80ad8b4SAndroid Build Coastguard Worker  * Reads from .pending_reads and .log return an array of these structure
192*f80ad8b4SAndroid Build Coastguard Worker  */
193*f80ad8b4SAndroid Build Coastguard Worker struct incfs_pending_read_info {
194*f80ad8b4SAndroid Build Coastguard Worker 	/* Id of a file that is being read from. */
195*f80ad8b4SAndroid Build Coastguard Worker 	incfs_uuid_t file_id;
196*f80ad8b4SAndroid Build Coastguard Worker 
197*f80ad8b4SAndroid Build Coastguard Worker 	/* A number of microseconds since system boot to the read. */
198*f80ad8b4SAndroid Build Coastguard Worker 	__aligned_u64 timestamp_us;
199*f80ad8b4SAndroid Build Coastguard Worker 
200*f80ad8b4SAndroid Build Coastguard Worker 	/* Index of a file block that is being read. */
201*f80ad8b4SAndroid Build Coastguard Worker 	__u32 block_index;
202*f80ad8b4SAndroid Build Coastguard Worker 
203*f80ad8b4SAndroid Build Coastguard Worker 	/* A serial number of this pending read. */
204*f80ad8b4SAndroid Build Coastguard Worker 	__u32 serial_number;
205*f80ad8b4SAndroid Build Coastguard Worker };
206*f80ad8b4SAndroid Build Coastguard Worker 
207*f80ad8b4SAndroid Build Coastguard Worker /*
208*f80ad8b4SAndroid Build Coastguard Worker  * Description of a pending read. A pending read - a read call by
209*f80ad8b4SAndroid Build Coastguard Worker  * a userspace program for which the filesystem currently doesn't have data.
210*f80ad8b4SAndroid Build Coastguard Worker  *
211*f80ad8b4SAndroid Build Coastguard Worker  * This version of incfs_pending_read_info is used whenever the file system is
212*f80ad8b4SAndroid Build Coastguard Worker  * mounted with the report_uid flag
213*f80ad8b4SAndroid Build Coastguard Worker  */
214*f80ad8b4SAndroid Build Coastguard Worker struct incfs_pending_read_info2 {
215*f80ad8b4SAndroid Build Coastguard Worker 	/* Id of a file that is being read from. */
216*f80ad8b4SAndroid Build Coastguard Worker 	incfs_uuid_t file_id;
217*f80ad8b4SAndroid Build Coastguard Worker 
218*f80ad8b4SAndroid Build Coastguard Worker 	/* A number of microseconds since system boot to the read. */
219*f80ad8b4SAndroid Build Coastguard Worker 	__aligned_u64 timestamp_us;
220*f80ad8b4SAndroid Build Coastguard Worker 
221*f80ad8b4SAndroid Build Coastguard Worker 	/* Index of a file block that is being read. */
222*f80ad8b4SAndroid Build Coastguard Worker 	__u32 block_index;
223*f80ad8b4SAndroid Build Coastguard Worker 
224*f80ad8b4SAndroid Build Coastguard Worker 	/* A serial number of this pending read. */
225*f80ad8b4SAndroid Build Coastguard Worker 	__u32 serial_number;
226*f80ad8b4SAndroid Build Coastguard Worker 
227*f80ad8b4SAndroid Build Coastguard Worker 	/* The UID of the reading process */
228*f80ad8b4SAndroid Build Coastguard Worker 	__u32 uid;
229*f80ad8b4SAndroid Build Coastguard Worker 
230*f80ad8b4SAndroid Build Coastguard Worker 	__u32 reserved;
231*f80ad8b4SAndroid Build Coastguard Worker };
232*f80ad8b4SAndroid Build Coastguard Worker 
233*f80ad8b4SAndroid Build Coastguard Worker /*
234*f80ad8b4SAndroid Build Coastguard Worker  * Description of a data or hash block to add to a data file.
235*f80ad8b4SAndroid Build Coastguard Worker  */
236*f80ad8b4SAndroid Build Coastguard Worker struct incfs_fill_block {
237*f80ad8b4SAndroid Build Coastguard Worker 	/* Index of a data block. */
238*f80ad8b4SAndroid Build Coastguard Worker 	__u32 block_index;
239*f80ad8b4SAndroid Build Coastguard Worker 
240*f80ad8b4SAndroid Build Coastguard Worker 	/* Length of data */
241*f80ad8b4SAndroid Build Coastguard Worker 	__u32 data_len;
242*f80ad8b4SAndroid Build Coastguard Worker 
243*f80ad8b4SAndroid Build Coastguard Worker 	/*
244*f80ad8b4SAndroid Build Coastguard Worker 	 * A pointer to an actual data for the block.
245*f80ad8b4SAndroid Build Coastguard Worker 	 *
246*f80ad8b4SAndroid Build Coastguard Worker 	 * Equivalent to: __u8 *data;
247*f80ad8b4SAndroid Build Coastguard Worker 	 */
248*f80ad8b4SAndroid Build Coastguard Worker 	__aligned_u64 data;
249*f80ad8b4SAndroid Build Coastguard Worker 
250*f80ad8b4SAndroid Build Coastguard Worker 	/*
251*f80ad8b4SAndroid Build Coastguard Worker 	 * Compression algorithm used to compress the data block.
252*f80ad8b4SAndroid Build Coastguard Worker 	 * Values from enum incfs_compression_alg.
253*f80ad8b4SAndroid Build Coastguard Worker 	 */
254*f80ad8b4SAndroid Build Coastguard Worker 	__u8 compression;
255*f80ad8b4SAndroid Build Coastguard Worker 
256*f80ad8b4SAndroid Build Coastguard Worker 	/* Values from enum incfs_block_flags */
257*f80ad8b4SAndroid Build Coastguard Worker 	__u8 flags;
258*f80ad8b4SAndroid Build Coastguard Worker 
259*f80ad8b4SAndroid Build Coastguard Worker 	__u16 reserved1;
260*f80ad8b4SAndroid Build Coastguard Worker 
261*f80ad8b4SAndroid Build Coastguard Worker 	__u32 reserved2;
262*f80ad8b4SAndroid Build Coastguard Worker 
263*f80ad8b4SAndroid Build Coastguard Worker 	__aligned_u64 reserved3;
264*f80ad8b4SAndroid Build Coastguard Worker };
265*f80ad8b4SAndroid Build Coastguard Worker 
266*f80ad8b4SAndroid Build Coastguard Worker /*
267*f80ad8b4SAndroid Build Coastguard Worker  * Description of a number of blocks to add to a data file
268*f80ad8b4SAndroid Build Coastguard Worker  *
269*f80ad8b4SAndroid Build Coastguard Worker  * Argument for INCFS_IOC_FILL_BLOCKS
270*f80ad8b4SAndroid Build Coastguard Worker  */
271*f80ad8b4SAndroid Build Coastguard Worker struct incfs_fill_blocks {
272*f80ad8b4SAndroid Build Coastguard Worker 	/* Number of blocks */
273*f80ad8b4SAndroid Build Coastguard Worker 	__u64 count;
274*f80ad8b4SAndroid Build Coastguard Worker 
275*f80ad8b4SAndroid Build Coastguard Worker 	/* A pointer to an array of incfs_fill_block structs */
276*f80ad8b4SAndroid Build Coastguard Worker 	__aligned_u64 fill_blocks;
277*f80ad8b4SAndroid Build Coastguard Worker };
278*f80ad8b4SAndroid Build Coastguard Worker 
279*f80ad8b4SAndroid Build Coastguard Worker /*
280*f80ad8b4SAndroid Build Coastguard Worker  * Permit INCFS_IOC_FILL_BLOCKS on the given file descriptor
281*f80ad8b4SAndroid Build Coastguard Worker  * May only be called on .pending_reads file
282*f80ad8b4SAndroid Build Coastguard Worker  *
283*f80ad8b4SAndroid Build Coastguard Worker  * Argument for INCFS_IOC_PERMIT_FILL
284*f80ad8b4SAndroid Build Coastguard Worker  */
285*f80ad8b4SAndroid Build Coastguard Worker struct incfs_permit_fill {
286*f80ad8b4SAndroid Build Coastguard Worker 	/* File to permit fills on */
287*f80ad8b4SAndroid Build Coastguard Worker 	__u32 file_descriptor;
288*f80ad8b4SAndroid Build Coastguard Worker };
289*f80ad8b4SAndroid Build Coastguard Worker 
290*f80ad8b4SAndroid Build Coastguard Worker enum incfs_hash_tree_algorithm {
291*f80ad8b4SAndroid Build Coastguard Worker 	INCFS_HASH_TREE_NONE = 0,
292*f80ad8b4SAndroid Build Coastguard Worker 	INCFS_HASH_TREE_SHA256 = 1
293*f80ad8b4SAndroid Build Coastguard Worker };
294*f80ad8b4SAndroid Build Coastguard Worker 
295*f80ad8b4SAndroid Build Coastguard Worker /*
296*f80ad8b4SAndroid Build Coastguard Worker  * Create a new file or directory.
297*f80ad8b4SAndroid Build Coastguard Worker  */
298*f80ad8b4SAndroid Build Coastguard Worker struct incfs_new_file_args {
299*f80ad8b4SAndroid Build Coastguard Worker 	/* Id of a file to create. */
300*f80ad8b4SAndroid Build Coastguard Worker 	incfs_uuid_t file_id;
301*f80ad8b4SAndroid Build Coastguard Worker 
302*f80ad8b4SAndroid Build Coastguard Worker 	/*
303*f80ad8b4SAndroid Build Coastguard Worker 	 * Total size of the new file. Ignored if S_ISDIR(mode).
304*f80ad8b4SAndroid Build Coastguard Worker 	 */
305*f80ad8b4SAndroid Build Coastguard Worker 	__aligned_u64 size;
306*f80ad8b4SAndroid Build Coastguard Worker 
307*f80ad8b4SAndroid Build Coastguard Worker 	/*
308*f80ad8b4SAndroid Build Coastguard Worker 	 * File mode. Permissions and dir flag.
309*f80ad8b4SAndroid Build Coastguard Worker 	 */
310*f80ad8b4SAndroid Build Coastguard Worker 	__u16 mode;
311*f80ad8b4SAndroid Build Coastguard Worker 
312*f80ad8b4SAndroid Build Coastguard Worker 	__u16 reserved1;
313*f80ad8b4SAndroid Build Coastguard Worker 
314*f80ad8b4SAndroid Build Coastguard Worker 	__u32 reserved2;
315*f80ad8b4SAndroid Build Coastguard Worker 
316*f80ad8b4SAndroid Build Coastguard Worker 	/*
317*f80ad8b4SAndroid Build Coastguard Worker 	 * A pointer to a null-terminated relative path to the file's parent
318*f80ad8b4SAndroid Build Coastguard Worker 	 * dir.
319*f80ad8b4SAndroid Build Coastguard Worker 	 * Max length: PATH_MAX
320*f80ad8b4SAndroid Build Coastguard Worker 	 *
321*f80ad8b4SAndroid Build Coastguard Worker 	 * Equivalent to: char *directory_path;
322*f80ad8b4SAndroid Build Coastguard Worker 	 */
323*f80ad8b4SAndroid Build Coastguard Worker 	__aligned_u64 directory_path;
324*f80ad8b4SAndroid Build Coastguard Worker 
325*f80ad8b4SAndroid Build Coastguard Worker 	/*
326*f80ad8b4SAndroid Build Coastguard Worker 	 * A pointer to a null-terminated file's name.
327*f80ad8b4SAndroid Build Coastguard Worker 	 * Max length: PATH_MAX
328*f80ad8b4SAndroid Build Coastguard Worker 	 *
329*f80ad8b4SAndroid Build Coastguard Worker 	 * Equivalent to: char *file_name;
330*f80ad8b4SAndroid Build Coastguard Worker 	 */
331*f80ad8b4SAndroid Build Coastguard Worker 	__aligned_u64 file_name;
332*f80ad8b4SAndroid Build Coastguard Worker 
333*f80ad8b4SAndroid Build Coastguard Worker 	/*
334*f80ad8b4SAndroid Build Coastguard Worker 	 * A pointer to a file attribute to be set on creation.
335*f80ad8b4SAndroid Build Coastguard Worker 	 *
336*f80ad8b4SAndroid Build Coastguard Worker 	 * Equivalent to: u8 *file_attr;
337*f80ad8b4SAndroid Build Coastguard Worker 	 */
338*f80ad8b4SAndroid Build Coastguard Worker 	__aligned_u64 file_attr;
339*f80ad8b4SAndroid Build Coastguard Worker 
340*f80ad8b4SAndroid Build Coastguard Worker 	/*
341*f80ad8b4SAndroid Build Coastguard Worker 	 * Length of the data buffer specfied by file_attr.
342*f80ad8b4SAndroid Build Coastguard Worker 	 * Max value: INCFS_MAX_FILE_ATTR_SIZE
343*f80ad8b4SAndroid Build Coastguard Worker 	 */
344*f80ad8b4SAndroid Build Coastguard Worker 	__u32 file_attr_len;
345*f80ad8b4SAndroid Build Coastguard Worker 
346*f80ad8b4SAndroid Build Coastguard Worker 	__u32 reserved4;
347*f80ad8b4SAndroid Build Coastguard Worker 
348*f80ad8b4SAndroid Build Coastguard Worker 	/*
349*f80ad8b4SAndroid Build Coastguard Worker 	 * Points to an APK V4 Signature data blob
350*f80ad8b4SAndroid Build Coastguard Worker 	 * Signature must have two sections
351*f80ad8b4SAndroid Build Coastguard Worker 	 * Format is:
352*f80ad8b4SAndroid Build Coastguard Worker 	 *	u32 version
353*f80ad8b4SAndroid Build Coastguard Worker 	 *	u32 size_of_hash_info_section
354*f80ad8b4SAndroid Build Coastguard Worker 	 *	u8 hash_info_section[]
355*f80ad8b4SAndroid Build Coastguard Worker 	 *	u32 size_of_signing_info_section
356*f80ad8b4SAndroid Build Coastguard Worker 	 *	u8 signing_info_section[]
357*f80ad8b4SAndroid Build Coastguard Worker 	 *
358*f80ad8b4SAndroid Build Coastguard Worker 	 * Note that incfs does not care about what is in signing_info_section
359*f80ad8b4SAndroid Build Coastguard Worker 	 *
360*f80ad8b4SAndroid Build Coastguard Worker 	 * hash_info_section has following format:
361*f80ad8b4SAndroid Build Coastguard Worker 	 *	u32 hash_algorithm; // Must be SHA256 == 1
362*f80ad8b4SAndroid Build Coastguard Worker 	 *	u8 log2_blocksize;  // Must be 12 for 4096 byte blocks
363*f80ad8b4SAndroid Build Coastguard Worker 	 *	u32 salt_size;
364*f80ad8b4SAndroid Build Coastguard Worker 	 *	u8 salt[];
365*f80ad8b4SAndroid Build Coastguard Worker 	 *	u32 hash_size;
366*f80ad8b4SAndroid Build Coastguard Worker 	 *	u8 root_hash[];
367*f80ad8b4SAndroid Build Coastguard Worker 	 */
368*f80ad8b4SAndroid Build Coastguard Worker 	__aligned_u64 signature_info;
369*f80ad8b4SAndroid Build Coastguard Worker 
370*f80ad8b4SAndroid Build Coastguard Worker 	/* Size of signature_info */
371*f80ad8b4SAndroid Build Coastguard Worker 	__aligned_u64 signature_size;
372*f80ad8b4SAndroid Build Coastguard Worker 
373*f80ad8b4SAndroid Build Coastguard Worker 	__aligned_u64 reserved6;
374*f80ad8b4SAndroid Build Coastguard Worker };
375*f80ad8b4SAndroid Build Coastguard Worker 
376*f80ad8b4SAndroid Build Coastguard Worker /*
377*f80ad8b4SAndroid Build Coastguard Worker  * Request a digital signature blob for a given file.
378*f80ad8b4SAndroid Build Coastguard Worker  * Argument for INCFS_IOC_READ_FILE_SIGNATURE ioctl
379*f80ad8b4SAndroid Build Coastguard Worker  */
380*f80ad8b4SAndroid Build Coastguard Worker struct incfs_get_file_sig_args {
381*f80ad8b4SAndroid Build Coastguard Worker 	/*
382*f80ad8b4SAndroid Build Coastguard Worker 	 * A pointer to the data buffer to save an signature blob to.
383*f80ad8b4SAndroid Build Coastguard Worker 	 *
384*f80ad8b4SAndroid Build Coastguard Worker 	 * Equivalent to: u8 *file_signature;
385*f80ad8b4SAndroid Build Coastguard Worker 	 */
386*f80ad8b4SAndroid Build Coastguard Worker 	__aligned_u64 file_signature;
387*f80ad8b4SAndroid Build Coastguard Worker 
388*f80ad8b4SAndroid Build Coastguard Worker 	/* Size of the buffer at file_signature. */
389*f80ad8b4SAndroid Build Coastguard Worker 	__u32 file_signature_buf_size;
390*f80ad8b4SAndroid Build Coastguard Worker 
391*f80ad8b4SAndroid Build Coastguard Worker 	/*
392*f80ad8b4SAndroid Build Coastguard Worker 	 * Number of bytes save file_signature buffer.
393*f80ad8b4SAndroid Build Coastguard Worker 	 * It is set after ioctl done.
394*f80ad8b4SAndroid Build Coastguard Worker 	 */
395*f80ad8b4SAndroid Build Coastguard Worker 	__u32 file_signature_len_out;
396*f80ad8b4SAndroid Build Coastguard Worker };
397*f80ad8b4SAndroid Build Coastguard Worker 
398*f80ad8b4SAndroid Build Coastguard Worker struct incfs_filled_range {
399*f80ad8b4SAndroid Build Coastguard Worker 	__u32 begin;
400*f80ad8b4SAndroid Build Coastguard Worker 	__u32 end;
401*f80ad8b4SAndroid Build Coastguard Worker };
402*f80ad8b4SAndroid Build Coastguard Worker 
403*f80ad8b4SAndroid Build Coastguard Worker /*
404*f80ad8b4SAndroid Build Coastguard Worker  * Request ranges of filled blocks
405*f80ad8b4SAndroid Build Coastguard Worker  * Argument for INCFS_IOC_GET_FILLED_BLOCKS
406*f80ad8b4SAndroid Build Coastguard Worker  */
407*f80ad8b4SAndroid Build Coastguard Worker struct incfs_get_filled_blocks_args {
408*f80ad8b4SAndroid Build Coastguard Worker 	/*
409*f80ad8b4SAndroid Build Coastguard Worker 	 * A buffer to populate with ranges of filled blocks
410*f80ad8b4SAndroid Build Coastguard Worker 	 *
411*f80ad8b4SAndroid Build Coastguard Worker 	 * Equivalent to struct incfs_filled_ranges *range_buffer
412*f80ad8b4SAndroid Build Coastguard Worker 	 */
413*f80ad8b4SAndroid Build Coastguard Worker 	__aligned_u64 range_buffer;
414*f80ad8b4SAndroid Build Coastguard Worker 
415*f80ad8b4SAndroid Build Coastguard Worker 	/* Size of range_buffer */
416*f80ad8b4SAndroid Build Coastguard Worker 	__u32 range_buffer_size;
417*f80ad8b4SAndroid Build Coastguard Worker 
418*f80ad8b4SAndroid Build Coastguard Worker 	/* Start index to read from */
419*f80ad8b4SAndroid Build Coastguard Worker 	__u32 start_index;
420*f80ad8b4SAndroid Build Coastguard Worker 
421*f80ad8b4SAndroid Build Coastguard Worker 	/*
422*f80ad8b4SAndroid Build Coastguard Worker 	 * End index to read to. 0 means read to end. This is a range,
423*f80ad8b4SAndroid Build Coastguard Worker 	 * so incfs will read from start_index to end_index - 1
424*f80ad8b4SAndroid Build Coastguard Worker 	 */
425*f80ad8b4SAndroid Build Coastguard Worker 	__u32 end_index;
426*f80ad8b4SAndroid Build Coastguard Worker 
427*f80ad8b4SAndroid Build Coastguard Worker 	/* Actual number of blocks in file */
428*f80ad8b4SAndroid Build Coastguard Worker 	__u32 total_blocks_out;
429*f80ad8b4SAndroid Build Coastguard Worker 
430*f80ad8b4SAndroid Build Coastguard Worker 	/* The  number of data blocks in file */
431*f80ad8b4SAndroid Build Coastguard Worker 	__u32 data_blocks_out;
432*f80ad8b4SAndroid Build Coastguard Worker 
433*f80ad8b4SAndroid Build Coastguard Worker 	/* Number of bytes written to range buffer */
434*f80ad8b4SAndroid Build Coastguard Worker 	__u32 range_buffer_size_out;
435*f80ad8b4SAndroid Build Coastguard Worker 
436*f80ad8b4SAndroid Build Coastguard Worker 	/* Sector scanned up to, if the call was interrupted */
437*f80ad8b4SAndroid Build Coastguard Worker 	__u32 index_out;
438*f80ad8b4SAndroid Build Coastguard Worker };
439*f80ad8b4SAndroid Build Coastguard Worker 
440*f80ad8b4SAndroid Build Coastguard Worker /*
441*f80ad8b4SAndroid Build Coastguard Worker  * Create a new mapped file
442*f80ad8b4SAndroid Build Coastguard Worker  * Argument for INCFS_IOC_CREATE_MAPPED_FILE
443*f80ad8b4SAndroid Build Coastguard Worker  */
444*f80ad8b4SAndroid Build Coastguard Worker struct incfs_create_mapped_file_args {
445*f80ad8b4SAndroid Build Coastguard Worker 	/*
446*f80ad8b4SAndroid Build Coastguard Worker 	 * Total size of the new file.
447*f80ad8b4SAndroid Build Coastguard Worker 	 */
448*f80ad8b4SAndroid Build Coastguard Worker 	__aligned_u64 size;
449*f80ad8b4SAndroid Build Coastguard Worker 
450*f80ad8b4SAndroid Build Coastguard Worker 	/*
451*f80ad8b4SAndroid Build Coastguard Worker 	 * File mode. Permissions and dir flag.
452*f80ad8b4SAndroid Build Coastguard Worker 	 */
453*f80ad8b4SAndroid Build Coastguard Worker 	__u16 mode;
454*f80ad8b4SAndroid Build Coastguard Worker 
455*f80ad8b4SAndroid Build Coastguard Worker 	__u16 reserved1;
456*f80ad8b4SAndroid Build Coastguard Worker 
457*f80ad8b4SAndroid Build Coastguard Worker 	__u32 reserved2;
458*f80ad8b4SAndroid Build Coastguard Worker 
459*f80ad8b4SAndroid Build Coastguard Worker 	/*
460*f80ad8b4SAndroid Build Coastguard Worker 	 * A pointer to a null-terminated relative path to the incfs mount
461*f80ad8b4SAndroid Build Coastguard Worker 	 * point
462*f80ad8b4SAndroid Build Coastguard Worker 	 * Max length: PATH_MAX
463*f80ad8b4SAndroid Build Coastguard Worker 	 *
464*f80ad8b4SAndroid Build Coastguard Worker 	 * Equivalent to: char *directory_path;
465*f80ad8b4SAndroid Build Coastguard Worker 	 */
466*f80ad8b4SAndroid Build Coastguard Worker 	__aligned_u64 directory_path;
467*f80ad8b4SAndroid Build Coastguard Worker 
468*f80ad8b4SAndroid Build Coastguard Worker 	/*
469*f80ad8b4SAndroid Build Coastguard Worker 	 * A pointer to a null-terminated file name.
470*f80ad8b4SAndroid Build Coastguard Worker 	 * Max length: PATH_MAX
471*f80ad8b4SAndroid Build Coastguard Worker 	 *
472*f80ad8b4SAndroid Build Coastguard Worker 	 * Equivalent to: char *file_name;
473*f80ad8b4SAndroid Build Coastguard Worker 	 */
474*f80ad8b4SAndroid Build Coastguard Worker 	__aligned_u64 file_name;
475*f80ad8b4SAndroid Build Coastguard Worker 
476*f80ad8b4SAndroid Build Coastguard Worker 	/* Id of source file to map. */
477*f80ad8b4SAndroid Build Coastguard Worker 	incfs_uuid_t source_file_id;
478*f80ad8b4SAndroid Build Coastguard Worker 
479*f80ad8b4SAndroid Build Coastguard Worker 	/*
480*f80ad8b4SAndroid Build Coastguard Worker 	 * Offset in source file to start mapping. Must be a multiple of
481*f80ad8b4SAndroid Build Coastguard Worker 	 * INCFS_DATA_FILE_BLOCK_SIZE
482*f80ad8b4SAndroid Build Coastguard Worker 	 */
483*f80ad8b4SAndroid Build Coastguard Worker 	__aligned_u64 source_offset;
484*f80ad8b4SAndroid Build Coastguard Worker };
485*f80ad8b4SAndroid Build Coastguard Worker 
486*f80ad8b4SAndroid Build Coastguard Worker /*
487*f80ad8b4SAndroid Build Coastguard Worker  * Get information about the blocks in this file
488*f80ad8b4SAndroid Build Coastguard Worker  * Argument for INCFS_IOC_GET_BLOCK_COUNT
489*f80ad8b4SAndroid Build Coastguard Worker  */
490*f80ad8b4SAndroid Build Coastguard Worker struct incfs_get_block_count_args {
491*f80ad8b4SAndroid Build Coastguard Worker 	/* Total number of data blocks in the file */
492*f80ad8b4SAndroid Build Coastguard Worker 	__u32 total_data_blocks_out;
493*f80ad8b4SAndroid Build Coastguard Worker 
494*f80ad8b4SAndroid Build Coastguard Worker 	/* Number of filled data blocks in the file */
495*f80ad8b4SAndroid Build Coastguard Worker 	__u32 filled_data_blocks_out;
496*f80ad8b4SAndroid Build Coastguard Worker 
497*f80ad8b4SAndroid Build Coastguard Worker 	/* Total number of hash blocks in the file */
498*f80ad8b4SAndroid Build Coastguard Worker 	__u32 total_hash_blocks_out;
499*f80ad8b4SAndroid Build Coastguard Worker 
500*f80ad8b4SAndroid Build Coastguard Worker 	/* Number of filled hash blocks in the file */
501*f80ad8b4SAndroid Build Coastguard Worker 	__u32 filled_hash_blocks_out;
502*f80ad8b4SAndroid Build Coastguard Worker };
503*f80ad8b4SAndroid Build Coastguard Worker 
504*f80ad8b4SAndroid Build Coastguard Worker /* Description of timeouts for one UID */
505*f80ad8b4SAndroid Build Coastguard Worker struct incfs_per_uid_read_timeouts {
506*f80ad8b4SAndroid Build Coastguard Worker 	/* UID to apply these timeouts to */
507*f80ad8b4SAndroid Build Coastguard Worker 	__u32 uid;
508*f80ad8b4SAndroid Build Coastguard Worker 
509*f80ad8b4SAndroid Build Coastguard Worker 	/*
510*f80ad8b4SAndroid Build Coastguard Worker 	 * Min time in microseconds to read any block. Note that this doesn't
511*f80ad8b4SAndroid Build Coastguard Worker 	 * apply to reads which are satisfied from the page cache.
512*f80ad8b4SAndroid Build Coastguard Worker 	 */
513*f80ad8b4SAndroid Build Coastguard Worker 	__u32 min_time_us;
514*f80ad8b4SAndroid Build Coastguard Worker 
515*f80ad8b4SAndroid Build Coastguard Worker 	/*
516*f80ad8b4SAndroid Build Coastguard Worker 	 * Min time in microseconds to satisfy a pending read. Any pending read
517*f80ad8b4SAndroid Build Coastguard Worker 	 * which is filled before this time will be delayed so that the total
518*f80ad8b4SAndroid Build Coastguard Worker 	 * read time >= this value.
519*f80ad8b4SAndroid Build Coastguard Worker 	 */
520*f80ad8b4SAndroid Build Coastguard Worker 	__u32 min_pending_time_us;
521*f80ad8b4SAndroid Build Coastguard Worker 
522*f80ad8b4SAndroid Build Coastguard Worker 	/*
523*f80ad8b4SAndroid Build Coastguard Worker 	 * Max time in microseconds to satisfy a pending read before the read
524*f80ad8b4SAndroid Build Coastguard Worker 	 * times out. If set to U32_MAX, defaults to mount options
525*f80ad8b4SAndroid Build Coastguard Worker 	 * read_timeout_ms * 1000. Must be >= min_pending_time_us
526*f80ad8b4SAndroid Build Coastguard Worker 	 */
527*f80ad8b4SAndroid Build Coastguard Worker 	__u32 max_pending_time_us;
528*f80ad8b4SAndroid Build Coastguard Worker };
529*f80ad8b4SAndroid Build Coastguard Worker 
530*f80ad8b4SAndroid Build Coastguard Worker /*
531*f80ad8b4SAndroid Build Coastguard Worker  * Get the read timeouts array
532*f80ad8b4SAndroid Build Coastguard Worker  * Argument for INCFS_IOC_GET_READ_TIMEOUTS
533*f80ad8b4SAndroid Build Coastguard Worker  */
534*f80ad8b4SAndroid Build Coastguard Worker struct incfs_get_read_timeouts_args {
535*f80ad8b4SAndroid Build Coastguard Worker 	/*
536*f80ad8b4SAndroid Build Coastguard Worker 	 * A pointer to a buffer to fill with the current timeouts
537*f80ad8b4SAndroid Build Coastguard Worker 	 *
538*f80ad8b4SAndroid Build Coastguard Worker 	 * Equivalent to struct incfs_per_uid_read_timeouts *
539*f80ad8b4SAndroid Build Coastguard Worker 	 */
540*f80ad8b4SAndroid Build Coastguard Worker 	__aligned_u64 timeouts_array;
541*f80ad8b4SAndroid Build Coastguard Worker 
542*f80ad8b4SAndroid Build Coastguard Worker 	/* Size of above buffer in bytes */
543*f80ad8b4SAndroid Build Coastguard Worker 	__u32 timeouts_array_size;
544*f80ad8b4SAndroid Build Coastguard Worker 
545*f80ad8b4SAndroid Build Coastguard Worker 	/* Size used in bytes, or size needed if -ENOMEM returned */
546*f80ad8b4SAndroid Build Coastguard Worker 	__u32 timeouts_array_size_out;
547*f80ad8b4SAndroid Build Coastguard Worker };
548*f80ad8b4SAndroid Build Coastguard Worker 
549*f80ad8b4SAndroid Build Coastguard Worker /*
550*f80ad8b4SAndroid Build Coastguard Worker  * Set the read timeouts array
551*f80ad8b4SAndroid Build Coastguard Worker  * Arguments for INCFS_IOC_SET_READ_TIMEOUTS
552*f80ad8b4SAndroid Build Coastguard Worker  */
553*f80ad8b4SAndroid Build Coastguard Worker struct incfs_set_read_timeouts_args {
554*f80ad8b4SAndroid Build Coastguard Worker 	/*
555*f80ad8b4SAndroid Build Coastguard Worker 	 * A pointer to an array containing the new timeouts
556*f80ad8b4SAndroid Build Coastguard Worker 	 * This will replace any existing timeouts
557*f80ad8b4SAndroid Build Coastguard Worker 	 *
558*f80ad8b4SAndroid Build Coastguard Worker 	 * Equivalent to struct incfs_per_uid_read_timeouts *
559*f80ad8b4SAndroid Build Coastguard Worker 	 */
560*f80ad8b4SAndroid Build Coastguard Worker 	__aligned_u64 timeouts_array;
561*f80ad8b4SAndroid Build Coastguard Worker 
562*f80ad8b4SAndroid Build Coastguard Worker 	/* Size of above array in bytes. Must be < 256 */
563*f80ad8b4SAndroid Build Coastguard Worker 	__u32 timeouts_array_size;
564*f80ad8b4SAndroid Build Coastguard Worker };
565*f80ad8b4SAndroid Build Coastguard Worker 
566*f80ad8b4SAndroid Build Coastguard Worker /*
567*f80ad8b4SAndroid Build Coastguard Worker  * Get last read error struct
568*f80ad8b4SAndroid Build Coastguard Worker  * Arguments for INCFS_IOC_GET_LAST_READ_ERROR
569*f80ad8b4SAndroid Build Coastguard Worker  */
570*f80ad8b4SAndroid Build Coastguard Worker struct incfs_get_last_read_error_args {
571*f80ad8b4SAndroid Build Coastguard Worker 	/* File id of last file that had a read error */
572*f80ad8b4SAndroid Build Coastguard Worker 	incfs_uuid_t	file_id_out;
573*f80ad8b4SAndroid Build Coastguard Worker 
574*f80ad8b4SAndroid Build Coastguard Worker 	/* Time of last read error, in us, from CLOCK_MONOTONIC */
575*f80ad8b4SAndroid Build Coastguard Worker 	__u64	time_us_out;
576*f80ad8b4SAndroid Build Coastguard Worker 
577*f80ad8b4SAndroid Build Coastguard Worker 	/* Index of page that was being read at last read error */
578*f80ad8b4SAndroid Build Coastguard Worker 	__u32	page_out;
579*f80ad8b4SAndroid Build Coastguard Worker 
580*f80ad8b4SAndroid Build Coastguard Worker 	/* errno of last read error */
581*f80ad8b4SAndroid Build Coastguard Worker 	__u32	errno_out;
582*f80ad8b4SAndroid Build Coastguard Worker 
583*f80ad8b4SAndroid Build Coastguard Worker 	/* uid of last read error */
584*f80ad8b4SAndroid Build Coastguard Worker 	__u32	uid_out;
585*f80ad8b4SAndroid Build Coastguard Worker 
586*f80ad8b4SAndroid Build Coastguard Worker 	__u32	reserved1;
587*f80ad8b4SAndroid Build Coastguard Worker 	__u64	reserved2;
588*f80ad8b4SAndroid Build Coastguard Worker };
589*f80ad8b4SAndroid Build Coastguard Worker 
590*f80ad8b4SAndroid Build Coastguard Worker #endif /* _UAPI_LINUX_INCREMENTALFS_H */
591