Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
fs
xfs
xfs_buf_item.h
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2000-2001,2005 Silicon Graphics, Inc.
3
* All Rights Reserved.
4
*
5
* This program is free software; you can redistribute it and/or
6
* modify it under the terms of the GNU General Public License as
7
* published by the Free Software Foundation.
8
*
9
* This program is distributed in the hope that it would be useful,
10
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
* GNU General Public License for more details.
13
*
14
* You should have received a copy of the GNU General Public License
15
* along with this program; if not, write the Free Software Foundation,
16
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17
*/
18
#ifndef __XFS_BUF_ITEM_H__
19
#define __XFS_BUF_ITEM_H__
20
21
extern
kmem_zone_t
*
xfs_buf_item_zone
;
22
23
/*
24
* This flag indicates that the buffer contains on disk inodes
25
* and requires special recovery handling.
26
*/
27
#define XFS_BLF_INODE_BUF 0x1
28
/*
29
* This flag indicates that the buffer should not be replayed
30
* during recovery because its blocks are being freed.
31
*/
32
#define XFS_BLF_CANCEL 0x2
33
/*
34
* This flag indicates that the buffer contains on disk
35
* user or group dquots and may require special recovery handling.
36
*/
37
#define XFS_BLF_UDQUOT_BUF 0x4
38
#define XFS_BLF_PDQUOT_BUF 0x8
39
#define XFS_BLF_GDQUOT_BUF 0x10
40
41
#define XFS_BLF_CHUNK 128
42
#define XFS_BLF_SHIFT 7
43
#define BIT_TO_WORD_SHIFT 5
44
#define NBWORD (NBBY * sizeof(unsigned int))
45
46
/*
47
* This is the structure used to lay out a buf log item in the
48
* log. The data map describes which 128 byte chunks of the buffer
49
* have been logged.
50
*/
51
#define XFS_BLF_DATAMAP_SIZE ((XFS_MAX_BLOCKSIZE / XFS_BLF_CHUNK) / NBWORD)
52
53
typedef
struct
xfs_buf_log_format
{
54
unsigned
short
blf_type
;
/* buf log item type indicator */
55
unsigned
short
blf_size
;
/* size of this item */
56
ushort
blf_flags
;
/* misc state */
57
ushort
blf_len
;
/* number of blocks in this buf */
58
__int64_t
blf_blkno
;
/* starting blkno of this buf */
59
unsigned
int
blf_map_size
;
/* used size of data bitmap in words */
60
unsigned
int
blf_data_map
[
XFS_BLF_DATAMAP_SIZE
];
/* dirty bitmap */
61
}
xfs_buf_log_format_t
;
62
63
/*
64
* buf log item flags
65
*/
66
#define XFS_BLI_HOLD 0x01
67
#define XFS_BLI_DIRTY 0x02
68
#define XFS_BLI_STALE 0x04
69
#define XFS_BLI_LOGGED 0x08
70
#define XFS_BLI_INODE_ALLOC_BUF 0x10
71
#define XFS_BLI_STALE_INODE 0x20
72
#define XFS_BLI_INODE_BUF 0x40
73
74
#define XFS_BLI_FLAGS \
75
{ XFS_BLI_HOLD, "HOLD" }, \
76
{ XFS_BLI_DIRTY, "DIRTY" }, \
77
{ XFS_BLI_STALE, "STALE" }, \
78
{ XFS_BLI_LOGGED, "LOGGED" }, \
79
{ XFS_BLI_INODE_ALLOC_BUF, "INODE_ALLOC" }, \
80
{ XFS_BLI_STALE_INODE, "STALE_INODE" }, \
81
{ XFS_BLI_INODE_BUF, "INODE_BUF" }
82
83
84
#ifdef __KERNEL__
85
86
struct
xfs_buf
;
87
struct
xfs_mount;
88
struct
xfs_buf_log_item;
89
90
/*
91
* This is the in core log item structure used to track information
92
* needed to log buffers. It tracks how many times the lock has been
93
* locked, and which 128 byte chunks of the buffer are dirty.
94
*/
95
typedef
struct
xfs_buf_log_item {
96
xfs_log_item_t bli_item;
/* common item structure */
97
struct
xfs_buf
*bli_buf;
/* real buffer pointer */
98
unsigned
int
bli_flags;
/* misc flags */
99
unsigned
int
bli_recur;
/* lock recursion count */
100
atomic_t
bli_refcount;
/* cnt of tp refs */
101
#ifdef XFS_TRANS_DEBUG
102
char
*bli_orig;
/* original buffer copy */
103
char
*bli_logged;
/* bytes logged (bitmap) */
104
#endif
105
int
bli_format_count;
/* count of headers */
106
struct
xfs_buf_log_format
*bli_formats;
/* array of in-log header ptrs */
107
struct
xfs_buf_log_format
bli_format;
/* embedded in-log header */
108
} xfs_buf_log_item_t;
109
110
void
xfs_buf_item_init
(
struct
xfs_buf
*,
struct
xfs_mount *);
111
void
xfs_buf_item_relse
(
struct
xfs_buf
*);
112
void
xfs_buf_item_log
(xfs_buf_log_item_t *,
uint
,
uint
);
113
uint
xfs_buf_item_dirty
(xfs_buf_log_item_t *);
114
void
xfs_buf_attach_iodone
(
struct
xfs_buf
*,
115
void
(*)(
struct
xfs_buf
*, xfs_log_item_t *),
116
xfs_log_item_t *);
117
void
xfs_buf_iodone_callbacks
(
struct
xfs_buf
*);
118
void
xfs_buf_iodone
(
struct
xfs_buf
*,
struct
xfs_log_item *);
119
120
#ifdef XFS_TRANS_DEBUG
121
void
122
xfs_buf_item_flush_log_debug(
123
struct
xfs_buf
*bp,
124
uint
first
,
125
uint
last);
126
#else
127
#define xfs_buf_item_flush_log_debug(bp, first, last)
128
#endif
129
130
#endif
/* __KERNEL__ */
131
132
#endif
/* __XFS_BUF_ITEM_H__ */
Generated on Thu Jan 10 2013 14:50:21 for Linux Kernel by
1.8.2