Blame view

fs/xfs/xfs_extfree_item.h 5.11 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
  /*
7b7187698   Nathan Scott   [XFS] Update lice...
2
3
   * Copyright (c) 2000,2005 Silicon Graphics, Inc.
   * All Rights Reserved.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
4
   *
7b7187698   Nathan Scott   [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   Linus Torvalds   Linux-2.6.12-rc2
7
8
   * published by the Free Software Foundation.
   *
7b7187698   Nathan Scott   [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   Linus Torvalds   Linux-2.6.12-rc2
13
   *
7b7187698   Nathan Scott   [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   Linus Torvalds   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   Tim Shimmin   [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   Tim Shimmin   [XFS] cleanup the...
35
  #ifndef HAVE_FORMAT32
6d192a9b8   Tim Shimmin   [XFS] inode items...
36
  typedef struct xfs_extent_32 {
128dabc5e   Tim Shimmin   [XFS] cleanup the...
37
38
  	__uint64_t	ext_start;
  	__uint32_t	ext_len;
6d192a9b8   Tim Shimmin   [XFS] inode items...
39
  } __attribute__((packed)) xfs_extent_32_t;
128dabc5e   Tim Shimmin   [XFS] cleanup the...
40
  #endif
6d192a9b8   Tim Shimmin   [XFS] inode items...
41
42
  
  typedef struct xfs_extent_64 {
128dabc5e   Tim Shimmin   [XFS] cleanup the...
43
44
  	__uint64_t	ext_start;
  	__uint32_t	ext_len;
6d192a9b8   Tim Shimmin   [XFS] inode items...
45
46
47
48
  	__uint32_t	ext_pad;
  } xfs_extent_64_t;
  
  /*
1da177e4c   Linus Torvalds   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   Tim Shimmin   [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   Linus Torvalds   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   Tim Shimmin   [XFS] cleanup the...
60
  #ifndef HAVE_FORMAT32
6d192a9b8   Tim Shimmin   [XFS] inode items...
61
  typedef struct xfs_efi_log_format_32 {
128dabc5e   Tim Shimmin   [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   Tim Shimmin   [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   Tim Shimmin   [XFS] cleanup the...
68
  #endif
6d192a9b8   Tim Shimmin   [XFS] inode items...
69
70
  
  typedef struct xfs_efi_log_format_64 {
128dabc5e   Tim Shimmin   [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   Tim Shimmin   [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   Linus Torvalds   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   Tim Shimmin   [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   Linus Torvalds   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   Tim Shimmin   [XFS] cleanup the...
89
  #ifndef HAVE_FORMAT32
6d192a9b8   Tim Shimmin   [XFS] inode items...
90
  typedef struct xfs_efd_log_format_32 {
128dabc5e   Tim Shimmin   [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   Tim Shimmin   [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   Tim Shimmin   [XFS] cleanup the...
97
  #endif
6d192a9b8   Tim Shimmin   [XFS] inode items...
98
99
  
  typedef struct xfs_efd_log_format_64 {
128dabc5e   Tim Shimmin   [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   Tim Shimmin   [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   Linus Torvalds   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   Tim Shimmin   [XFS] inode items...
157
158
  int			xfs_efi_copy_format(xfs_log_iovec_t *buf,
  					    xfs_efi_log_format_t *dst_efi_fmt);
7d795ca34   Christoph Hellwig   [XFS] consolidate...
159
  void			xfs_efi_item_free(xfs_efi_log_item_t *);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
160
161
162
  #endif	/* __KERNEL__ */
  
  #endif	/* __XFS_EXTFREE_ITEM_H__ */