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
ubifs
ubifs.h
Go to the documentation of this file.
1
/*
2
* This file is part of UBIFS.
3
*
4
* Copyright (C) 2006-2008 Nokia Corporation
5
*
6
* This program is free software; you can redistribute it and/or modify it
7
* under the terms of the GNU General Public License version 2 as published by
8
* the Free Software Foundation.
9
*
10
* This program is distributed in the hope that it will be useful, but WITHOUT
11
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
13
* more details.
14
*
15
* You should have received a copy of the GNU General Public License along with
16
* this program; if not, write to the Free Software Foundation, Inc., 51
17
* Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18
*
19
* Authors: Artem Bityutskiy (Битюцкий Артём)
20
* Adrian Hunter
21
*/
22
23
#ifndef __UBIFS_H__
24
#define __UBIFS_H__
25
26
#include <asm/div64.h>
27
#include <
linux/statfs.h
>
28
#include <linux/fs.h>
29
#include <
linux/err.h
>
30
#include <linux/sched.h>
31
#include <linux/slab.h>
32
#include <
linux/vmalloc.h
>
33
#include <
linux/spinlock.h
>
34
#include <
linux/mutex.h
>
35
#include <
linux/rwsem.h
>
36
#include <
linux/mtd/ubi.h
>
37
#include <
linux/pagemap.h
>
38
#include <
linux/backing-dev.h
>
39
#include "
ubifs-media.h
"
40
41
/* Version of this UBIFS implementation */
42
#define UBIFS_VERSION 1
43
44
/* Normal UBIFS messages */
45
#define ubifs_msg(fmt, ...) pr_notice("UBIFS: " fmt "\n", ##__VA_ARGS__)
46
/* UBIFS error messages */
47
#define ubifs_err(fmt, ...) \
48
pr_err("UBIFS error (pid %d): %s: " fmt "\n", current->pid, \
49
__func__, ##__VA_ARGS__)
50
/* UBIFS warning messages */
51
#define ubifs_warn(fmt, ...) \
52
pr_warn("UBIFS warning (pid %d): %s: " fmt "\n", \
53
current->pid, __func__, ##__VA_ARGS__)
54
55
/* UBIFS file system VFS magic number */
56
#define UBIFS_SUPER_MAGIC 0x24051905
57
58
/* Number of UBIFS blocks per VFS page */
59
#define UBIFS_BLOCKS_PER_PAGE (PAGE_CACHE_SIZE / UBIFS_BLOCK_SIZE)
60
#define UBIFS_BLOCKS_PER_PAGE_SHIFT (PAGE_CACHE_SHIFT - UBIFS_BLOCK_SHIFT)
61
62
/* "File system end of life" sequence number watermark */
63
#define SQNUM_WARN_WATERMARK 0xFFFFFFFF00000000ULL
64
#define SQNUM_WATERMARK 0xFFFFFFFFFF000000ULL
65
66
/*
67
* Minimum amount of LEBs reserved for the index. At present the index needs at
68
* least 2 LEBs: one for the index head and one for in-the-gaps method (which
69
* currently does not cater for the index head and so excludes it from
70
* consideration).
71
*/
72
#define MIN_INDEX_LEBS 2
73
74
/* Minimum amount of data UBIFS writes to the flash */
75
#define MIN_WRITE_SZ (UBIFS_DATA_NODE_SZ + 8)
76
77
/*
78
* Currently we do not support inode number overlapping and re-using, so this
79
* watermark defines dangerous inode number level. This should be fixed later,
80
* although it is difficult to exceed current limit. Another option is to use
81
* 64-bit inode numbers, but this means more overhead.
82
*/
83
#define INUM_WARN_WATERMARK 0xFFF00000
84
#define INUM_WATERMARK 0xFFFFFF00
85
86
/* Maximum number of entries in each LPT (LEB category) heap */
87
#define LPT_HEAP_SZ 256
88
89
/*
90
* Background thread name pattern. The numbers are UBI device and volume
91
* numbers.
92
*/
93
#define BGT_NAME_PATTERN "ubifs_bgt%d_%d"
94
95
/* Write-buffer synchronization timeout interval in seconds */
96
#define WBUF_TIMEOUT_SOFTLIMIT 3
97
#define WBUF_TIMEOUT_HARDLIMIT 5
98
99
/* Maximum possible inode number (only 32-bit inodes are supported now) */
100
#define MAX_INUM 0xFFFFFFFF
101
102
/* Number of non-data journal heads */
103
#define NONDATA_JHEADS_CNT 2
104
105
/* Shorter names for journal head numbers for internal usage */
106
#define GCHD UBIFS_GC_HEAD
107
#define BASEHD UBIFS_BASE_HEAD
108
#define DATAHD UBIFS_DATA_HEAD
109
110
/* 'No change' value for 'ubifs_change_lp()' */
111
#define LPROPS_NC 0x80000001
112
113
/*
114
* There is no notion of truncation key because truncation nodes do not exist
115
* in TNC. However, when replaying, it is handy to introduce fake "truncation"
116
* keys for truncation nodes because the code becomes simpler. So we define
117
* %UBIFS_TRUN_KEY type.
118
*
119
* But otherwise, out of the journal reply scope, the truncation keys are
120
* invalid.
121
*/
122
#define UBIFS_TRUN_KEY UBIFS_KEY_TYPES_CNT
123
#define UBIFS_INVALID_KEY UBIFS_KEY_TYPES_CNT
124
125
/*
126
* How much a directory entry/extended attribute entry adds to the parent/host
127
* inode.
128
*/
129
#define CALC_DENT_SIZE(name_len) ALIGN(UBIFS_DENT_NODE_SZ + (name_len) + 1, 8)
130
131
/* How much an extended attribute adds to the host inode */
132
#define CALC_XATTR_BYTES(data_len) ALIGN(UBIFS_INO_NODE_SZ + (data_len) + 1, 8)
133
134
/*
135
* Znodes which were not touched for 'OLD_ZNODE_AGE' seconds are considered
136
* "old", and znode which were touched last 'YOUNG_ZNODE_AGE' seconds ago are
137
* considered "young". This is used by shrinker when selecting znode to trim
138
* off.
139
*/
140
#define OLD_ZNODE_AGE 20
141
#define YOUNG_ZNODE_AGE 5
142
143
/*
144
* Some compressors, like LZO, may end up with more data then the input buffer.
145
* So UBIFS always allocates larger output buffer, to be sure the compressor
146
* will not corrupt memory in case of worst case compression.
147
*/
148
#define WORST_COMPR_FACTOR 2
149
150
/*
151
* How much memory is needed for a buffer where we comress a data node.
152
*/
153
#define COMPRESSED_DATA_NODE_BUF_SZ \
154
(UBIFS_DATA_NODE_SZ + UBIFS_BLOCK_SIZE * WORST_COMPR_FACTOR)
155
156
/* Maximum expected tree height for use by bottom_up_buf */
157
#define BOTTOM_UP_HEIGHT 64
158
159
/* Maximum number of data nodes to bulk-read */
160
#define UBIFS_MAX_BULK_READ 32
161
162
/*
163
* Lockdep classes for UBIFS inode @ui_mutex.
164
*/
165
enum
{
166
WB_MUTEX_1
= 0,
167
WB_MUTEX_2
= 1,
168
WB_MUTEX_3
= 2,
169
};
170
171
/*
172
* Znode flags (actually, bit numbers which store the flags).
173
*
174
* DIRTY_ZNODE: znode is dirty
175
* COW_ZNODE: znode is being committed and a new instance of this znode has to
176
* be created before changing this znode
177
* OBSOLETE_ZNODE: znode is obsolete, which means it was deleted, but it is
178
* still in the commit list and the ongoing commit operation
179
* will commit it, and delete this znode after it is done
180
*/
181
enum
{
182
DIRTY_ZNODE
= 0,
183
COW_ZNODE
= 1,
184
OBSOLETE_ZNODE
= 2,
185
};
186
187
/*
188
* Commit states.
189
*
190
* COMMIT_RESTING: commit is not wanted
191
* COMMIT_BACKGROUND: background commit has been requested
192
* COMMIT_REQUIRED: commit is required
193
* COMMIT_RUNNING_BACKGROUND: background commit is running
194
* COMMIT_RUNNING_REQUIRED: commit is running and it is required
195
* COMMIT_BROKEN: commit failed
196
*/
197
enum
{
198
COMMIT_RESTING
= 0,
199
COMMIT_BACKGROUND
,
200
COMMIT_REQUIRED
,
201
COMMIT_RUNNING_BACKGROUND
,
202
COMMIT_RUNNING_REQUIRED
,
203
COMMIT_BROKEN
,
204
};
205
206
/*
207
* 'ubifs_scan_a_node()' return values.
208
*
209
* SCANNED_GARBAGE: scanned garbage
210
* SCANNED_EMPTY_SPACE: scanned empty space
211
* SCANNED_A_NODE: scanned a valid node
212
* SCANNED_A_CORRUPT_NODE: scanned a corrupted node
213
* SCANNED_A_BAD_PAD_NODE: scanned a padding node with invalid pad length
214
*
215
* Greater than zero means: 'scanned that number of padding bytes'
216
*/
217
enum
{
218
SCANNED_GARBAGE
= 0,
219
SCANNED_EMPTY_SPACE
= -1,
220
SCANNED_A_NODE
= -2,
221
SCANNED_A_CORRUPT_NODE
= -3,
222
SCANNED_A_BAD_PAD_NODE
= -4,
223
};
224
225
/*
226
* LPT cnode flag bits.
227
*
228
* DIRTY_CNODE: cnode is dirty
229
* OBSOLETE_CNODE: cnode is being committed and has been copied (or deleted),
230
* so it can (and must) be freed when the commit is finished
231
* COW_CNODE: cnode is being committed and must be copied before writing
232
*/
233
enum
{
234
DIRTY_CNODE
= 0,
235
OBSOLETE_CNODE
= 1,
236
COW_CNODE
= 2,
237
};
238
239
/*
240
* Dirty flag bits (lpt_drty_flgs) for LPT special nodes.
241
*
242
* LTAB_DIRTY: ltab node is dirty
243
* LSAVE_DIRTY: lsave node is dirty
244
*/
245
enum
{
246
LTAB_DIRTY
= 1,
247
LSAVE_DIRTY
= 2,
248
};
249
250
/*
251
* Return codes used by the garbage collector.
252
* @LEB_FREED: the logical eraseblock was freed and is ready to use
253
* @LEB_FREED_IDX: indexing LEB was freed and can be used only after the commit
254
* @LEB_RETAINED: the logical eraseblock was freed and retained for GC purposes
255
*/
256
enum
{
257
LEB_FREED
,
258
LEB_FREED_IDX
,
259
LEB_RETAINED
,
260
};
261
268
struct
ubifs_old_idx
{
269
struct
rb_node
rb
;
270
int
lnum
;
271
int
offs
;
272
};
273
274
/* The below union makes it easier to deal with keys */
275
union
ubifs_key
{
276
uint8_t
u8
[
UBIFS_SK_LEN
];
277
uint32_t
u32
[
UBIFS_SK_LEN
/4];
278
uint64_t
u64
[
UBIFS_SK_LEN
/8];
279
__le32
j32
[
UBIFS_SK_LEN
/4];
280
};
281
292
struct
ubifs_scan_node
{
293
struct
list_head
list
;
294
union
ubifs_key
key
;
295
unsigned
long
long
sqnum
;
296
int
type
;
297
int
offs
;
298
int
len
;
299
void
*
node
;
300
};
301
311
struct
ubifs_scan_leb
{
312
int
lnum
;
313
int
nodes_cnt
;
314
struct
list_head
nodes
;
315
int
endpt
;
316
int
ecc
;
317
void
*
buf
;
318
};
319
330
struct
ubifs_gced_idx_leb
{
331
struct
list_head
list
;
332
int
lnum
;
333
int
unmap
;
334
};
335
393
struct
ubifs_inode
{
394
struct
inode
vfs_inode
;
395
unsigned
long
long
creat_sqnum
;
396
unsigned
long
long
del_cmtno
;
397
unsigned
int
xattr_size
;
398
unsigned
int
xattr_cnt
;
399
unsigned
int
xattr_names
;
400
unsigned
int
dirty
:1;
401
unsigned
int
xattr
:1;
402
unsigned
int
bulk_read
:1;
403
unsigned
int
compr_type
:2;
404
struct
mutex
ui_mutex
;
405
spinlock_t
ui_lock
;
406
loff_t
synced_i_size
;
407
loff_t
ui_size
;
408
int
flags
;
409
pgoff_t
last_page_read
;
410
pgoff_t
read_in_a_row
;
411
int
data_len
;
412
void
*
data
;
413
};
414
425
struct
ubifs_unclean_leb
{
426
struct
list_head
list
;
427
int
lnum
;
428
int
endpt
;
429
};
430
431
/*
432
* LEB properties flags.
433
*
434
* LPROPS_UNCAT: not categorized
435
* LPROPS_DIRTY: dirty > free, dirty >= @c->dead_wm, not index
436
* LPROPS_DIRTY_IDX: dirty + free > @c->min_idx_node_sze and index
437
* LPROPS_FREE: free > 0, dirty < @c->dead_wm, not empty, not index
438
* LPROPS_HEAP_CNT: number of heaps used for storing categorized LEBs
439
* LPROPS_EMPTY: LEB is empty, not taken
440
* LPROPS_FREEABLE: free + dirty == leb_size, not index, not taken
441
* LPROPS_FRDI_IDX: free + dirty == leb_size and index, may be taken
442
* LPROPS_CAT_MASK: mask for the LEB categories above
443
* LPROPS_TAKEN: LEB was taken (this flag is not saved on the media)
444
* LPROPS_INDEX: LEB contains indexing nodes (this flag also exists on flash)
445
*/
446
enum
{
447
LPROPS_UNCAT
= 0,
448
LPROPS_DIRTY
= 1,
449
LPROPS_DIRTY_IDX
= 2,
450
LPROPS_FREE
= 3,
451
LPROPS_HEAP_CNT
= 3,
452
LPROPS_EMPTY
= 4,
453
LPROPS_FREEABLE
= 5,
454
LPROPS_FRDI_IDX
= 6,
455
LPROPS_CAT_MASK
= 15,
456
LPROPS_TAKEN
= 16,
457
LPROPS_INDEX
= 32,
458
};
459
469
struct
ubifs_lprops
{
470
int
free
;
471
int
dirty
;
472
int
flags
;
473
int
lnum
;
474
union
{
475
struct
list_head
list
;
476
int
hpos
;
477
};
478
};
479
487
struct
ubifs_lpt_lprops
{
488
int
free
;
489
int
dirty
;
490
unsigned
tgc
:1;
491
unsigned
cmt
:1;
492
};
493
520
struct
ubifs_lp_stats
{
521
int
empty_lebs
;
522
int
taken_empty_lebs
;
523
int
idx_lebs
;
524
long
long
total_free
;
525
long
long
total_dirty
;
526
long
long
total_used
;
527
long
long
total_dead
;
528
long
long
total_dark
;
529
};
530
531
struct
ubifs_nnode
;
532
542
struct
ubifs_cnode
{
543
struct
ubifs_nnode
*
parent
;
544
struct
ubifs_cnode
*
cnext
;
545
unsigned
long
flags
;
546
int
iip
;
547
int
level
;
548
int
num
;
549
};
550
561
struct
ubifs_pnode
{
562
struct
ubifs_nnode
*
parent
;
563
struct
ubifs_cnode
*
cnext
;
564
unsigned
long
flags
;
565
int
iip
;
566
int
level
;
567
int
num
;
568
struct
ubifs_lprops
lprops
[
UBIFS_LPT_FANOUT
];
569
};
570
579
struct
ubifs_nbranch
{
580
int
lnum
;
581
int
offs
;
582
union
{
583
struct
ubifs_nnode
*
nnode
;
584
struct
ubifs_pnode
*
pnode
;
585
struct
ubifs_cnode
*
cnode
;
586
};
587
};
588
599
struct
ubifs_nnode
{
600
struct
ubifs_nnode
*
parent
;
601
struct
ubifs_cnode
*
cnext
;
602
unsigned
long
flags
;
603
int
iip
;
604
int
level
;
605
int
num
;
606
struct
ubifs_nbranch
nbranch
[
UBIFS_LPT_FANOUT
];
607
};
608
617
struct
ubifs_lpt_heap
{
618
struct
ubifs_lprops
**
arr
;
619
int
cnt
;
620
int
max_cnt
;
621
};
622
623
/*
624
* Return codes for LPT scan callback function.
625
*
626
* LPT_SCAN_CONTINUE: continue scanning
627
* LPT_SCAN_ADD: add the LEB properties scanned to the tree in memory
628
* LPT_SCAN_STOP: stop scanning
629
*/
630
enum
{
631
LPT_SCAN_CONTINUE
= 0,
632
LPT_SCAN_ADD
= 1,
633
LPT_SCAN_STOP
= 2,
634
};
635
636
struct
ubifs_info
;
637
638
/* Callback used by the 'ubifs_lpt_scan_nolock()' function */
639
typedef
int
(*
ubifs_lpt_scan_callback
)(
struct
ubifs_info
*
c
,
640
const
struct
ubifs_lprops
*lprops,
641
int
in_tree,
void
*
data
);
642
677
struct
ubifs_wbuf
{
678
struct
ubifs_info
*
c
;
679
void
*
buf
;
680
int
lnum
;
681
int
offs
;
682
int
avail
;
683
int
used
;
684
int
size
;
685
int
jhead
;
686
int
(*
sync_callback
)(
struct
ubifs_info
*
c
,
int
lnum
,
int
free
,
int
pad
);
687
struct
mutex
io_mutex
;
688
spinlock_t
lock
;
689
ktime_t
softlimit
;
690
unsigned
long
long
delta
;
691
struct
hrtimer
timer
;
692
unsigned
int
no_timer
:1;
693
unsigned
int
need_sync
:1;
694
int
next_ino
;
695
ino_t
*
inodes
;
696
};
697
706
struct
ubifs_bud
{
707
int
lnum
;
708
int
start
;
709
int
jhead
;
710
struct
list_head
list
;
711
struct
rb_node
rb
;
712
};
713
722
struct
ubifs_jhead
{
723
struct
ubifs_wbuf
wbuf
;
724
struct
list_head
buds_list
;
725
unsigned
int
grouped
:1;
726
};
727
736
struct
ubifs_zbranch
{
737
union
ubifs_key
key
;
738
union
{
739
struct
ubifs_znode
*
znode
;
740
void
*
leaf
;
741
};
742
int
lnum
;
743
int
offs
;
744
int
len
;
745
};
746
765
struct
ubifs_znode
{
766
struct
ubifs_znode
*
parent
;
767
struct
ubifs_znode
*
cnext
;
768
unsigned
long
flags
;
769
unsigned
long
time
;
770
int
level
;
771
int
child_cnt
;
772
int
iip
;
773
int
alt
;
774
int
lnum
;
775
int
offs
;
776
int
len
;
777
struct
ubifs_zbranch
zbranch
[];
778
};
779
791
struct
bu_info
{
792
union
ubifs_key
key
;
793
struct
ubifs_zbranch
zbranch
[
UBIFS_MAX_BULK_READ
];
794
void
*
buf
;
795
int
buf_len
;
796
int
gc_seq
;
797
int
cnt
;
798
int
blk_cnt
;
799
int
eof
;
800
};
801
810
struct
ubifs_node_range
{
811
union
{
812
int
len
;
813
int
min_len
;
814
};
815
int
max_len
;
816
};
817
827
struct
ubifs_compressor
{
828
int
compr_type
;
829
struct
crypto_comp
*
cc
;
830
struct
mutex
*
comp_mutex
;
831
struct
mutex
*
decomp_mutex
;
832
const
char
*
name
;
833
const
char
*
capi_name
;
834
};
835
870
struct
ubifs_budget_req
{
871
unsigned
int
fast
:1;
872
unsigned
int
recalculate
:1;
873
#ifndef UBIFS_DEBUG
874
unsigned
int
new_page
:1;
875
unsigned
int
dirtied_page
:1;
876
unsigned
int
new_dent
:1;
877
unsigned
int
mod_dent
:1;
878
unsigned
int
new_ino
:1;
879
unsigned
int
new_ino_d
:13;
880
unsigned
int
dirtied_ino
:4;
881
unsigned
int
dirtied_ino_d
:15;
882
#else
883
/* Not bit-fields to check for overflows */
884
unsigned
int
new_page
;
885
unsigned
int
dirtied_page
;
886
unsigned
int
new_dent
;
887
unsigned
int
mod_dent
;
888
unsigned
int
new_ino
;
889
unsigned
int
new_ino_d
;
890
unsigned
int
dirtied_ino
;
891
unsigned
int
dirtied_ino_d
;
892
#endif
893
int
idx_growth
;
894
int
data_growth
;
895
int
dd_growth
;
896
};
897
908
struct
ubifs_orphan
{
909
struct
rb_node
rb
;
910
struct
list_head
list
;
911
struct
list_head
new_list
;
912
struct
ubifs_orphan
*
cnext
;
913
struct
ubifs_orphan
*
dnext
;
914
ino_t
inum
;
915
int
new
;
916
};
917
930
struct
ubifs_mount_opts
{
931
unsigned
int
unmount_mode
:2;
932
unsigned
int
bulk_read
:2;
933
unsigned
int
chk_data_crc
:2;
934
unsigned
int
override_compr
:1;
935
unsigned
int
compr_type
:2;
936
};
937
958
struct
ubifs_budg_info
{
959
long
long
idx_growth
;
960
long
long
data_growth
;
961
long
long
dd_growth
;
962
long
long
uncommitted_idx
;
963
unsigned
long
long
old_idx_sz
;
964
int
min_idx_lebs
;
965
unsigned
int
nospace
:1;
966
unsigned
int
nospace_rp
:1;
967
int
page_budget
;
968
int
inode_budget
;
969
int
dent_budget
;
970
};
971
972
struct
ubifs_debug_info
;
973
1222
struct
ubifs_info
{
1223
struct
super_block
*
vfs_sb
;
1224
struct
backing_dev_info
bdi
;
1225
1226
ino_t
highest_inum
;
1227
unsigned
long
long
max_sqnum
;
1228
unsigned
long
long
cmt_no
;
1229
spinlock_t
cnt_lock
;
1230
int
fmt_version
;
1231
int
ro_compat_version
;
1232
unsigned
char
uuid
[16];
1233
1234
int
lhead_lnum
;
1235
int
lhead_offs
;
1236
int
ltail_lnum
;
1237
struct
mutex
log_mutex
;
1238
int
min_log_bytes
;
1239
long
long
cmt_bud_bytes
;
1240
1241
struct
rb_root
buds
;
1242
long
long
bud_bytes
;
1243
spinlock_t
buds_lock
;
1244
int
jhead_cnt
;
1245
struct
ubifs_jhead
*
jheads
;
1246
long
long
max_bud_bytes
;
1247
long
long
bg_bud_bytes
;
1248
struct
list_head
old_buds
;
1249
int
max_bud_cnt
;
1250
1251
struct
rw_semaphore
commit_sem
;
1252
int
cmt_state
;
1253
spinlock_t
cs_lock
;
1254
wait_queue_head_t
cmt_wq
;
1255
1256
unsigned
int
big_lpt
:1;
1257
unsigned
int
space_fixup
:1;
1258
unsigned
int
no_chk_data_crc
:1;
1259
unsigned
int
bulk_read
:1;
1260
unsigned
int
default_compr
:2;
1261
unsigned
int
rw_incompat
:1;
1262
1263
struct
mutex
tnc_mutex
;
1264
struct
ubifs_zbranch
zroot
;
1265
struct
ubifs_znode
*
cnext
;
1266
struct
ubifs_znode
*
enext
;
1267
int
*
gap_lebs
;
1268
void
*
cbuf
;
1269
void
*
ileb_buf
;
1270
int
ileb_len
;
1271
int
ihead_lnum
;
1272
int
ihead_offs
;
1273
int
*
ilebs
;
1274
int
ileb_cnt
;
1275
int
ileb_nxt
;
1276
struct
rb_root
old_idx
;
1277
int
*
bottom_up_buf
;
1278
1279
struct
ubifs_mst_node
*
mst_node
;
1280
int
mst_offs
;
1281
struct
mutex
mst_mutex
;
1282
1283
int
max_bu_buf_len
;
1284
struct
mutex
bu_mutex
;
1285
struct
bu_info
bu
;
1286
1287
struct
mutex
write_reserve_mutex
;
1288
void
*
write_reserve_buf
;
1289
1290
int
log_lebs
;
1291
long
long
log_bytes
;
1292
int
log_last
;
1293
int
lpt_lebs
;
1294
int
lpt_first
;
1295
int
lpt_last
;
1296
int
orph_lebs
;
1297
int
orph_first
;
1298
int
orph_last
;
1299
int
main_lebs
;
1300
int
main_first
;
1301
long
long
main_bytes
;
1302
1303
uint8_t
key_hash_type
;
1304
uint32_t
(*
key_hash
)(
const
char
*
str
,
int
len
);
1305
int
key_fmt
;
1306
int
key_len
;
1307
int
fanout
;
1308
1309
int
min_io_size
;
1310
int
min_io_shift
;
1311
int
max_write_size
;
1312
int
max_write_shift
;
1313
int
leb_size
;
1314
int
leb_start
;
1315
int
half_leb_size
;
1316
int
idx_leb_size
;
1317
int
leb_cnt
;
1318
int
max_leb_cnt
;
1319
int
old_leb_cnt
;
1320
unsigned
int
ro_media
:1;
1321
unsigned
int
ro_mount
:1;
1322
unsigned
int
ro_error
:1;
1323
1324
atomic_long_t
dirty_pg_cnt
;
1325
atomic_long_t
dirty_zn_cnt
;
1326
atomic_long_t
clean_zn_cnt
;
1327
1328
spinlock_t
space_lock
;
1329
struct
ubifs_lp_stats
lst
;
1330
struct
ubifs_budg_info
bi
;
1331
unsigned
long
long
calc_idx_sz
;
1332
1333
int
ref_node_alsz
;
1334
int
mst_node_alsz
;
1335
int
min_idx_node_sz
;
1336
int
max_idx_node_sz
;
1337
long
long
max_inode_sz
;
1338
int
max_znode_sz
;
1339
1340
int
leb_overhead
;
1341
int
dead_wm
;
1342
int
dark_wm
;
1343
int
block_cnt
;
1344
1345
struct
ubifs_node_range
ranges
[
UBIFS_NODE_TYPES_CNT
];
1346
struct
ubi_volume_desc
*
ubi
;
1347
struct
ubi_device_info
di
;
1348
struct
ubi_volume_info
vi
;
1349
1350
struct
rb_root
orph_tree
;
1351
struct
list_head
orph_list
;
1352
struct
list_head
orph_new
;
1353
struct
ubifs_orphan
*
orph_cnext
;
1354
struct
ubifs_orphan
*
orph_dnext
;
1355
spinlock_t
orphan_lock
;
1356
void
*
orph_buf
;
1357
int
new_orphans
;
1358
int
cmt_orphans
;
1359
int
tot_orphans
;
1360
int
max_orphans
;
1361
int
ohead_lnum
;
1362
int
ohead_offs
;
1363
int
no_orphs
;
1364
1365
struct
task_struct
*
bgt
;
1366
char
bgt_name
[
sizeof
(
BGT_NAME_PATTERN
) + 9];
1367
int
need_bgt
;
1368
int
need_wbuf_sync
;
1369
1370
int
gc_lnum
;
1371
void
*
sbuf
;
1372
struct
list_head
idx_gc
;
1373
int
idx_gc_cnt
;
1374
int
gc_seq
;
1375
int
gced_lnum
;
1376
1377
struct
list_head
infos_list
;
1378
struct
mutex
umount_mutex
;
1379
unsigned
int
shrinker_run_no
;
1380
1381
int
space_bits
;
1382
int
lpt_lnum_bits
;
1383
int
lpt_offs_bits
;
1384
int
lpt_spc_bits
;
1385
int
pcnt_bits
;
1386
int
lnum_bits
;
1387
int
nnode_sz
;
1388
int
pnode_sz
;
1389
int
ltab_sz
;
1390
int
lsave_sz
;
1391
int
pnode_cnt
;
1392
int
nnode_cnt
;
1393
int
lpt_hght
;
1394
int
pnodes_have
;
1395
1396
struct
mutex
lp_mutex
;
1397
int
lpt_lnum
;
1398
int
lpt_offs
;
1399
int
nhead_lnum
;
1400
int
nhead_offs
;
1401
int
lpt_drty_flgs
;
1402
int
dirty_nn_cnt
;
1403
int
dirty_pn_cnt
;
1404
int
check_lpt_free
;
1405
long
long
lpt_sz
;
1406
void
*
lpt_nod_buf
;
1407
void
*
lpt_buf
;
1408
struct
ubifs_nnode
*
nroot
;
1409
struct
ubifs_cnode
*
lpt_cnext
;
1410
struct
ubifs_lpt_heap
lpt_heap
[
LPROPS_HEAP_CNT
];
1411
struct
ubifs_lpt_heap
dirty_idx
;
1412
struct
list_head
uncat_list
;
1413
struct
list_head
empty_list
;
1414
struct
list_head
freeable_list
;
1415
struct
list_head
frdi_idx_list
;
1416
int
freeable_cnt
;
1417
int
in_a_category_cnt
;
1418
1419
int
ltab_lnum
;
1420
int
ltab_offs
;
1421
struct
ubifs_lpt_lprops
*
ltab
;
1422
struct
ubifs_lpt_lprops
*
ltab_cmt
;
1423
int
lsave_cnt
;
1424
int
lsave_lnum
;
1425
int
lsave_offs
;
1426
int
*
lsave
;
1427
int
lscan_lnum
;
1428
1429
long
long
rp_size
;
1430
long
long
report_rp_size
;
1431
kuid_t
rp_uid
;
1432
kgid_t
rp_gid
;
1433
1434
/* The below fields are used only during mounting and re-mounting */
1435
unsigned
int
empty
:1;
1436
unsigned
int
need_recovery
:1;
1437
unsigned
int
replaying
:1;
1438
unsigned
int
mounting
:1;
1439
unsigned
int
remounting_rw
:1;
1440
struct
list_head
replay_list
;
1441
struct
list_head
replay_buds
;
1442
unsigned
long
long
cs_sqnum
;
1443
unsigned
long
long
replay_sqnum
;
1444
struct
list_head
unclean_leb_list
;
1445
struct
ubifs_mst_node
*
rcvrd_mst_node
;
1446
struct
rb_root
size_tree
;
1447
struct
ubifs_mount_opts
mount_opts
;
1448
1449
struct
ubifs_debug_info
*
dbg
;
1450
};
1451
1452
extern
struct
list_head
ubifs_infos
;
1453
extern
spinlock_t
ubifs_infos_lock
;
1454
extern
atomic_long_t
ubifs_clean_zn_cnt
;
1455
extern
struct
kmem_cache
*
ubifs_inode_slab
;
1456
extern
const
struct
super_operations
ubifs_super_operations
;
1457
extern
const
struct
address_space_operations
ubifs_file_address_operations
;
1458
extern
const
struct
file_operations
ubifs_file_operations
;
1459
extern
const
struct
inode_operations
ubifs_file_inode_operations
;
1460
extern
const
struct
file_operations
ubifs_dir_operations
;
1461
extern
const
struct
inode_operations
ubifs_dir_inode_operations
;
1462
extern
const
struct
inode_operations
ubifs_symlink_inode_operations
;
1463
extern
struct
backing_dev_info
ubifs_backing_dev_info
;
1464
extern
struct
ubifs_compressor
*
ubifs_compressors
[
UBIFS_COMPR_TYPES_CNT
];
1465
1466
/* io.c */
1467
void
ubifs_ro_mode
(
struct
ubifs_info
*c,
int
err
);
1468
int
ubifs_leb_read
(
const
struct
ubifs_info
*c,
int
lnum,
void
*
buf
,
int
offs
,
1469
int
len,
int
even_ebadmsg);
1470
int
ubifs_leb_write
(
struct
ubifs_info
*c,
int
lnum,
const
void
*
buf
,
int
offs
,
1471
int
len);
1472
int
ubifs_leb_change
(
struct
ubifs_info
*c,
int
lnum,
const
void
*
buf
,
int
len);
1473
int
ubifs_leb_unmap
(
struct
ubifs_info
*c,
int
lnum);
1474
int
ubifs_leb_map
(
struct
ubifs_info
*c,
int
lnum);
1475
int
ubifs_is_mapped
(
const
struct
ubifs_info
*c,
int
lnum);
1476
int
ubifs_wbuf_write_nolock
(
struct
ubifs_wbuf
*wbuf,
void
*
buf
,
int
len);
1477
int
ubifs_wbuf_seek_nolock
(
struct
ubifs_wbuf
*wbuf,
int
lnum,
int
offs
);
1478
int
ubifs_wbuf_init
(
struct
ubifs_info
*c,
struct
ubifs_wbuf
*wbuf);
1479
int
ubifs_read_node
(
const
struct
ubifs_info
*c,
void
*
buf
,
int
type
,
int
len,
1480
int
lnum,
int
offs
);
1481
int
ubifs_read_node_wbuf
(
struct
ubifs_wbuf
*wbuf,
void
*
buf
,
int
type
,
int
len,
1482
int
lnum,
int
offs
);
1483
int
ubifs_write_node
(
struct
ubifs_info
*c,
void
*
node
,
int
len,
int
lnum,
1484
int
offs
);
1485
int
ubifs_check_node
(
const
struct
ubifs_info
*c,
const
void
*
buf
,
int
lnum,
1486
int
offs
,
int
quiet
,
int
must_chk_crc);
1487
void
ubifs_prepare_node
(
struct
ubifs_info
*c,
void
*
buf
,
int
len,
int
pad
);
1488
void
ubifs_prep_grp_node
(
struct
ubifs_info
*c,
void
*
node
,
int
len,
int
last);
1489
int
ubifs_io_init
(
struct
ubifs_info
*c);
1490
void
ubifs_pad
(
const
struct
ubifs_info
*c,
void
*
buf
,
int
pad
);
1491
int
ubifs_wbuf_sync_nolock
(
struct
ubifs_wbuf
*wbuf);
1492
int
ubifs_bg_wbufs_sync
(
struct
ubifs_info
*c);
1493
void
ubifs_wbuf_add_ino_nolock
(
struct
ubifs_wbuf
*wbuf,
ino_t
inum
);
1494
int
ubifs_sync_wbufs_by_inode
(
struct
ubifs_info
*c,
struct
inode
*
inode
);
1495
1496
/* scan.c */
1497
struct
ubifs_scan_leb
*
ubifs_scan
(
const
struct
ubifs_info
*c,
int
lnum
,
1498
int
offs
,
void
*sbuf,
int
quiet
);
1499
void
ubifs_scan_destroy
(
struct
ubifs_scan_leb
*sleb);
1500
int
ubifs_scan_a_node
(
const
struct
ubifs_info
*c,
void
*
buf
,
int
len,
int
lnum
,
1501
int
offs
,
int
quiet
);
1502
struct
ubifs_scan_leb
*
ubifs_start_scan
(
const
struct
ubifs_info
*c,
int
lnum
,
1503
int
offs
,
void
*sbuf);
1504
void
ubifs_end_scan
(
const
struct
ubifs_info
*c,
struct
ubifs_scan_leb
*sleb,
1505
int
lnum
,
int
offs
);
1506
int
ubifs_add_snod
(
const
struct
ubifs_info
*c,
struct
ubifs_scan_leb
*sleb,
1507
void
*
buf
,
int
offs
);
1508
void
ubifs_scanned_corruption
(
const
struct
ubifs_info
*c,
int
lnum
,
int
offs
,
1509
void
*
buf
);
1510
1511
/* log.c */
1512
void
ubifs_add_bud
(
struct
ubifs_info
*c,
struct
ubifs_bud
*bud);
1513
void
ubifs_create_buds_lists
(
struct
ubifs_info
*c);
1514
int
ubifs_add_bud_to_log
(
struct
ubifs_info
*c,
int
jhead,
int
lnum
,
int
offs
);
1515
struct
ubifs_bud
*
ubifs_search_bud
(
struct
ubifs_info
*c,
int
lnum
);
1516
struct
ubifs_wbuf
*
ubifs_get_wbuf
(
struct
ubifs_info
*c,
int
lnum
);
1517
int
ubifs_log_start_commit
(
struct
ubifs_info
*c,
int
*ltail_lnum);
1518
int
ubifs_log_end_commit
(
struct
ubifs_info
*c,
int
new_ltail_lnum);
1519
int
ubifs_log_post_commit
(
struct
ubifs_info
*c,
int
old_ltail_lnum);
1520
int
ubifs_consolidate_log
(
struct
ubifs_info
*c);
1521
1522
/* journal.c */
1523
int
ubifs_jnl_update
(
struct
ubifs_info
*c,
const
struct
inode
*dir,
1524
const
struct
qstr
*nm,
const
struct
inode
*
inode
,
1525
int
deletion,
int
xent);
1526
int
ubifs_jnl_write_data
(
struct
ubifs_info
*c,
const
struct
inode
*
inode
,
1527
const
union
ubifs_key
*
key
,
const
void
*
buf
,
int
len);
1528
int
ubifs_jnl_write_inode
(
struct
ubifs_info
*c,
const
struct
inode
*
inode
);
1529
int
ubifs_jnl_delete_inode
(
struct
ubifs_info
*c,
const
struct
inode
*
inode
);
1530
int
ubifs_jnl_rename
(
struct
ubifs_info
*c,
const
struct
inode
*old_dir,
1531
const
struct
dentry
*old_dentry,
1532
const
struct
inode
*new_dir,
1533
const
struct
dentry
*new_dentry,
int
sync
);
1534
int
ubifs_jnl_truncate
(
struct
ubifs_info
*c,
const
struct
inode
*
inode
,
1535
loff_t
old_size
, loff_t new_size);
1536
int
ubifs_jnl_delete_xattr
(
struct
ubifs_info
*c,
const
struct
inode
*
host
,
1537
const
struct
inode
*
inode
,
const
struct
qstr
*nm);
1538
int
ubifs_jnl_change_xattr
(
struct
ubifs_info
*c,
const
struct
inode
*inode1,
1539
const
struct
inode
*inode2);
1540
1541
/* budget.c */
1542
int
ubifs_budget_space
(
struct
ubifs_info
*c,
struct
ubifs_budget_req
*
req
);
1543
void
ubifs_release_budget
(
struct
ubifs_info
*c,
struct
ubifs_budget_req
*
req
);
1544
void
ubifs_release_dirty_inode_budget
(
struct
ubifs_info
*c,
1545
struct
ubifs_inode
*ui);
1546
int
ubifs_budget_inode_op
(
struct
ubifs_info
*c,
struct
inode
*
inode
,
1547
struct
ubifs_budget_req
*
req
);
1548
void
ubifs_release_ino_dirty
(
struct
ubifs_info
*c,
struct
inode
*
inode
,
1549
struct
ubifs_budget_req
*
req
);
1550
void
ubifs_cancel_ino_op
(
struct
ubifs_info
*c,
struct
inode
*
inode
,
1551
struct
ubifs_budget_req
*
req
);
1552
long
long
ubifs_get_free_space
(
struct
ubifs_info
*c);
1553
long
long
ubifs_get_free_space_nolock
(
struct
ubifs_info
*c);
1554
int
ubifs_calc_min_idx_lebs
(
struct
ubifs_info
*c);
1555
void
ubifs_convert_page_budget
(
struct
ubifs_info
*c);
1556
long
long
ubifs_reported_space
(
const
struct
ubifs_info
*c,
long
long
free
);
1557
long
long
ubifs_calc_available
(
const
struct
ubifs_info
*c,
int
min_idx_lebs);
1558
1559
/* find.c */
1560
int
ubifs_find_free_space
(
struct
ubifs_info
*c,
int
min_space,
int
*
offs
,
1561
int
squeeze);
1562
int
ubifs_find_free_leb_for_idx
(
struct
ubifs_info
*c);
1563
int
ubifs_find_dirty_leb
(
struct
ubifs_info
*c,
struct
ubifs_lprops
*ret_lp,
1564
int
min_space,
int
pick_free);
1565
int
ubifs_find_dirty_idx_leb
(
struct
ubifs_info
*c);
1566
int
ubifs_save_dirty_idx_lnums
(
struct
ubifs_info
*c);
1567
1568
/* tnc.c */
1569
int
ubifs_lookup_level0
(
struct
ubifs_info
*c,
const
union
ubifs_key
*
key
,
1570
struct
ubifs_znode
**zn,
int
*
n
);
1571
int
ubifs_tnc_lookup_nm
(
struct
ubifs_info
*c,
const
union
ubifs_key
*
key
,
1572
void
*
node
,
const
struct
qstr
*nm);
1573
int
ubifs_tnc_locate
(
struct
ubifs_info
*c,
const
union
ubifs_key
*
key
,
1574
void
*
node
,
int
*
lnum
,
int
*
offs
);
1575
int
ubifs_tnc_add
(
struct
ubifs_info
*c,
const
union
ubifs_key
*
key
,
int
lnum
,
1576
int
offs
,
int
len);
1577
int
ubifs_tnc_replace
(
struct
ubifs_info
*c,
const
union
ubifs_key
*
key
,
1578
int
old_lnum,
int
old_offs,
int
lnum
,
int
offs
,
int
len);
1579
int
ubifs_tnc_add_nm
(
struct
ubifs_info
*c,
const
union
ubifs_key
*
key
,
1580
int
lnum
,
int
offs
,
int
len,
const
struct
qstr
*nm);
1581
int
ubifs_tnc_remove
(
struct
ubifs_info
*c,
const
union
ubifs_key
*
key
);
1582
int
ubifs_tnc_remove_nm
(
struct
ubifs_info
*c,
const
union
ubifs_key
*
key
,
1583
const
struct
qstr
*nm);
1584
int
ubifs_tnc_remove_range
(
struct
ubifs_info
*c,
union
ubifs_key
*from_key,
1585
union
ubifs_key
*to_key);
1586
int
ubifs_tnc_remove_ino
(
struct
ubifs_info
*c,
ino_t
inum
);
1587
struct
ubifs_dent_node
*
ubifs_tnc_next_ent
(
struct
ubifs_info
*c,
1588
union
ubifs_key
*
key
,
1589
const
struct
qstr
*nm);
1590
void
ubifs_tnc_close
(
struct
ubifs_info
*c);
1591
int
ubifs_tnc_has_node
(
struct
ubifs_info
*c,
union
ubifs_key
*
key
,
int
level
,
1592
int
lnum,
int
offs
,
int
is_idx);
1593
int
ubifs_dirty_idx_node
(
struct
ubifs_info
*c,
union
ubifs_key
*
key
,
int
level
,
1594
int
lnum,
int
offs
);
1595
/* Shared by tnc.c for tnc_commit.c */
1596
void
destroy_old_idx
(
struct
ubifs_info
*c);
1597
int
is_idx_node_in_tnc
(
struct
ubifs_info
*c,
union
ubifs_key
*
key
,
int
level
,
1598
int
lnum,
int
offs
);
1599
int
insert_old_idx_znode
(
struct
ubifs_info
*c,
struct
ubifs_znode
*znode);
1600
int
ubifs_tnc_get_bu_keys
(
struct
ubifs_info
*c,
struct
bu_info
*bu);
1601
int
ubifs_tnc_bulk_read
(
struct
ubifs_info
*c,
struct
bu_info
*bu);
1602
1603
/* tnc_misc.c */
1604
struct
ubifs_znode
*
ubifs_tnc_levelorder_next
(
struct
ubifs_znode
*zr,
1605
struct
ubifs_znode
*znode);
1606
int
ubifs_search_zbranch
(
const
struct
ubifs_info
*c,
1607
const
struct
ubifs_znode
*znode,
1608
const
union
ubifs_key
*
key
,
int
*
n
);
1609
struct
ubifs_znode
*
ubifs_tnc_postorder_first
(
struct
ubifs_znode
*znode);
1610
struct
ubifs_znode
*
ubifs_tnc_postorder_next
(
struct
ubifs_znode
*znode);
1611
long
ubifs_destroy_tnc_subtree
(
struct
ubifs_znode
*zr);
1612
struct
ubifs_znode
*
ubifs_load_znode
(
struct
ubifs_info
*c,
1613
struct
ubifs_zbranch
*zbr,
1614
struct
ubifs_znode
*
parent
,
int
iip
);
1615
int
ubifs_tnc_read_node
(
struct
ubifs_info
*c,
struct
ubifs_zbranch
*zbr,
1616
void
*
node
);
1617
1618
/* tnc_commit.c */
1619
int
ubifs_tnc_start_commit
(
struct
ubifs_info
*c,
struct
ubifs_zbranch
*zroot);
1620
int
ubifs_tnc_end_commit
(
struct
ubifs_info
*c);
1621
1622
/* shrinker.c */
1623
int
ubifs_shrinker
(
struct
shrinker
*
shrink
,
struct
shrink_control
*
sc
);
1624
1625
/* commit.c */
1626
int
ubifs_bg_thread
(
void
*
info
);
1627
void
ubifs_commit_required
(
struct
ubifs_info
*c);
1628
void
ubifs_request_bg_commit
(
struct
ubifs_info
*c);
1629
int
ubifs_run_commit
(
struct
ubifs_info
*c);
1630
void
ubifs_recovery_commit
(
struct
ubifs_info
*c);
1631
int
ubifs_gc_should_commit
(
struct
ubifs_info
*c);
1632
void
ubifs_wait_for_commit
(
struct
ubifs_info
*c);
1633
1634
/* master.c */
1635
int
ubifs_read_master
(
struct
ubifs_info
*c);
1636
int
ubifs_write_master
(
struct
ubifs_info
*c);
1637
1638
/* sb.c */
1639
int
ubifs_read_superblock
(
struct
ubifs_info
*c);
1640
struct
ubifs_sb_node
*
ubifs_read_sb_node
(
struct
ubifs_info
*c);
1641
int
ubifs_write_sb_node
(
struct
ubifs_info
*c,
struct
ubifs_sb_node
*sup);
1642
int
ubifs_fixup_free_space
(
struct
ubifs_info
*c);
1643
1644
/* replay.c */
1645
int
ubifs_validate_entry
(
struct
ubifs_info
*c,
1646
const
struct
ubifs_dent_node
*dent);
1647
int
ubifs_replay_journal
(
struct
ubifs_info
*c);
1648
1649
/* gc.c */
1650
int
ubifs_garbage_collect
(
struct
ubifs_info
*c,
int
anyway);
1651
int
ubifs_gc_start_commit
(
struct
ubifs_info
*c);
1652
int
ubifs_gc_end_commit
(
struct
ubifs_info
*c);
1653
void
ubifs_destroy_idx_gc
(
struct
ubifs_info
*c);
1654
int
ubifs_get_idx_gc_leb
(
struct
ubifs_info
*c);
1655
int
ubifs_garbage_collect_leb
(
struct
ubifs_info
*c,
struct
ubifs_lprops
*
lp
);
1656
1657
/* orphan.c */
1658
int
ubifs_add_orphan
(
struct
ubifs_info
*c,
ino_t
inum
);
1659
void
ubifs_delete_orphan
(
struct
ubifs_info
*c,
ino_t
inum
);
1660
int
ubifs_orphan_start_commit
(
struct
ubifs_info
*c);
1661
int
ubifs_orphan_end_commit
(
struct
ubifs_info
*c);
1662
int
ubifs_mount_orphans
(
struct
ubifs_info
*c,
int
unclean,
int
read_only
);
1663
int
ubifs_clear_orphans
(
struct
ubifs_info
*c);
1664
1665
/* lpt.c */
1666
int
ubifs_calc_lpt_geom
(
struct
ubifs_info
*c);
1667
int
ubifs_create_dflt_lpt
(
struct
ubifs_info
*c,
int
*main_lebs,
int
lpt_first,
1668
int
*
lpt_lebs
,
int
*big_lpt);
1669
int
ubifs_lpt_init
(
struct
ubifs_info
*c,
int
rd
,
int
wr
);
1670
struct
ubifs_lprops
*
ubifs_lpt_lookup
(
struct
ubifs_info
*c,
int
lnum
);
1671
struct
ubifs_lprops
*
ubifs_lpt_lookup_dirty
(
struct
ubifs_info
*c,
int
lnum
);
1672
int
ubifs_lpt_scan_nolock
(
struct
ubifs_info
*c,
int
start_lnum,
int
end_lnum,
1673
ubifs_lpt_scan_callback
scan_cb,
void
*
data
);
1674
1675
/* Shared by lpt.c for lpt_commit.c */
1676
void
ubifs_pack_lsave
(
struct
ubifs_info
*c,
void
*
buf
,
int
*lsave);
1677
void
ubifs_pack_ltab
(
struct
ubifs_info
*c,
void
*
buf
,
1678
struct
ubifs_lpt_lprops
*ltab);
1679
void
ubifs_pack_pnode
(
struct
ubifs_info
*c,
void
*
buf
,
1680
struct
ubifs_pnode
*pnode);
1681
void
ubifs_pack_nnode
(
struct
ubifs_info
*c,
void
*
buf
,
1682
struct
ubifs_nnode
*nnode);
1683
struct
ubifs_pnode
*
ubifs_get_pnode
(
struct
ubifs_info
*c,
1684
struct
ubifs_nnode
*
parent
,
int
iip
);
1685
struct
ubifs_nnode
*
ubifs_get_nnode
(
struct
ubifs_info
*c,
1686
struct
ubifs_nnode
*
parent
,
int
iip
);
1687
int
ubifs_read_nnode
(
struct
ubifs_info
*c,
struct
ubifs_nnode
*
parent
,
int
iip
);
1688
void
ubifs_add_lpt_dirt
(
struct
ubifs_info
*c,
int
lnum,
int
dirty
);
1689
void
ubifs_add_nnode_dirt
(
struct
ubifs_info
*c,
struct
ubifs_nnode
*nnode);
1690
uint32_t
ubifs_unpack_bits
(
uint8_t
**
addr
,
int
*
pos
,
int
nrbits);
1691
struct
ubifs_nnode
*
ubifs_first_nnode
(
struct
ubifs_info
*c,
int
*hght);
1692
/* Needed only in debugging code in lpt_commit.c */
1693
int
ubifs_unpack_nnode
(
const
struct
ubifs_info
*c,
void
*
buf
,
1694
struct
ubifs_nnode
*nnode);
1695
1696
/* lpt_commit.c */
1697
int
ubifs_lpt_start_commit
(
struct
ubifs_info
*c);
1698
int
ubifs_lpt_end_commit
(
struct
ubifs_info
*c);
1699
int
ubifs_lpt_post_commit
(
struct
ubifs_info
*c);
1700
void
ubifs_lpt_free
(
struct
ubifs_info
*c,
int
wr_only);
1701
1702
/* lprops.c */
1703
const
struct
ubifs_lprops
*
ubifs_change_lp
(
struct
ubifs_info
*c,
1704
const
struct
ubifs_lprops
*
lp
,
1705
int
free
,
int
dirty
,
int
flags
,
1706
int
idx_gc_cnt);
1707
void
ubifs_get_lp_stats
(
struct
ubifs_info
*c,
struct
ubifs_lp_stats
*lst);
1708
void
ubifs_add_to_cat
(
struct
ubifs_info
*c,
struct
ubifs_lprops
*lprops,
1709
int
cat);
1710
void
ubifs_replace_cat
(
struct
ubifs_info
*c,
struct
ubifs_lprops
*old_lprops,
1711
struct
ubifs_lprops
*new_lprops);
1712
void
ubifs_ensure_cat
(
struct
ubifs_info
*c,
struct
ubifs_lprops
*lprops);
1713
int
ubifs_categorize_lprops
(
const
struct
ubifs_info
*c,
1714
const
struct
ubifs_lprops
*lprops);
1715
int
ubifs_change_one_lp
(
struct
ubifs_info
*c,
int
lnum
,
int
free
,
int
dirty
,
1716
int
flags_set,
int
flags_clean,
int
idx_gc_cnt);
1717
int
ubifs_update_one_lp
(
struct
ubifs_info
*c,
int
lnum
,
int
free
,
int
dirty
,
1718
int
flags_set,
int
flags_clean);
1719
int
ubifs_read_one_lp
(
struct
ubifs_info
*c,
int
lnum
,
struct
ubifs_lprops
*
lp
);
1720
const
struct
ubifs_lprops
*
ubifs_fast_find_free
(
struct
ubifs_info
*c);
1721
const
struct
ubifs_lprops
*
ubifs_fast_find_empty
(
struct
ubifs_info
*c);
1722
const
struct
ubifs_lprops
*
ubifs_fast_find_freeable
(
struct
ubifs_info
*c);
1723
const
struct
ubifs_lprops
*
ubifs_fast_find_frdi_idx
(
struct
ubifs_info
*c);
1724
int
ubifs_calc_dark
(
const
struct
ubifs_info
*c,
int
spc
);
1725
1726
/* file.c */
1727
int
ubifs_fsync
(
struct
file
*
file
, loff_t
start
, loff_t
end
,
int
datasync);
1728
int
ubifs_setattr
(
struct
dentry
*
dentry
,
struct
iattr
*
attr
);
1729
1730
/* dir.c */
1731
struct
inode
*
ubifs_new_inode
(
struct
ubifs_info
*c,
const
struct
inode
*dir,
1732
umode_t
mode
);
1733
int
ubifs_getattr
(
struct
vfsmount
*mnt,
struct
dentry
*
dentry
,
1734
struct
kstat
*
stat
);
1735
1736
/* xattr.c */
1737
int
ubifs_setxattr
(
struct
dentry
*
dentry
,
const
char
*
name
,
1738
const
void
*
value
,
size_t
size
,
int
flags
);
1739
ssize_t
ubifs_getxattr
(
struct
dentry
*
dentry
,
const
char
*
name
,
void
*
buf
,
1740
size_t
size
);
1741
ssize_t
ubifs_listxattr
(
struct
dentry
*
dentry
,
char
*
buffer
,
size_t
size
);
1742
int
ubifs_removexattr
(
struct
dentry
*
dentry
,
const
char
*
name
);
1743
1744
/* super.c */
1745
struct
inode
*
ubifs_iget
(
struct
super_block
*
sb
,
unsigned
long
inum
);
1746
1747
/* recovery.c */
1748
int
ubifs_recover_master_node
(
struct
ubifs_info
*c);
1749
int
ubifs_write_rcvrd_mst_node
(
struct
ubifs_info
*c);
1750
struct
ubifs_scan_leb
*
ubifs_recover_leb
(
struct
ubifs_info
*c,
int
lnum
,
1751
int
offs
,
void
*sbuf,
int
jhead);
1752
struct
ubifs_scan_leb
*
ubifs_recover_log_leb
(
struct
ubifs_info
*c,
int
lnum
,
1753
int
offs
,
void
*sbuf);
1754
int
ubifs_recover_inl_heads
(
struct
ubifs_info
*c,
void
*sbuf);
1755
int
ubifs_clean_lebs
(
struct
ubifs_info
*c,
void
*sbuf);
1756
int
ubifs_rcvry_gc_commit
(
struct
ubifs_info
*c);
1757
int
ubifs_recover_size_accum
(
struct
ubifs_info
*c,
union
ubifs_key
*
key
,
1758
int
deletion, loff_t new_size);
1759
int
ubifs_recover_size
(
struct
ubifs_info
*c);
1760
void
ubifs_destroy_size_tree
(
struct
ubifs_info
*c);
1761
1762
/* ioctl.c */
1763
long
ubifs_ioctl
(
struct
file
*
file
,
unsigned
int
cmd
,
unsigned
long
arg
);
1764
void
ubifs_set_inode_flags
(
struct
inode
*
inode
);
1765
#ifdef CONFIG_COMPAT
1766
long
ubifs_compat_ioctl(
struct
file
*
file
,
unsigned
int
cmd
,
unsigned
long
arg
);
1767
#endif
1768
1769
/* compressor.c */
1770
int
__init
ubifs_compressors_init
(
void
);
1771
void
ubifs_compressors_exit
(
void
);
1772
void
ubifs_compress
(
const
void
*in_buf,
int
in_len
,
void
*out_buf,
int
*
out_len
,
1773
int
*compr_type);
1774
int
ubifs_decompress
(
const
void
*
buf
,
int
len,
void
*
out
,
int
*
out_len
,
1775
int
compr_type);
1776
1777
#include "
debug.h
"
1778
#include "
misc.h
"
1779
#include "
key.h
"
1780
1781
#endif
/* !__UBIFS_H__ */
Generated on Thu Jan 10 2013 14:50:10 for Linux Kernel by
1.8.2