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