121c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o/* 221c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o * brel.h 3efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o * 421c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o * Copyright (C) 1996, 1997 Theodore Ts'o. 521c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o * 621c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o * %Begin-Header% 7543547a52a20cb7e69d74921b2f691078fd55d83Theodore Ts'o * This file may be redistributed under the terms of the GNU Library 8543547a52a20cb7e69d74921b2f691078fd55d83Theodore Ts'o * General Public License, version 2. 921c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o * %End-Header% 1021c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o */ 1121c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o 1221c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'ostruct ext2_block_relocate_entry { 13e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall blk64_t new; 1421c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o __s16 offset; 1521c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o __u16 flags; 1621c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o union { 17e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall blk64_t block_ref; 1831dbecd482405e0d3a67eb58e1a1c8cb9f2ad83eTheodore Ts'o ext2_ino_t inode_ref; 1921c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o } owner; 2021c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o}; 2121c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o 221e1da29fbd4204a267ebd7c64d37e1f95a9dad08Theodore Ts'o#define RELOCATE_TYPE_REF 0x0007 231e1da29fbd4204a267ebd7c64d37e1f95a9dad08Theodore Ts'o#define RELOCATE_BLOCK_REF 0x0001 241e1da29fbd4204a267ebd7c64d37e1f95a9dad08Theodore Ts'o#define RELOCATE_INODE_REF 0x0002 2521c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o 2621c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'otypedef struct ext2_block_relocation_table *ext2_brel; 2721c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o 2821c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'ostruct ext2_block_relocation_table { 2921c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o __u32 magic; 3021c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o char *name; 31e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall blk64_t current; 32b5abe6fac9c9e7caf4710501d1657d30e4857ef6Theodore Ts'o void *priv_data; 3321c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o 3421c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o /* 3521c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o * Add a block relocation entry. 3621c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o */ 37e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall errcode_t (*put)(ext2_brel brel, blk64_t old, 3821c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o struct ext2_block_relocate_entry *ent); 3921c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o 4021c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o /* 4121c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o * Get a block relocation entry. 4221c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o */ 43e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall errcode_t (*get)(ext2_brel brel, blk64_t old, 4421c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o struct ext2_block_relocate_entry *ent); 4521c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o 4621c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o /* 4721c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o * Initialize for iterating over the block relocation entries. 4821c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o */ 4921c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o errcode_t (*start_iter)(ext2_brel brel); 50efc6f628e15de95bcd13e4f0ee223cb42115d520Theodore Ts'o 5121c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o /* 5221c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o * The iterator function for the inode relocation entries. 5321c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o * Returns an inode number of 0 when out of entries. 5421c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o */ 55e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall errcode_t (*next)(ext2_brel brel, blk64_t *old, 5621c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o struct ext2_block_relocate_entry *ent); 5721c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o 5821c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o /* 5921c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o * Move the inode relocation table from one block number to 6021c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o * another. 6121c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o */ 62e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall errcode_t (*move)(ext2_brel brel, blk64_t old, blk_t new); 6321c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o 6421c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o /* 6521c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o * Remove a block relocation entry. 6621c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o */ 67e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrall errcode_t (*delete)(ext2_brel brel, blk64_t old); 6821c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o 6921c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o 7021c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o /* 7121c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o * Free the block relocation table. 7221c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o */ 7321c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o errcode_t (*free)(ext2_brel brel); 7421c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o}; 7521c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o 76e0ed7404719a9ddd2ba427a80db5365c8bad18c0JP Abgrallerrcode_t ext2fs_brel_memarray_create(char *name, blk64_t max_block, 7721c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o ext2_brel *brel); 7821c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o 7921c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o#define ext2fs_brel_put(brel, old, ent) ((brel)->put((brel), old, ent)) 8021c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o#define ext2fs_brel_get(brel, old, ent) ((brel)->get((brel), old, ent)) 8121c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o#define ext2fs_brel_start_iter(brel) ((brel)->start_iter((brel))) 8221c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o#define ext2fs_brel_next(brel, old, ent) ((brel)->next((brel), old, ent)) 8321c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o#define ext2fs_brel_move(brel, old, new) ((brel)->move((brel), old, new)) 8421c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o#define ext2fs_brel_delete(brel, old) ((brel)->delete((brel), old)) 8521c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o#define ext2fs_brel_free(brel) ((brel)->free((brel))) 8621c84b71e205b5ab13f14343da5645dcc985856dTheodore Ts'o 87