xref: /haiku/src/add-ons/kernel/file_systems/bfs/bfs_control.h (revision 323b65468e5836bb27a5e373b14027d902349437)
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