1/* 2 * Copyright 2001-2014, 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 FS_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 26struct 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/* The "pass" field constants */ 40#define BFS_CHECK_PASS_BITMAP 0 41#define BFS_CHECK_PASS_INDEX 1 42 43/* All fields except "flags", and "name" must be set to zero before 44 * BFS_IOCTL_START_CHECKING is called, and magic must be set. 45 */ 46struct check_control { 47 uint32 magic; 48 uint32 pass; 49 uint32 flags; 50 char name[B_FILE_NAME_LENGTH]; 51 ino_t inode; 52 uint32 mode; 53 uint32 errors; 54 struct { 55 uint64 missing; 56 uint64 already_set; 57 uint64 freed; 58 59 uint64 direct_block_runs; 60 uint64 indirect_block_runs; 61 uint64 indirect_array_blocks; 62 uint64 double_indirect_block_runs; 63 uint64 double_indirect_array_blocks; 64 uint64 blocks_in_direct; 65 uint64 blocks_in_indirect; 66 uint64 blocks_in_double_indirect; 67 uint64 partial_block_runs; 68 uint32 block_size; 69 } stats; 70 status_t status; 71}; 72 73/* values for the flags field */ 74#define BFS_FIX_BITMAP_ERRORS 1 75#define BFS_REMOVE_WRONG_TYPES 2 76 /* files that shouldn't be part of its parent will be removed 77 * (i.e. a directory contains an attribute, ...) 78 * Works only if B_FIX_BITMAP_ERRORS is set, too 79 */ 80#define BFS_REMOVE_INVALID 4 81 /* removes nodes that couldn't be opened at all from its parent 82 * directory. 83 * Also requires the B_FIX_BITMAP_ERRORS to be set. 84 */ 85#define BFS_FIX_NAME_MISMATCHES 8 86#define BFS_FIX_BPLUSTREES 16 87 88/* values for the errors field */ 89#define BFS_MISSING_BLOCKS 1 90#define BFS_BLOCKS_ALREADY_SET 2 91#define BFS_INVALID_BLOCK_RUN 4 92#define BFS_COULD_NOT_OPEN 8 93#define BFS_WRONG_TYPE 16 94#define BFS_NAMES_DONT_MATCH 32 95#define BFS_INVALID_BPLUSTREE 64 96 97/* check control magic value */ 98#define BFS_IOCTL_CHECK_MAGIC 'BChk' 99 100 101/* A "back door" to side-step the regular resize interface, primarily for 102 * testing with bfs_shell. The parameter is a uint64 with the desired size. 103 */ 104#define BFS_IOCTL_RESIZE 14205 105 106 107#endif /* BFS_CONTROL_H */ 108