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
udf
udfdecl.h
Go to the documentation of this file.
1
#ifndef __UDF_DECL_H
2
#define __UDF_DECL_H
3
4
#define pr_fmt(fmt) "UDF-fs: " fmt
5
6
#include "
ecma_167.h
"
7
#include "
osta_udf.h
"
8
9
#include <linux/fs.h>
10
#include <linux/types.h>
11
#include <
linux/buffer_head.h
>
12
#include <
linux/udf_fs_i.h
>
13
14
#include "
udf_sb.h
"
15
#include "
udfend.h
"
16
#include "
udf_i.h
"
17
18
#define UDF_PREALLOCATE
19
#define UDF_DEFAULT_PREALLOC_BLOCKS 8
20
21
extern
__printf
(3, 4)
void
_udf_err
(
struct
super_block
*
sb
,
22
const
char
*
function
,
const
char
*
fmt
, ...);
23
#define udf_err(sb, fmt, ...) \
24
_udf_err(sb, __func__, fmt, ##__VA_ARGS__)
25
26
extern
__printf
(3, 4)
void
_udf_warn
(
struct
super_block
*sb,
27
const
char
*function,
const
char
*fmt, ...);
28
#define udf_warn(sb, fmt, ...) \
29
_udf_warn(sb, __func__, fmt, ##__VA_ARGS__)
30
31
#define udf_info(fmt, ...) \
32
pr_info("INFO " fmt, ##__VA_ARGS__)
33
34
#undef UDFFS_DEBUG
35
36
#ifdef UDFFS_DEBUG
37
#define udf_debug(fmt, ...) \
38
printk(KERN_DEBUG pr_fmt("%s:%d:%s: " fmt), \
39
__FILE__, __LINE__, __func__, ##__VA_ARGS__)
40
#else
41
#define udf_debug(fmt, ...) \
42
no_printk(fmt, ##__VA_ARGS__)
43
#endif
44
45
#define udf_fixed_to_variable(x) ( ( ( (x) >> 5 ) * 39 ) + ( (x) & 0x0000001F ) )
46
#define udf_variable_to_fixed(x) ( ( ( (x) / 39 ) << 5 ) + ( (x) % 39 ) )
47
48
#define UDF_EXTENT_LENGTH_MASK 0x3FFFFFFF
49
#define UDF_EXTENT_FLAG_MASK 0xC0000000
50
51
#define UDF_NAME_PAD 4
52
#define UDF_NAME_LEN 256
53
#define UDF_PATH_LEN 1023
54
55
static
inline
size_t
udf_file_entry_alloc_offset(
struct
inode
*
inode
)
56
{
57
struct
udf_inode_info
*iinfo = UDF_I(inode);
58
if
(iinfo->
i_use
)
59
return
sizeof
(
struct
unallocSpaceEntry
);
60
else
if
(iinfo->
i_efe
)
61
return
sizeof
(
struct
extendedFileEntry
) + iinfo->i_lenEAttr;
62
else
63
return
sizeof
(
struct
fileEntry
) + iinfo->i_lenEAttr;
64
}
65
66
static
inline
size_t
udf_ext0_offset(
struct
inode
*
inode
)
67
{
68
if
(UDF_I(inode)->i_alloc_type ==
ICBTAG_FLAG_AD_IN_ICB
)
69
return
udf_file_entry_alloc_offset(inode);
70
else
71
return
0;
72
}
73
74
/* computes tag checksum */
75
u8
udf_tag_checksum
(
const
struct
tag
*
t
);
76
77
struct
dentry
;
78
struct
inode;
79
struct
task_struct
;
80
struct
buffer_head;
81
struct
super_block
;
82
83
extern
const
struct
export_operations
udf_export_ops
;
84
extern
const
struct
inode_operations
udf_dir_inode_operations
;
85
extern
const
struct
file_operations
udf_dir_operations
;
86
extern
const
struct
inode_operations
udf_file_inode_operations
;
87
extern
const
struct
file_operations
udf_file_operations
;
88
extern
const
struct
inode_operations
udf_symlink_inode_operations
;
89
extern
const
struct
address_space_operations
udf_aops
;
90
extern
const
struct
address_space_operations
udf_adinicb_aops
;
91
extern
const
struct
address_space_operations
udf_symlink_aops
;
92
93
struct
udf_fileident_bh
{
94
struct
buffer_head *
sbh
;
95
struct
buffer_head *
ebh
;
96
int
soffset
;
97
int
eoffset
;
98
};
99
100
struct
udf_vds_record
{
101
uint32_t
block
;
102
uint32_t
volDescSeqNum
;
103
};
104
105
struct
generic_desc
{
106
struct
tag
descTag
;
107
__le32
volDescSeqNum
;
108
};
109
110
struct
ustr
{
111
uint8_t
u_cmpID
;
112
uint8_t
u_name
[
UDF_NAME_LEN
- 2];
113
uint8_t
u_len
;
114
};
115
116
struct
extent_position
{
117
struct
buffer_head *
bh
;
118
uint32_t
offset
;
119
struct
kernel_lb_addr
block
;
120
};
121
122
/* super.c */
123
124
static
inline
void
udf_updated_lvid(
struct
super_block
*sb)
125
{
126
struct
buffer_head *bh = UDF_SB(sb)->s_lvid_bh;
127
128
BUG_ON
(!bh);
129
WARN_ON_ONCE
(((
struct
logicalVolIntegrityDesc
*)
130
bh->b_data)->integrityType !=
131
cpu_to_le32
(
LVID_INTEGRITY_TYPE_OPEN
));
132
UDF_SB(sb)->s_lvid_dirty = 1;
133
}
134
extern
u64
lvid_get_unique_id
(
struct
super_block
*sb);
135
struct
inode *
udf_find_metadata_inode_efe
(
struct
super_block
*sb,
136
u32
meta_file_loc,
u32
partition_num
);
137
138
/* namei.c */
139
extern
int
udf_write_fi
(
struct
inode *inode,
struct
fileIdentDesc
*,
140
struct
fileIdentDesc
*,
struct
udf_fileident_bh
*,
141
uint8_t
*,
uint8_t
*);
142
143
/* file.c */
144
extern
long
udf_ioctl
(
struct
file
*,
unsigned
int
,
unsigned
long
);
145
/* inode.c */
146
extern
struct
inode *
udf_iget
(
struct
super_block
*,
struct
kernel_lb_addr
*);
147
extern
int
udf_expand_file_adinicb
(
struct
inode *);
148
extern
struct
buffer_head *
udf_expand_dir_adinicb
(
struct
inode *,
int
*,
int
*);
149
extern
struct
buffer_head *
udf_bread
(
struct
inode *,
int
,
int
,
int
*);
150
extern
int
udf_setsize
(
struct
inode *, loff_t);
151
extern
void
udf_read_inode
(
struct
inode *);
152
extern
void
udf_evict_inode
(
struct
inode *);
153
extern
int
udf_write_inode
(
struct
inode *,
struct
writeback_control
*wbc);
154
extern
long
udf_block_map
(
struct
inode *,
sector_t
);
155
extern
int8_t
inode_bmap
(
struct
inode *,
sector_t
,
struct
extent_position
*,
156
struct
kernel_lb_addr
*,
uint32_t
*,
sector_t
*);
157
extern
int
udf_add_aext
(
struct
inode *,
struct
extent_position
*,
158
struct
kernel_lb_addr
*,
uint32_t
,
int
);
159
extern
void
udf_write_aext
(
struct
inode *,
struct
extent_position
*,
160
struct
kernel_lb_addr
*,
uint32_t
,
int
);
161
extern
int8_t
udf_delete_aext
(
struct
inode *,
struct
extent_position
,
162
struct
kernel_lb_addr
,
uint32_t
);
163
extern
int8_t
udf_next_aext
(
struct
inode *,
struct
extent_position
*,
164
struct
kernel_lb_addr
*,
uint32_t
*,
int
);
165
extern
int8_t
udf_current_aext
(
struct
inode *,
struct
extent_position
*,
166
struct
kernel_lb_addr
*,
uint32_t
*,
int
);
167
168
/* misc.c */
169
extern
struct
buffer_head *
udf_tgetblk
(
struct
super_block
*,
int
);
170
extern
struct
buffer_head *
udf_tread
(
struct
super_block
*,
int
);
171
extern
struct
genericFormat
*
udf_add_extendedattr
(
struct
inode *,
uint32_t
,
172
uint32_t
,
uint8_t
);
173
extern
struct
genericFormat
*
udf_get_extendedattr
(
struct
inode *,
uint32_t
,
174
uint8_t
);
175
extern
struct
buffer_head *
udf_read_tagged
(
struct
super_block
*,
uint32_t
,
176
uint32_t
,
uint16_t
*);
177
extern
struct
buffer_head *
udf_read_ptagged
(
struct
super_block
*,
178
struct
kernel_lb_addr
*,
uint32_t
,
179
uint16_t
*);
180
extern
void
udf_update_tag
(
char
*,
int
);
181
extern
void
udf_new_tag
(
char
*,
uint16_t
,
uint16_t
,
uint16_t
,
uint32_t
,
int
);
182
183
/* lowlevel.c */
184
extern
unsigned
int
udf_get_last_session
(
struct
super_block
*);
185
extern
unsigned
long
udf_get_last_block
(
struct
super_block
*);
186
187
/* partition.c */
188
extern
uint32_t
udf_get_pblock
(
struct
super_block
*,
uint32_t
,
uint16_t
,
189
uint32_t
);
190
extern
uint32_t
udf_get_pblock_virt15
(
struct
super_block
*,
uint32_t
,
uint16_t
,
191
uint32_t
);
192
extern
uint32_t
udf_get_pblock_virt20
(
struct
super_block
*,
uint32_t
,
uint16_t
,
193
uint32_t
);
194
extern
uint32_t
udf_get_pblock_spar15
(
struct
super_block
*,
uint32_t
,
uint16_t
,
195
uint32_t
);
196
extern
uint32_t
udf_get_pblock_meta25
(
struct
super_block
*,
uint32_t
,
uint16_t
,
197
uint32_t
);
198
extern
int
udf_relocate_blocks
(
struct
super_block
*,
long
,
long
*);
199
200
static
inline
uint32_t
201
udf_get_lb_pblock(
struct
super_block
*sb,
struct
kernel_lb_addr
*
loc
,
202
uint32_t
offset
)
203
{
204
return
udf_get_pblock
(sb, loc->
logicalBlockNum
,
205
loc->
partitionReferenceNum
, offset);
206
}
207
208
/* unicode.c */
209
extern
int
udf_get_filename
(
struct
super_block
*,
uint8_t
*,
uint8_t
*,
int
);
210
extern
int
udf_put_filename
(
struct
super_block
*,
const
uint8_t
*,
uint8_t
*,
211
int
);
212
extern
int
udf_build_ustr
(
struct
ustr
*,
dstring
*,
int
);
213
extern
int
udf_CS0toUTF8
(
struct
ustr
*,
const
struct
ustr
*);
214
215
/* ialloc.c */
216
extern
void
udf_free_inode
(
struct
inode *);
217
extern
struct
inode *
udf_new_inode
(
struct
inode *,
umode_t
,
int
*);
218
219
/* truncate.c */
220
extern
void
udf_truncate_tail_extent
(
struct
inode *);
221
extern
void
udf_discard_prealloc
(
struct
inode *);
222
extern
void
udf_truncate_extents
(
struct
inode *);
223
224
/* balloc.c */
225
extern
void
udf_free_blocks
(
struct
super_block
*,
struct
inode *,
226
struct
kernel_lb_addr
*,
uint32_t
,
uint32_t
);
227
extern
int
udf_prealloc_blocks
(
struct
super_block
*,
struct
inode *,
uint16_t
,
228
uint32_t
,
uint32_t
);
229
extern
int
udf_new_block
(
struct
super_block
*,
struct
inode *,
uint16_t
,
230
uint32_t
,
int
*);
231
232
/* directory.c */
233
extern
struct
fileIdentDesc
*
udf_fileident_read
(
struct
inode *, loff_t *,
234
struct
udf_fileident_bh
*,
235
struct
fileIdentDesc
*,
236
struct
extent_position
*,
237
struct
kernel_lb_addr
*,
uint32_t
*,
238
sector_t
*);
239
extern
struct
fileIdentDesc
*
udf_get_fileident
(
void
*
buffer
,
int
bufsize
,
240
int
*
offset
);
241
extern
struct
long_ad
*
udf_get_filelongad
(
uint8_t
*,
int
,
uint32_t
*,
int
);
242
extern
struct
short_ad
*
udf_get_fileshortad
(
uint8_t
*,
int
,
uint32_t
*,
int
);
243
244
/* udftime.c */
245
extern
struct
timespec
*
udf_disk_stamp_to_time
(
struct
timespec
*
dest
,
246
struct
timestamp
src
);
247
extern
struct
timestamp
*
udf_time_to_disk_stamp
(
struct
timestamp
*
dest
,
struct
timespec
src
);
248
249
#endif
/* __UDF_DECL_H */
Generated on Thu Jan 10 2013 14:50:12 for Linux Kernel by
1.8.2