busybox/e2fsprogs/old_e2fsprogs/ext2fs/irel.h
<<
>>
Prefs
   1/* vi: set sw=4 ts=4: */
   2/*
   3 * irel.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
  13struct ext2_inode_reference {
  14        blk_t   block;
  15        __u16 offset;
  16};
  17
  18struct ext2_inode_relocate_entry {
  19        ext2_ino_t      new;
  20        ext2_ino_t      orig;
  21        __u16           flags;
  22        __u16           max_refs;
  23};
  24
  25typedef struct ext2_inode_relocation_table *ext2_irel;
  26
  27struct ext2_inode_relocation_table {
  28        __u32   magic;
  29        char    *name;
  30        ext2_ino_t      current;
  31        void    *priv_data;
  32
  33        /*
  34         * Add an inode relocation entry.
  35         */
  36        errcode_t (*put)(ext2_irel irel, ext2_ino_t old,
  37                              struct ext2_inode_relocate_entry *ent);
  38        /*
  39         * Get an inode relocation entry.
  40         */
  41        errcode_t (*get)(ext2_irel irel, ext2_ino_t old,
  42                              struct ext2_inode_relocate_entry *ent);
  43
  44        /*
  45         * Get an inode relocation entry by its original inode number
  46         */
  47        errcode_t (*get_by_orig)(ext2_irel irel, ext2_ino_t orig, ext2_ino_t *old,
  48                                 struct ext2_inode_relocate_entry *ent);
  49
  50        /*
  51         * Initialize for iterating over the inode relocation entries.
  52         */
  53        errcode_t (*start_iter)(ext2_irel irel);
  54
  55        /*
  56         * The iterator function for the inode relocation entries.
  57         * Returns an inode number of 0 when out of entries.
  58         */
  59        errcode_t (*next)(ext2_irel irel, ext2_ino_t *old,
  60                          struct ext2_inode_relocate_entry *ent);
  61
  62        /*
  63         * Add an inode reference (i.e., note the fact that a
  64         * particular block/offset contains a reference to an inode)
  65         */
  66        errcode_t (*add_ref)(ext2_irel irel, ext2_ino_t ino,
  67                             struct ext2_inode_reference *ref);
  68
  69        /*
  70         * Initialize for iterating over the inode references for a
  71         * particular inode.
  72         */
  73        errcode_t (*start_iter_ref)(ext2_irel irel, ext2_ino_t ino);
  74
  75        /*
  76         * The iterator function for the inode references for an
  77         * inode.  The references for only one inode can be interator
  78         * over at a time, as the iterator state is stored in ext2_irel.
  79         */
  80        errcode_t (*next_ref)(ext2_irel irel,
  81                              struct ext2_inode_reference *ref);
  82
  83        /*
  84         * Move the inode relocation table from one inode number to
  85         * another.  Note that the inode references also must move.
  86         */
  87        errcode_t (*move)(ext2_irel irel, ext2_ino_t old, ext2_ino_t new);
  88
  89        /*
  90         * Remove an inode relocation entry, along with all of the
  91         * inode references.
  92         */
  93        errcode_t (*delete)(ext2_irel irel, ext2_ino_t old);
  94
  95        /*
  96         * Free the inode relocation table.
  97         */
  98        errcode_t (*free)(ext2_irel irel);
  99};
 100
 101errcode_t ext2fs_irel_memarray_create(char *name, ext2_ino_t max_inode,
 102                                    ext2_irel *irel);
 103
 104#define ext2fs_irel_put(irel, old, ent) ((irel)->put((irel), old, ent))
 105#define ext2fs_irel_get(irel, old, ent) ((irel)->get((irel), old, ent))
 106#define ext2fs_irel_get_by_orig(irel, orig, old, ent) \
 107                        ((irel)->get_by_orig((irel), orig, old, ent))
 108#define ext2fs_irel_start_iter(irel) ((irel)->start_iter((irel)))
 109#define ext2fs_irel_next(irel, old, ent) ((irel)->next((irel), old, ent))
 110#define ext2fs_irel_add_ref(irel, ino, ref) ((irel)->add_ref((irel), ino, ref))
 111#define ext2fs_irel_start_iter_ref(irel, ino) ((irel)->start_iter_ref((irel), ino))
 112#define ext2fs_irel_next_ref(irel, ref) ((irel)->next_ref((irel), ref))
 113#define ext2fs_irel_move(irel, old, new) ((irel)->move((irel), old, new))
 114#define ext2fs_irel_delete(irel, old) ((irel)->delete((irel), old))
 115#define ext2fs_irel_free(irel) ((irel)->free((irel)))
 116