Blame view
fs/xfs/xfs_extfree_item.h
5.11 KB
1da177e4c Linux-2.6.12-rc2 |
1 |
/* |
7b7187698 [XFS] Update lice... |
2 3 |
* Copyright (c) 2000,2005 Silicon Graphics, Inc. * All Rights Reserved. |
1da177e4c Linux-2.6.12-rc2 |
4 |
* |
7b7187698 [XFS] Update lice... |
5 6 |
* This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as |
1da177e4c Linux-2.6.12-rc2 |
7 8 |
* published by the Free Software Foundation. * |
7b7187698 [XFS] Update lice... |
9 10 11 12 |
* This program is distributed in the hope that it would be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. |
1da177e4c Linux-2.6.12-rc2 |
13 |
* |
7b7187698 [XFS] Update lice... |
14 15 16 |
* You should have received a copy of the GNU General Public License * along with this program; if not, write the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
1da177e4c Linux-2.6.12-rc2 |
17 18 19 20 21 22 23 24 25 26 27 28 29 |
*/ #ifndef __XFS_EXTFREE_ITEM_H__ #define __XFS_EXTFREE_ITEM_H__ struct xfs_mount; struct kmem_zone; typedef struct xfs_extent { xfs_dfsbno_t ext_start; xfs_extlen_t ext_len; } xfs_extent_t; /* |
6d192a9b8 [XFS] inode items... |
30 31 32 33 34 |
* Since an xfs_extent_t has types (start:64, len: 32) * there are different alignments on 32 bit and 64 bit kernels. * So we provide the different variants for use by a * conversion routine. */ |
128dabc5e [XFS] cleanup the... |
35 |
#ifndef HAVE_FORMAT32 |
6d192a9b8 [XFS] inode items... |
36 |
typedef struct xfs_extent_32 { |
128dabc5e [XFS] cleanup the... |
37 38 |
__uint64_t ext_start; __uint32_t ext_len; |
6d192a9b8 [XFS] inode items... |
39 |
} __attribute__((packed)) xfs_extent_32_t; |
128dabc5e [XFS] cleanup the... |
40 |
#endif |
6d192a9b8 [XFS] inode items... |
41 42 |
typedef struct xfs_extent_64 { |
128dabc5e [XFS] cleanup the... |
43 44 |
__uint64_t ext_start; __uint32_t ext_len; |
6d192a9b8 [XFS] inode items... |
45 46 47 48 |
__uint32_t ext_pad; } xfs_extent_64_t; /* |
1da177e4c Linux-2.6.12-rc2 |
49 50 51 52 53 |
* This is the structure used to lay out an efi log item in the * log. The efi_extents field is a variable size array whose * size is given by efi_nextents. */ typedef struct xfs_efi_log_format { |
128dabc5e [XFS] cleanup the... |
54 55 56 |
__uint16_t efi_type; /* efi log item type */ __uint16_t efi_size; /* size of this item */ __uint32_t efi_nextents; /* # extents to free */ |
1da177e4c Linux-2.6.12-rc2 |
57 58 59 |
__uint64_t efi_id; /* efi identifier */ xfs_extent_t efi_extents[1]; /* array of extents to free */ } xfs_efi_log_format_t; |
128dabc5e [XFS] cleanup the... |
60 |
#ifndef HAVE_FORMAT32 |
6d192a9b8 [XFS] inode items... |
61 |
typedef struct xfs_efi_log_format_32 { |
128dabc5e [XFS] cleanup the... |
62 63 64 |
__uint16_t efi_type; /* efi log item type */ __uint16_t efi_size; /* size of this item */ __uint32_t efi_nextents; /* # extents to free */ |
6d192a9b8 [XFS] inode items... |
65 66 67 |
__uint64_t efi_id; /* efi identifier */ xfs_extent_32_t efi_extents[1]; /* array of extents to free */ } __attribute__((packed)) xfs_efi_log_format_32_t; |
128dabc5e [XFS] cleanup the... |
68 |
#endif |
6d192a9b8 [XFS] inode items... |
69 70 |
typedef struct xfs_efi_log_format_64 { |
128dabc5e [XFS] cleanup the... |
71 72 73 |
__uint16_t efi_type; /* efi log item type */ __uint16_t efi_size; /* size of this item */ __uint32_t efi_nextents; /* # extents to free */ |
6d192a9b8 [XFS] inode items... |
74 75 76 |
__uint64_t efi_id; /* efi identifier */ xfs_extent_64_t efi_extents[1]; /* array of extents to free */ } xfs_efi_log_format_64_t; |
1da177e4c Linux-2.6.12-rc2 |
77 78 79 80 81 82 |
/* * This is the structure used to lay out an efd log item in the * log. The efd_extents array is a variable size array whose * size is given by efd_nextents; */ typedef struct xfs_efd_log_format { |
128dabc5e [XFS] cleanup the... |
83 84 85 |
__uint16_t efd_type; /* efd log item type */ __uint16_t efd_size; /* size of this item */ __uint32_t efd_nextents; /* # of extents freed */ |
1da177e4c Linux-2.6.12-rc2 |
86 87 88 |
__uint64_t efd_efi_id; /* id of corresponding efi */ xfs_extent_t efd_extents[1]; /* array of extents freed */ } xfs_efd_log_format_t; |
128dabc5e [XFS] cleanup the... |
89 |
#ifndef HAVE_FORMAT32 |
6d192a9b8 [XFS] inode items... |
90 |
typedef struct xfs_efd_log_format_32 { |
128dabc5e [XFS] cleanup the... |
91 92 93 |
__uint16_t efd_type; /* efd log item type */ __uint16_t efd_size; /* size of this item */ __uint32_t efd_nextents; /* # of extents freed */ |
6d192a9b8 [XFS] inode items... |
94 95 96 |
__uint64_t efd_efi_id; /* id of corresponding efi */ xfs_extent_32_t efd_extents[1]; /* array of extents freed */ } __attribute__((packed)) xfs_efd_log_format_32_t; |
128dabc5e [XFS] cleanup the... |
97 |
#endif |
6d192a9b8 [XFS] inode items... |
98 99 |
typedef struct xfs_efd_log_format_64 { |
128dabc5e [XFS] cleanup the... |
100 101 102 |
__uint16_t efd_type; /* efd log item type */ __uint16_t efd_size; /* size of this item */ __uint32_t efd_nextents; /* # of extents freed */ |
6d192a9b8 [XFS] inode items... |
103 104 105 |
__uint64_t efd_efi_id; /* id of corresponding efi */ xfs_extent_64_t efd_extents[1]; /* array of extents freed */ } xfs_efd_log_format_64_t; |
1da177e4c Linux-2.6.12-rc2 |
106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 |
#ifdef __KERNEL__ /* * Max number of extents in fast allocation path. */ #define XFS_EFI_MAX_FAST_EXTENTS 16 /* * Define EFI flags. */ #define XFS_EFI_RECOVERED 0x1 #define XFS_EFI_COMMITTED 0x2 #define XFS_EFI_CANCELED 0x4 /* * This is the "extent free intention" log item. It is used * to log the fact that some extents need to be free. It is * used in conjunction with the "extent free done" log item * described below. */ typedef struct xfs_efi_log_item { xfs_log_item_t efi_item; uint efi_flags; /* misc flags */ uint efi_next_extent; xfs_efi_log_format_t efi_format; } xfs_efi_log_item_t; /* * This is the "extent free done" log item. It is used to log * the fact that some extents earlier mentioned in an efi item * have been freed. */ typedef struct xfs_efd_log_item { xfs_log_item_t efd_item; xfs_efi_log_item_t *efd_efip; uint efd_next_extent; xfs_efd_log_format_t efd_format; } xfs_efd_log_item_t; /* * Max number of extents in fast allocation path. */ #define XFS_EFD_MAX_FAST_EXTENTS 16 extern struct kmem_zone *xfs_efi_zone; extern struct kmem_zone *xfs_efd_zone; xfs_efi_log_item_t *xfs_efi_init(struct xfs_mount *, uint); xfs_efd_log_item_t *xfs_efd_init(struct xfs_mount *, xfs_efi_log_item_t *, uint); |
6d192a9b8 [XFS] inode items... |
157 158 |
int xfs_efi_copy_format(xfs_log_iovec_t *buf, xfs_efi_log_format_t *dst_efi_fmt); |
7d795ca34 [XFS] consolidate... |
159 |
void xfs_efi_item_free(xfs_efi_log_item_t *); |
1da177e4c Linux-2.6.12-rc2 |
160 161 162 |
#endif /* __KERNEL__ */ #endif /* __XFS_EXTFREE_ITEM_H__ */ |