blob: 87bf72be4588ed88baa6dee27e2231e8ab039623
1 | /* vi: set sw=4 ts=4: */ |
2 | /* |
3 | * brel.h |
4 | * |
5 | * Copyright (C) 1996, 1997 Theodore Ts'o. |
6 | * |
7 | * %Begin-Header% |
8 | * This file may be redistributed under the terms of the GNU Public |
9 | * License. |
10 | * %End-Header% |
11 | */ |
12 | |
13 | struct ext2_block_relocate_entry { |
14 | blk_t new; |
15 | __s16 offset; |
16 | __u16 flags; |
17 | union { |
18 | blk_t block_ref; |
19 | ext2_ino_t inode_ref; |
20 | } owner; |
21 | }; |
22 | |
23 | #define RELOCATE_TYPE_REF 0x0007 |
24 | #define RELOCATE_BLOCK_REF 0x0001 |
25 | #define RELOCATE_INODE_REF 0x0002 |
26 | |
27 | typedef struct ext2_block_relocation_table *ext2_brel; |
28 | |
29 | struct ext2_block_relocation_table { |
30 | __u32 magic; |
31 | char *name; |
32 | blk_t current; |
33 | void *priv_data; |
34 | |
35 | /* |
36 | * Add a block relocation entry. |
37 | */ |
38 | errcode_t (*put)(ext2_brel brel, blk_t old, |
39 | struct ext2_block_relocate_entry *ent); |
40 | |
41 | /* |
42 | * Get a block relocation entry. |
43 | */ |
44 | errcode_t (*get)(ext2_brel brel, blk_t old, |
45 | struct ext2_block_relocate_entry *ent); |
46 | |
47 | /* |
48 | * Initialize for iterating over the block relocation entries. |
49 | */ |
50 | errcode_t (*start_iter)(ext2_brel brel); |
51 | |
52 | /* |
53 | * The iterator function for the inode relocation entries. |
54 | * Returns an inode number of 0 when out of entries. |
55 | */ |
56 | errcode_t (*next)(ext2_brel brel, blk_t *old, |
57 | struct ext2_block_relocate_entry *ent); |
58 | |
59 | /* |
60 | * Move the inode relocation table from one block number to |
61 | * another. |
62 | */ |
63 | errcode_t (*move)(ext2_brel brel, blk_t old, blk_t new); |
64 | |
65 | /* |
66 | * Remove a block relocation entry. |
67 | */ |
68 | errcode_t (*delete)(ext2_brel brel, blk_t old); |
69 | |
70 | |
71 | /* |
72 | * Free the block relocation table. |
73 | */ |
74 | errcode_t (*free)(ext2_brel brel); |
75 | }; |
76 | |
77 | errcode_t ext2fs_brel_memarray_create(char *name, blk_t max_block, |
78 | ext2_brel *brel); |
79 | |
80 | #define ext2fs_brel_put(brel, old, ent) ((brel)->put((brel), old, ent)) |
81 | #define ext2fs_brel_get(brel, old, ent) ((brel)->get((brel), old, ent)) |
82 | #define ext2fs_brel_start_iter(brel) ((brel)->start_iter((brel))) |
83 | #define ext2fs_brel_next(brel, old, ent) ((brel)->next((brel), old, ent)) |
84 | #define ext2fs_brel_move(brel, old, new) ((brel)->move((brel), old, new)) |
85 | #define ext2fs_brel_delete(brel, old) ((brel)->delete((brel), old)) |
86 | #define ext2fs_brel_free(brel) ((brel)->free((brel))) |
87 |