1 /* 2 * Copyright 2001-2010, Axel Dörfler, axeld@pinc-software.de 3 * This file may be used under the terms of the MIT License. 4 */ 5 #ifndef BFS_CONTROL_H 6 #define BFS_CONTROL_H 7 8 9 //! additional functionality exported via ioctl() 10 11 12 #ifdef BFS_SHELL 13 # include "system_dependencies.h" 14 #else 15 # include <SupportDefs.h> 16 #endif 17 18 19 /* ioctl to check the version of BFS used - parameter is a uint32 * 20 * where the number is stored 21 */ 22 #define BFS_IOCTL_VERSION 14200 23 24 #define BFS_IOCTL_UPDATE_BOOT_BLOCK 14204 25 26 struct update_boot_block { 27 uint32 offset; 28 const uint8* data; 29 uint32 length; 30 }; 31 32 /* ioctls to use the "chkbfs" feature from the outside 33 * all calls use a struct check_result as single parameter 34 */ 35 #define BFS_IOCTL_START_CHECKING 14201 36 #define BFS_IOCTL_STOP_CHECKING 14202 37 #define BFS_IOCTL_CHECK_NEXT_NODE 14203 38 39 /* All fields except "flags", and "name" must be set to zero before 40 * BFS_IOCTL_START_CHECKING is called, and magic must be set. 41 */ 42 struct check_control { 43 uint32 magic; 44 uint32 flags; 45 char name[B_FILE_NAME_LENGTH]; 46 ino_t inode; 47 uint32 mode; 48 uint32 errors; 49 struct { 50 uint64 missing; 51 uint64 already_set; 52 uint64 freed; 53 54 uint64 direct_block_runs; 55 uint64 indirect_block_runs; 56 uint64 indirect_array_blocks; 57 uint64 double_indirect_block_runs; 58 uint64 double_indirect_array_blocks; 59 uint64 blocks_in_direct; 60 uint64 blocks_in_indirect; 61 uint64 blocks_in_double_indirect; 62 uint64 partial_block_runs; 63 uint32 block_size; 64 } stats; 65 status_t status; 66 }; 67 68 /* values for the flags field */ 69 #define BFS_FIX_BITMAP_ERRORS 1 70 #define BFS_REMOVE_WRONG_TYPES 2 71 /* files that shouldn't be part of its parent will be removed 72 * (i.e. a directory contains an attribute, ...) 73 * Works only if B_FIX_BITMAP_ERRORS is set, too 74 */ 75 #define BFS_REMOVE_INVALID 4 76 /* removes nodes that couldn't be opened at all from its parent 77 * directory. 78 * Also requires the B_FIX_BITMAP_ERRORS to be set. 79 */ 80 #define BFS_FIX_NAME_MISMATCHES 8 81 82 /* values for the errors field */ 83 #define BFS_MISSING_BLOCKS 1 84 #define BFS_BLOCKS_ALREADY_SET 2 85 #define BFS_INVALID_BLOCK_RUN 4 86 #define BFS_COULD_NOT_OPEN 8 87 #define BFS_WRONG_TYPE 16 88 #define BFS_NAMES_DONT_MATCH 32 89 90 /* check control magic value */ 91 #define BFS_IOCTL_CHECK_MAGIC 'BChk' 92 93 94 #endif /* BFS_CONTROL_H */ 95