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