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