1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26#ifndef __UBIFS_H__
27#define __UBIFS_H__
28
29#if 0
30#define CONFIG_UBIFS_FS_DEBUG
31#define CONFIG_UBIFS_FS_DEBUG_MSG_LVL 3
32#endif
33
34#include <ubi_uboot.h>
35#include <linux/ctype.h>
36#include <linux/time.h>
37#include <linux/math64.h>
38#include "ubifs-media.h"
39
40struct dentry;
41struct file;
42struct iattr;
43struct kstat;
44struct vfsmount;
45
46extern struct super_block *ubifs_sb;
47
48extern unsigned int ubifs_msg_flags;
49extern unsigned int ubifs_chk_flags;
50extern unsigned int ubifs_tst_flags;
51
52#define pgoff_t unsigned long
53
54
55
56
57struct page {
58 pgoff_t index;
59 void *addr;
60 struct inode *inode;
61};
62
63void iput(struct inode *inode);
64
65
66
67
68
69#define atomic_long_inc(a)
70#define atomic_long_dec(a)
71#define atomic_long_sub(a, b)
72
73
74
75struct timespec {
76 time_t tv_sec;
77 long tv_nsec;
78};
79
80
81
82
83
84
85
86
87
88
89struct qstr {
90 unsigned int hash;
91 unsigned int len;
92 const char *name;
93};
94
95struct inode {
96 struct hlist_node i_hash;
97 struct list_head i_list;
98 struct list_head i_sb_list;
99 struct list_head i_dentry;
100 unsigned long i_ino;
101 unsigned int i_nlink;
102 uid_t i_uid;
103 gid_t i_gid;
104 dev_t i_rdev;
105 u64 i_version;
106 loff_t i_size;
107#ifdef __NEED_I_SIZE_ORDERED
108 seqcount_t i_size_seqcount;
109#endif
110 struct timespec i_atime;
111 struct timespec i_mtime;
112 struct timespec i_ctime;
113 unsigned int i_blkbits;
114 unsigned short i_bytes;
115 umode_t i_mode;
116 spinlock_t i_lock;
117 struct mutex i_mutex;
118 struct rw_semaphore i_alloc_sem;
119 const struct inode_operations *i_op;
120 const struct file_operations *i_fop;
121 struct super_block *i_sb;
122 struct file_lock *i_flock;
123#ifdef CONFIG_QUOTA
124 struct dquot *i_dquot[MAXQUOTAS];
125#endif
126 struct list_head i_devices;
127 int i_cindex;
128
129 __u32 i_generation;
130
131#ifdef CONFIG_DNOTIFY
132 unsigned long i_dnotify_mask;
133 struct dnotify_struct *i_dnotify;
134#endif
135
136#ifdef CONFIG_INOTIFY
137 struct list_head inotify_watches;
138 struct mutex inotify_mutex;
139#endif
140
141 unsigned long i_state;
142 unsigned long dirtied_when;
143
144 unsigned int i_flags;
145
146#ifdef CONFIG_SECURITY
147 void *i_security;
148#endif
149 void *i_private;
150};
151
152struct super_block {
153 struct list_head s_list;
154 dev_t s_dev;
155 unsigned long s_blocksize;
156 unsigned char s_blocksize_bits;
157 unsigned char s_dirt;
158 unsigned long long s_maxbytes;
159 struct file_system_type *s_type;
160 const struct super_operations *s_op;
161 struct dquot_operations *dq_op;
162 struct quotactl_ops *s_qcop;
163 const struct export_operations *s_export_op;
164 unsigned long s_flags;
165 unsigned long s_magic;
166 struct dentry *s_root;
167 struct rw_semaphore s_umount;
168 struct mutex s_lock;
169 int s_count;
170 int s_syncing;
171 int s_need_sync_fs;
172#ifdef CONFIG_SECURITY
173 void *s_security;
174#endif
175 struct xattr_handler **s_xattr;
176
177 struct list_head s_inodes;
178 struct list_head s_dirty;
179 struct list_head s_io;
180 struct list_head s_more_io;
181 struct hlist_head s_anon;
182 struct list_head s_files;
183
184 struct list_head s_dentry_lru;
185 int s_nr_dentry_unused;
186
187 struct block_device *s_bdev;
188 struct mtd_info *s_mtd;
189 struct list_head s_instances;
190
191 int s_frozen;
192 wait_queue_head_t s_wait_unfrozen;
193
194 char s_id[32];
195
196 void *s_fs_info;
197
198
199
200
201
202 struct mutex s_vfs_rename_mutex;
203
204
205
206 u32 s_time_gran;
207
208
209
210
211
212 char *s_subtype;
213
214
215
216
217
218 char *s_options;
219};
220
221struct file_system_type {
222 const char *name;
223 int fs_flags;
224 int (*get_sb) (struct file_system_type *, int,
225 const char *, void *, struct vfsmount *);
226 void (*kill_sb) (struct super_block *);
227 struct module *owner;
228 struct file_system_type * next;
229 struct list_head fs_supers;
230};
231
232struct vfsmount {
233 struct list_head mnt_hash;
234 struct vfsmount *mnt_parent;
235 struct dentry *mnt_mountpoint;
236 struct dentry *mnt_root;
237 struct super_block *mnt_sb;
238 struct list_head mnt_mounts;
239 struct list_head mnt_child;
240 int mnt_flags;
241
242 const char *mnt_devname;
243 struct list_head mnt_list;
244 struct list_head mnt_expire;
245 struct list_head mnt_share;
246 struct list_head mnt_slave_list;
247 struct list_head mnt_slave;
248 struct vfsmount *mnt_master;
249 struct mnt_namespace *mnt_ns;
250 int mnt_id;
251 int mnt_group_id;
252
253
254
255
256
257 int mnt_expiry_mark;
258 int mnt_pinned;
259 int mnt_ghosts;
260
261
262
263
264};
265
266struct path {
267 struct vfsmount *mnt;
268 struct dentry *dentry;
269};
270
271struct file {
272 struct path f_path;
273#define f_dentry f_path.dentry
274#define f_vfsmnt f_path.mnt
275 const struct file_operations *f_op;
276 unsigned int f_flags;
277 loff_t f_pos;
278 unsigned int f_uid, f_gid;
279
280 u64 f_version;
281#ifdef CONFIG_SECURITY
282 void *f_security;
283#endif
284
285 void *private_data;
286
287#ifdef CONFIG_EPOLL
288
289 struct list_head f_ep_links;
290 spinlock_t f_ep_lock;
291#endif
292#ifdef CONFIG_DEBUG_WRITECOUNT
293 unsigned long f_mnt_write_state;
294#endif
295};
296
297
298
299
300#define get_seconds() 0
301
302
303#define PAGE_CACHE_SHIFT 12
304#define PAGE_CACHE_SIZE (1 << PAGE_CACHE_SHIFT)
305
306
307
308#if BITS_PER_LONG==32
309#define MAX_LFS_FILESIZE (((u64)PAGE_CACHE_SIZE << (BITS_PER_LONG-1))-1)
310#elif BITS_PER_LONG==64
311#define MAX_LFS_FILESIZE 0x7fffffffffffffffUL
312#endif
313
314#define INT_MAX ((int)(~0U>>1))
315#define INT_MIN (-INT_MAX - 1)
316#define LLONG_MAX ((long long)(~0ULL>>1))
317
318
319
320
321#define MS_RDONLY 1
322#define MS_NOSUID 2
323#define MS_NODEV 4
324#define MS_NOEXEC 8
325#define MS_SYNCHRONOUS 16
326#define MS_REMOUNT 32
327#define MS_MANDLOCK 64
328#define MS_DIRSYNC 128
329#define MS_NOATIME 1024
330#define MS_NODIRATIME 2048
331#define MS_BIND 4096
332#define MS_MOVE 8192
333#define MS_REC 16384
334#define MS_VERBOSE 32768
335
336#define MS_SILENT 32768
337#define MS_POSIXACL (1<<16)
338#define MS_UNBINDABLE (1<<17)
339#define MS_PRIVATE (1<<18)
340#define MS_SLAVE (1<<19)
341#define MS_SHARED (1<<20)
342#define MS_RELATIME (1<<21)
343#define MS_KERNMOUNT (1<<22)
344#define MS_I_VERSION (1<<23)
345#define MS_ACTIVE (1<<30)
346#define MS_NOUSER (1<<31)
347
348#define I_NEW 8
349
350
351
352#define S_SYNC 1
353#define S_NOATIME 2
354#define S_APPEND 4
355#define S_IMMUTABLE 8
356#define S_DEAD 16
357#define S_NOQUOTA 32
358#define S_DIRSYNC 64
359#define S_NOCMTIME 128
360#define S_SWAPFILE 256
361#define S_PRIVATE 512
362
363
364
365#define S_IFMT 00170000
366#define S_IFSOCK 0140000
367#define S_IFLNK 0120000
368#define S_IFREG 0100000
369#define S_IFBLK 0060000
370#define S_IFDIR 0040000
371#define S_IFCHR 0020000
372#define S_IFIFO 0010000
373#define S_ISUID 0004000
374#define S_ISGID 0002000
375#define S_ISVTX 0001000
376
377
378
379
380
381
382
383
384
385#define DT_UNKNOWN 0
386#define DT_FIFO 1
387#define DT_CHR 2
388#define DT_DIR 4
389#define DT_BLK 6
390#define DT_REG 8
391#define DT_LNK 10
392#define DT_SOCK 12
393#define DT_WHT 14
394
395#define I_DIRTY_SYNC 1
396#define I_DIRTY_DATASYNC 2
397#define I_DIRTY_PAGES 4
398#define I_NEW 8
399#define I_WILL_FREE 16
400#define I_FREEING 32
401#define I_CLEAR 64
402#define __I_LOCK 7
403#define I_LOCK (1 << __I_LOCK)
404#define __I_SYNC 8
405#define I_SYNC (1 << __I_SYNC)
406
407#define I_DIRTY (I_DIRTY_SYNC | I_DIRTY_DATASYNC | I_DIRTY_PAGES)
408
409
410
411#define DNAME_INLINE_LEN_MIN 36
412
413struct dentry {
414 unsigned int d_flags;
415 spinlock_t d_lock;
416 struct inode *d_inode;
417
418
419
420
421
422 struct hlist_node d_hash;
423 struct dentry *d_parent;
424 struct qstr d_name;
425
426 struct list_head d_lru;
427
428
429
430 struct list_head d_subdirs;
431 struct list_head d_alias;
432 unsigned long d_time;
433 struct super_block *d_sb;
434 void *d_fsdata;
435#ifdef CONFIG_PROFILING
436 struct dcookie_struct *d_cookie;
437#endif
438 int d_mounted;
439 unsigned char d_iname[DNAME_INLINE_LEN_MIN];
440};
441
442static inline ino_t parent_ino(struct dentry *dentry)
443{
444 ino_t res;
445
446 spin_lock(&dentry->d_lock);
447 res = dentry->d_parent->d_inode->i_ino;
448 spin_unlock(&dentry->d_lock);
449 return res;
450}
451
452
453
454#define DEFINE_SPINLOCK(...)
455#define module_param_named(...)
456
457
458#define mutex_lock_nested(...)
459#define mutex_unlock_nested(...)
460#define mutex_is_locked(...) 0
461
462
463#define UBIFS_VERSION 1
464
465
466#define ubifs_msg(fmt, ...) \
467 printk(KERN_NOTICE "UBIFS: " fmt "\n", ##__VA_ARGS__)
468
469#define ubifs_err(fmt, ...) \
470 printk(KERN_ERR "UBIFS error (pid %d): %s: " fmt "\n", 0, \
471 __func__, ##__VA_ARGS__)
472
473#define ubifs_warn(fmt, ...) \
474 printk(KERN_WARNING "UBIFS warning (pid %d): %s: " fmt "\n", \
475 0, __func__, ##__VA_ARGS__)
476
477
478#define UBIFS_SUPER_MAGIC 0x24051905
479
480
481#define UBIFS_BLOCKS_PER_PAGE (PAGE_CACHE_SIZE / UBIFS_BLOCK_SIZE)
482#define UBIFS_BLOCKS_PER_PAGE_SHIFT (PAGE_CACHE_SHIFT - UBIFS_BLOCK_SHIFT)
483
484
485#define SQNUM_WARN_WATERMARK 0xFFFFFFFF00000000ULL
486#define SQNUM_WATERMARK 0xFFFFFFFFFF000000ULL
487
488
489
490
491
492
493
494#define MIN_INDEX_LEBS 2
495
496
497#define MIN_WRITE_SZ (UBIFS_DATA_NODE_SZ + 8)
498
499
500
501
502
503
504
505#define INUM_WARN_WATERMARK 0xFFF00000
506#define INUM_WATERMARK 0xFFFFFF00
507
508
509#define CUR_MAX_KEY_LEN UBIFS_SK_LEN
510
511
512#define LPT_HEAP_SZ 256
513
514
515
516
517
518#define BGT_NAME_PATTERN "ubifs_bgt%d_%d"
519
520
521#define DEFAULT_WBUF_TIMEOUT (5 * HZ)
522
523
524#define MAX_INUM 0xFFFFFFFF
525
526
527#define NONDATA_JHEADS_CNT 2
528
529
530#define GCHD 0
531
532#define BASEHD 1
533
534#define DATAHD 2
535
536
537#define LPROPS_NC 0x80000001
538
539
540
541
542
543
544
545#define UBIFS_TRUN_KEY UBIFS_KEY_TYPES_CNT
546
547
548
549
550
551#define CALC_DENT_SIZE(name_len) ALIGN(UBIFS_DENT_NODE_SZ + (name_len) + 1, 8)
552
553
554#define CALC_XATTR_BYTES(data_len) ALIGN(UBIFS_INO_NODE_SZ + (data_len) + 1, 8)
555
556
557
558
559
560
561
562#define OLD_ZNODE_AGE 20
563#define YOUNG_ZNODE_AGE 5
564
565
566
567
568
569
570#define WORST_COMPR_FACTOR 2
571
572
573#define BOTTOM_UP_HEIGHT 64
574
575
576#define UBIFS_MAX_BULK_READ 32
577
578
579
580
581enum {
582 WB_MUTEX_1 = 0,
583 WB_MUTEX_2 = 1,
584 WB_MUTEX_3 = 2,
585};
586
587
588
589
590
591
592
593
594
595
596
597enum {
598 DIRTY_ZNODE = 0,
599 COW_ZNODE = 1,
600 OBSOLETE_ZNODE = 2,
601};
602
603
604
605
606
607
608
609
610
611
612
613enum {
614 COMMIT_RESTING = 0,
615 COMMIT_BACKGROUND,
616 COMMIT_REQUIRED,
617 COMMIT_RUNNING_BACKGROUND,
618 COMMIT_RUNNING_REQUIRED,
619 COMMIT_BROKEN,
620};
621
622
623
624
625
626
627
628
629
630
631
632
633enum {
634 SCANNED_GARBAGE = 0,
635 SCANNED_EMPTY_SPACE = -1,
636 SCANNED_A_NODE = -2,
637 SCANNED_A_CORRUPT_NODE = -3,
638 SCANNED_A_BAD_PAD_NODE = -4,
639};
640
641
642
643
644
645
646
647
648
649enum {
650 DIRTY_CNODE = 0,
651 COW_CNODE = 1,
652 OBSOLETE_CNODE = 2,
653};
654
655
656
657
658
659
660
661enum {
662 LTAB_DIRTY = 1,
663 LSAVE_DIRTY = 2,
664};
665
666
667
668
669
670
671
672enum {
673 LEB_FREED,
674 LEB_FREED_IDX,
675 LEB_RETAINED,
676};
677
678
679
680
681
682
683
684struct ubifs_old_idx {
685 struct rb_node rb;
686 int lnum;
687 int offs;
688};
689
690
691union ubifs_key {
692 uint8_t u8[CUR_MAX_KEY_LEN];
693 uint32_t u32[CUR_MAX_KEY_LEN/4];
694 uint64_t u64[CUR_MAX_KEY_LEN/8];
695 __le32 j32[CUR_MAX_KEY_LEN/4];
696};
697
698
699
700
701
702
703
704
705
706
707
708struct ubifs_scan_node {
709 struct list_head list;
710 union ubifs_key key;
711 unsigned long long sqnum;
712 int type;
713 int offs;
714 int len;
715 void *node;
716};
717
718
719
720
721
722
723
724
725
726
727struct ubifs_scan_leb {
728 int lnum;
729 int nodes_cnt;
730 struct list_head nodes;
731 int endpt;
732 int ecc;
733 void *buf;
734};
735
736
737
738
739
740
741
742
743
744
745
746struct ubifs_gced_idx_leb {
747 struct list_head list;
748 int lnum;
749 int unmap;
750};
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809struct ubifs_inode {
810 struct inode vfs_inode;
811 unsigned long long creat_sqnum;
812 unsigned long long del_cmtno;
813 unsigned int xattr_size;
814 unsigned int xattr_cnt;
815 unsigned int xattr_names;
816 unsigned int dirty:1;
817 unsigned int xattr:1;
818 unsigned int bulk_read:1;
819 unsigned int compr_type:2;
820 struct mutex ui_mutex;
821 spinlock_t ui_lock;
822 loff_t synced_i_size;
823 loff_t ui_size;
824 int flags;
825 pgoff_t last_page_read;
826 pgoff_t read_in_a_row;
827 int data_len;
828 void *data;
829};
830
831
832
833
834
835
836
837
838
839
840
841struct ubifs_unclean_leb {
842 struct list_head list;
843 int lnum;
844 int endpt;
845};
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862enum {
863 LPROPS_UNCAT = 0,
864 LPROPS_DIRTY = 1,
865 LPROPS_DIRTY_IDX = 2,
866 LPROPS_FREE = 3,
867 LPROPS_HEAP_CNT = 3,
868 LPROPS_EMPTY = 4,
869 LPROPS_FREEABLE = 5,
870 LPROPS_FRDI_IDX = 6,
871 LPROPS_CAT_MASK = 15,
872 LPROPS_TAKEN = 16,
873 LPROPS_INDEX = 32,
874};
875
876
877
878
879
880
881
882
883
884
885struct ubifs_lprops {
886 int free;
887 int dirty;
888 int flags;
889 int lnum;
890 union {
891 struct list_head list;
892 int hpos;
893 };
894};
895
896
897
898
899
900
901
902
903struct ubifs_lpt_lprops {
904 int free;
905 int dirty;
906 unsigned tgc:1;
907 unsigned cmt:1;
908};
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936struct ubifs_lp_stats {
937 int empty_lebs;
938 int taken_empty_lebs;
939 int idx_lebs;
940 long long total_free;
941 long long total_dirty;
942 long long total_used;
943 long long total_dead;
944 long long total_dark;
945};
946
947struct ubifs_nnode;
948
949
950
951
952
953
954
955
956
957
958struct ubifs_cnode {
959 struct ubifs_nnode *parent;
960 struct ubifs_cnode *cnext;
961 unsigned long flags;
962 int iip;
963 int level;
964 int num;
965};
966
967
968
969
970
971
972
973
974
975
976
977struct ubifs_pnode {
978 struct ubifs_nnode *parent;
979 struct ubifs_cnode *cnext;
980 unsigned long flags;
981 int iip;
982 int level;
983 int num;
984 struct ubifs_lprops lprops[UBIFS_LPT_FANOUT];
985};
986
987
988
989
990
991
992
993
994
995struct ubifs_nbranch {
996 int lnum;
997 int offs;
998 union {
999 struct ubifs_nnode *nnode;
1000 struct ubifs_pnode *pnode;
1001 struct ubifs_cnode *cnode;
1002 };
1003};
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015struct ubifs_nnode {
1016 struct ubifs_nnode *parent;
1017 struct ubifs_cnode *cnext;
1018 unsigned long flags;
1019 int iip;
1020 int level;
1021 int num;
1022 struct ubifs_nbranch nbranch[UBIFS_LPT_FANOUT];
1023};
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033struct ubifs_lpt_heap {
1034 struct ubifs_lprops **arr;
1035 int cnt;
1036 int max_cnt;
1037};
1038
1039
1040
1041
1042
1043
1044
1045
1046enum {
1047 LPT_SCAN_CONTINUE = 0,
1048 LPT_SCAN_ADD = 1,
1049 LPT_SCAN_STOP = 2,
1050};
1051
1052struct ubifs_info;
1053
1054
1055typedef int (*ubifs_lpt_scan_callback)(struct ubifs_info *c,
1056 const struct ubifs_lprops *lprops,
1057 int in_tree, void *data);
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091struct ubifs_wbuf {
1092 struct ubifs_info *c;
1093 void *buf;
1094 int lnum;
1095 int offs;
1096 int avail;
1097 int used;
1098 int dtype;
1099 int jhead;
1100 int (*sync_callback)(struct ubifs_info *c, int lnum, int free, int pad);
1101 struct mutex io_mutex;
1102 spinlock_t lock;
1103 int timeout;
1104 int need_sync;
1105 int next_ino;
1106 ino_t *inodes;
1107};
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117struct ubifs_bud {
1118 int lnum;
1119 int start;
1120 int jhead;
1121 struct list_head list;
1122 struct rb_node rb;
1123};
1124
1125
1126
1127
1128
1129
1130
1131
1132struct ubifs_jhead {
1133 struct ubifs_wbuf wbuf;
1134 struct list_head buds_list;
1135};
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145struct ubifs_zbranch {
1146 union ubifs_key key;
1147 union {
1148 struct ubifs_znode *znode;
1149 void *leaf;
1150 };
1151 int lnum;
1152 int offs;
1153 int len;
1154};
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171struct ubifs_znode {
1172 struct ubifs_znode *parent;
1173 struct ubifs_znode *cnext;
1174 unsigned long flags;
1175 unsigned long time;
1176 int level;
1177 int child_cnt;
1178 int iip;
1179 int alt;
1180#ifdef CONFIG_UBIFS_FS_DEBUG
1181 int lnum, offs, len;
1182#endif
1183 struct ubifs_zbranch zbranch[];
1184};
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197struct bu_info {
1198 union ubifs_key key;
1199 struct ubifs_zbranch zbranch[UBIFS_MAX_BULK_READ];
1200 void *buf;
1201 int buf_len;
1202 int gc_seq;
1203 int cnt;
1204 int blk_cnt;
1205 int eof;
1206};
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216struct ubifs_node_range {
1217 union {
1218 int len;
1219 int min_len;
1220 };
1221 int max_len;
1222};
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233struct ubifs_compressor {
1234 int compr_type;
1235 char *name;
1236 char *capi_name;
1237 int (*decompress)(const unsigned char *in, size_t in_len,
1238 unsigned char *out, size_t *out_len);
1239};
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275struct ubifs_budget_req {
1276 unsigned int fast:1;
1277 unsigned int recalculate:1;
1278#ifndef UBIFS_DEBUG
1279 unsigned int new_page:1;
1280 unsigned int dirtied_page:1;
1281 unsigned int new_dent:1;
1282 unsigned int mod_dent:1;
1283 unsigned int new_ino:1;
1284 unsigned int new_ino_d:13;
1285 unsigned int dirtied_ino:4;
1286 unsigned int dirtied_ino_d:15;
1287#else
1288
1289 unsigned int new_page;
1290 unsigned int dirtied_page;
1291 unsigned int new_dent;
1292 unsigned int mod_dent;
1293 unsigned int new_ino;
1294 unsigned int new_ino_d;
1295 unsigned int dirtied_ino;
1296 unsigned int dirtied_ino_d;
1297#endif
1298 int idx_growth;
1299 int data_growth;
1300 int dd_growth;
1301};
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313struct ubifs_orphan {
1314 struct rb_node rb;
1315 struct list_head list;
1316 struct list_head new_list;
1317 struct ubifs_orphan *cnext;
1318 struct ubifs_orphan *dnext;
1319 ino_t inum;
1320 int new;
1321};
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335struct ubifs_mount_opts {
1336 unsigned int unmount_mode:2;
1337 unsigned int bulk_read:2;
1338 unsigned int chk_data_crc:2;
1339 unsigned int override_compr:1;
1340 unsigned int compr_type:2;
1341};
1342
1343struct ubifs_debug_info;
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593struct ubifs_info {
1594 struct super_block *vfs_sb;
1595
1596 ino_t highest_inum;
1597 unsigned long long max_sqnum;
1598 unsigned long long cmt_no;
1599 spinlock_t cnt_lock;
1600 int fmt_version;
1601 int ro_compat_version;
1602 unsigned char uuid[16];
1603
1604 int lhead_lnum;
1605 int lhead_offs;
1606 int ltail_lnum;
1607 struct mutex log_mutex;
1608 int min_log_bytes;
1609 long long cmt_bud_bytes;
1610
1611 struct rb_root buds;
1612 long long bud_bytes;
1613 spinlock_t buds_lock;
1614 int jhead_cnt;
1615 struct ubifs_jhead *jheads;
1616 long long max_bud_bytes;
1617 long long bg_bud_bytes;
1618 struct list_head old_buds;
1619 int max_bud_cnt;
1620
1621 struct rw_semaphore commit_sem;
1622 int cmt_state;
1623 spinlock_t cs_lock;
1624 wait_queue_head_t cmt_wq;
1625
1626 unsigned int big_lpt:1;
1627 unsigned int no_chk_data_crc:1;
1628 unsigned int bulk_read:1;
1629 unsigned int default_compr:2;
1630 unsigned int rw_incompat:1;
1631
1632 struct mutex tnc_mutex;
1633 struct ubifs_zbranch zroot;
1634 struct ubifs_znode *cnext;
1635 struct ubifs_znode *enext;
1636 int *gap_lebs;
1637 void *cbuf;
1638 void *ileb_buf;
1639 int ileb_len;
1640 int ihead_lnum;
1641 int ihead_offs;
1642 int *ilebs;
1643 int ileb_cnt;
1644 int ileb_nxt;
1645 struct rb_root old_idx;
1646 int *bottom_up_buf;
1647
1648 struct ubifs_mst_node *mst_node;
1649 int mst_offs;
1650 struct mutex mst_mutex;
1651
1652 int max_bu_buf_len;
1653 struct mutex bu_mutex;
1654 struct bu_info bu;
1655
1656 int log_lebs;
1657 long long log_bytes;
1658 int log_last;
1659 int lpt_lebs;
1660 int lpt_first;
1661 int lpt_last;
1662 int orph_lebs;
1663 int orph_first;
1664 int orph_last;
1665 int main_lebs;
1666 int main_first;
1667 long long main_bytes;
1668
1669 uint8_t key_hash_type;
1670 uint32_t (*key_hash)(const char *str, int len);
1671 int key_fmt;
1672 int key_len;
1673 int fanout;
1674
1675 int min_io_size;
1676 int min_io_shift;
1677 int leb_size;
1678 int half_leb_size;
1679 int leb_cnt;
1680 int max_leb_cnt;
1681 int old_leb_cnt;
1682 int ro_media;
1683
1684 long long budg_idx_growth;
1685 long long budg_data_growth;
1686 long long budg_dd_growth;
1687 long long budg_uncommitted_idx;
1688 spinlock_t space_lock;
1689 int min_idx_lebs;
1690 unsigned long long old_idx_sz;
1691 unsigned long long calc_idx_sz;
1692 struct ubifs_lp_stats lst;
1693 unsigned int nospace:1;
1694 unsigned int nospace_rp:1;
1695
1696 int page_budget;
1697 int inode_budget;
1698 int dent_budget;
1699
1700 int ref_node_alsz;
1701 int mst_node_alsz;
1702 int min_idx_node_sz;
1703 int max_idx_node_sz;
1704 long long max_inode_sz;
1705 int max_znode_sz;
1706
1707 int leb_overhead;
1708 int dead_wm;
1709 int dark_wm;
1710 int block_cnt;
1711
1712 struct ubifs_node_range ranges[UBIFS_NODE_TYPES_CNT];
1713 struct ubi_volume_desc *ubi;
1714 struct ubi_device_info di;
1715 struct ubi_volume_info vi;
1716
1717 struct rb_root orph_tree;
1718 struct list_head orph_list;
1719 struct list_head orph_new;
1720 struct ubifs_orphan *orph_cnext;
1721 struct ubifs_orphan *orph_dnext;
1722 spinlock_t orphan_lock;
1723 void *orph_buf;
1724 int new_orphans;
1725 int cmt_orphans;
1726 int tot_orphans;
1727 int max_orphans;
1728 int ohead_lnum;
1729 int ohead_offs;
1730 int no_orphs;
1731
1732 struct task_struct *bgt;
1733 char bgt_name[sizeof(BGT_NAME_PATTERN) + 9];
1734 int need_bgt;
1735 int need_wbuf_sync;
1736
1737 int gc_lnum;
1738 void *sbuf;
1739 struct list_head idx_gc;
1740 int idx_gc_cnt;
1741 int gc_seq;
1742 int gced_lnum;
1743
1744 struct list_head infos_list;
1745 struct mutex umount_mutex;
1746 unsigned int shrinker_run_no;
1747
1748 int space_bits;
1749 int lpt_lnum_bits;
1750 int lpt_offs_bits;
1751 int lpt_spc_bits;
1752 int pcnt_bits;
1753 int lnum_bits;
1754 int nnode_sz;
1755 int pnode_sz;
1756 int ltab_sz;
1757 int lsave_sz;
1758 int pnode_cnt;
1759 int nnode_cnt;
1760 int lpt_hght;
1761 int pnodes_have;
1762
1763 struct mutex lp_mutex;
1764 int lpt_lnum;
1765 int lpt_offs;
1766 int nhead_lnum;
1767 int nhead_offs;
1768 int lpt_drty_flgs;
1769 int dirty_nn_cnt;
1770 int dirty_pn_cnt;
1771 int check_lpt_free;
1772 long long lpt_sz;
1773 void *lpt_nod_buf;
1774 void *lpt_buf;
1775 struct ubifs_nnode *nroot;
1776 struct ubifs_cnode *lpt_cnext;
1777 struct ubifs_lpt_heap lpt_heap[LPROPS_HEAP_CNT];
1778 struct ubifs_lpt_heap dirty_idx;
1779 struct list_head uncat_list;
1780 struct list_head empty_list;
1781 struct list_head freeable_list;
1782 struct list_head frdi_idx_list;
1783 int freeable_cnt;
1784
1785 int ltab_lnum;
1786 int ltab_offs;
1787 struct ubifs_lpt_lprops *ltab;
1788 struct ubifs_lpt_lprops *ltab_cmt;
1789 int lsave_cnt;
1790 int lsave_lnum;
1791 int lsave_offs;
1792 int *lsave;
1793 int lscan_lnum;
1794
1795 long long rp_size;
1796 long long report_rp_size;
1797 uid_t rp_uid;
1798 gid_t rp_gid;
1799
1800
1801 int empty;
1802 struct rb_root replay_tree;
1803 struct list_head replay_list;
1804 struct list_head replay_buds;
1805 unsigned long long cs_sqnum;
1806 unsigned long long replay_sqnum;
1807 int need_recovery;
1808 int replaying;
1809 struct list_head unclean_leb_list;
1810 struct ubifs_mst_node *rcvrd_mst_node;
1811 struct rb_root size_tree;
1812 int remounting_rw;
1813 int always_chk_crc;
1814 struct ubifs_mount_opts mount_opts;
1815
1816#ifdef CONFIG_UBIFS_FS_DEBUG
1817 struct ubifs_debug_info *dbg;
1818#endif
1819};
1820
1821extern spinlock_t ubifs_infos_lock;
1822extern struct kmem_cache *ubifs_inode_slab;
1823extern const struct super_operations ubifs_super_operations;
1824extern const struct address_space_operations ubifs_file_address_operations;
1825extern const struct file_operations ubifs_file_operations;
1826extern const struct inode_operations ubifs_file_inode_operations;
1827extern const struct file_operations ubifs_dir_operations;
1828extern const struct inode_operations ubifs_dir_inode_operations;
1829extern const struct inode_operations ubifs_symlink_inode_operations;
1830extern struct backing_dev_info ubifs_backing_dev_info;
1831extern struct ubifs_compressor *ubifs_compressors[UBIFS_COMPR_TYPES_CNT];
1832
1833
1834void ubifs_ro_mode(struct ubifs_info *c, int err);
1835int ubifs_wbuf_write_nolock(struct ubifs_wbuf *wbuf, void *buf, int len);
1836int ubifs_wbuf_seek_nolock(struct ubifs_wbuf *wbuf, int lnum, int offs,
1837 int dtype);
1838int ubifs_wbuf_init(struct ubifs_info *c, struct ubifs_wbuf *wbuf);
1839int ubifs_read_node(const struct ubifs_info *c, void *buf, int type, int len,
1840 int lnum, int offs);
1841int ubifs_read_node_wbuf(struct ubifs_wbuf *wbuf, void *buf, int type, int len,
1842 int lnum, int offs);
1843int ubifs_write_node(struct ubifs_info *c, void *node, int len, int lnum,
1844 int offs, int dtype);
1845int ubifs_check_node(const struct ubifs_info *c, const void *buf, int lnum,
1846 int offs, int quiet, int must_chk_crc);
1847void ubifs_prepare_node(struct ubifs_info *c, void *buf, int len, int pad);
1848void ubifs_prep_grp_node(struct ubifs_info *c, void *node, int len, int last);
1849int ubifs_io_init(struct ubifs_info *c);
1850void ubifs_pad(const struct ubifs_info *c, void *buf, int pad);
1851int ubifs_wbuf_sync_nolock(struct ubifs_wbuf *wbuf);
1852int ubifs_bg_wbufs_sync(struct ubifs_info *c);
1853void ubifs_wbuf_add_ino_nolock(struct ubifs_wbuf *wbuf, ino_t inum);
1854int ubifs_sync_wbufs_by_inode(struct ubifs_info *c, struct inode *inode);
1855
1856
1857struct ubifs_scan_leb *ubifs_scan(const struct ubifs_info *c, int lnum,
1858 int offs, void *sbuf);
1859void ubifs_scan_destroy(struct ubifs_scan_leb *sleb);
1860int ubifs_scan_a_node(const struct ubifs_info *c, void *buf, int len, int lnum,
1861 int offs, int quiet);
1862struct ubifs_scan_leb *ubifs_start_scan(const struct ubifs_info *c, int lnum,
1863 int offs, void *sbuf);
1864void ubifs_end_scan(const struct ubifs_info *c, struct ubifs_scan_leb *sleb,
1865 int lnum, int offs);
1866int ubifs_add_snod(const struct ubifs_info *c, struct ubifs_scan_leb *sleb,
1867 void *buf, int offs);
1868void ubifs_scanned_corruption(const struct ubifs_info *c, int lnum, int offs,
1869 void *buf);
1870
1871
1872void ubifs_add_bud(struct ubifs_info *c, struct ubifs_bud *bud);
1873void ubifs_create_buds_lists(struct ubifs_info *c);
1874int ubifs_add_bud_to_log(struct ubifs_info *c, int jhead, int lnum, int offs);
1875struct ubifs_bud *ubifs_search_bud(struct ubifs_info *c, int lnum);
1876struct ubifs_wbuf *ubifs_get_wbuf(struct ubifs_info *c, int lnum);
1877int ubifs_log_start_commit(struct ubifs_info *c, int *ltail_lnum);
1878int ubifs_log_end_commit(struct ubifs_info *c, int new_ltail_lnum);
1879int ubifs_log_post_commit(struct ubifs_info *c, int old_ltail_lnum);
1880int ubifs_consolidate_log(struct ubifs_info *c);
1881
1882
1883int ubifs_jnl_update(struct ubifs_info *c, const struct inode *dir,
1884 const struct qstr *nm, const struct inode *inode,
1885 int deletion, int xent);
1886int ubifs_jnl_write_data(struct ubifs_info *c, const struct inode *inode,
1887 const union ubifs_key *key, const void *buf, int len);
1888int ubifs_jnl_write_inode(struct ubifs_info *c, const struct inode *inode);
1889int ubifs_jnl_delete_inode(struct ubifs_info *c, const struct inode *inode);
1890int ubifs_jnl_rename(struct ubifs_info *c, const struct inode *old_dir,
1891 const struct dentry *old_dentry,
1892 const struct inode *new_dir,
1893 const struct dentry *new_dentry, int sync);
1894int ubifs_jnl_truncate(struct ubifs_info *c, const struct inode *inode,
1895 loff_t old_size, loff_t new_size);
1896int ubifs_jnl_delete_xattr(struct ubifs_info *c, const struct inode *host,
1897 const struct inode *inode, const struct qstr *nm);
1898int ubifs_jnl_change_xattr(struct ubifs_info *c, const struct inode *inode1,
1899 const struct inode *inode2);
1900
1901
1902int ubifs_budget_space(struct ubifs_info *c, struct ubifs_budget_req *req);
1903void ubifs_release_budget(struct ubifs_info *c, struct ubifs_budget_req *req);
1904void ubifs_release_dirty_inode_budget(struct ubifs_info *c,
1905 struct ubifs_inode *ui);
1906int ubifs_budget_inode_op(struct ubifs_info *c, struct inode *inode,
1907 struct ubifs_budget_req *req);
1908void ubifs_release_ino_dirty(struct ubifs_info *c, struct inode *inode,
1909 struct ubifs_budget_req *req);
1910void ubifs_cancel_ino_op(struct ubifs_info *c, struct inode *inode,
1911 struct ubifs_budget_req *req);
1912long long ubifs_get_free_space(struct ubifs_info *c);
1913long long ubifs_get_free_space_nolock(struct ubifs_info *c);
1914int ubifs_calc_min_idx_lebs(struct ubifs_info *c);
1915void ubifs_convert_page_budget(struct ubifs_info *c);
1916long long ubifs_reported_space(const struct ubifs_info *c, long long free);
1917long long ubifs_calc_available(const struct ubifs_info *c, int min_idx_lebs);
1918
1919
1920int ubifs_find_free_space(struct ubifs_info *c, int min_space, int *free,
1921 int squeeze);
1922int ubifs_find_free_leb_for_idx(struct ubifs_info *c);
1923int ubifs_find_dirty_leb(struct ubifs_info *c, struct ubifs_lprops *ret_lp,
1924 int min_space, int pick_free);
1925int ubifs_find_dirty_idx_leb(struct ubifs_info *c);
1926int ubifs_save_dirty_idx_lnums(struct ubifs_info *c);
1927
1928
1929int ubifs_lookup_level0(struct ubifs_info *c, const union ubifs_key *key,
1930 struct ubifs_znode **zn, int *n);
1931int ubifs_tnc_lookup_nm(struct ubifs_info *c, const union ubifs_key *key,
1932 void *node, const struct qstr *nm);
1933int ubifs_tnc_locate(struct ubifs_info *c, const union ubifs_key *key,
1934 void *node, int *lnum, int *offs);
1935int ubifs_tnc_add(struct ubifs_info *c, const union ubifs_key *key, int lnum,
1936 int offs, int len);
1937int ubifs_tnc_replace(struct ubifs_info *c, const union ubifs_key *key,
1938 int old_lnum, int old_offs, int lnum, int offs, int len);
1939int ubifs_tnc_add_nm(struct ubifs_info *c, const union ubifs_key *key,
1940 int lnum, int offs, int len, const struct qstr *nm);
1941int ubifs_tnc_remove(struct ubifs_info *c, const union ubifs_key *key);
1942int ubifs_tnc_remove_nm(struct ubifs_info *c, const union ubifs_key *key,
1943 const struct qstr *nm);
1944int ubifs_tnc_remove_range(struct ubifs_info *c, union ubifs_key *from_key,
1945 union ubifs_key *to_key);
1946int ubifs_tnc_remove_ino(struct ubifs_info *c, ino_t inum);
1947struct ubifs_dent_node *ubifs_tnc_next_ent(struct ubifs_info *c,
1948 union ubifs_key *key,
1949 const struct qstr *nm);
1950void ubifs_tnc_close(struct ubifs_info *c);
1951int ubifs_tnc_has_node(struct ubifs_info *c, union ubifs_key *key, int level,
1952 int lnum, int offs, int is_idx);
1953int ubifs_dirty_idx_node(struct ubifs_info *c, union ubifs_key *key, int level,
1954 int lnum, int offs);
1955
1956void destroy_old_idx(struct ubifs_info *c);
1957int is_idx_node_in_tnc(struct ubifs_info *c, union ubifs_key *key, int level,
1958 int lnum, int offs);
1959int insert_old_idx_znode(struct ubifs_info *c, struct ubifs_znode *znode);
1960int ubifs_tnc_get_bu_keys(struct ubifs_info *c, struct bu_info *bu);
1961int ubifs_tnc_bulk_read(struct ubifs_info *c, struct bu_info *bu);
1962
1963
1964struct ubifs_znode *ubifs_tnc_levelorder_next(struct ubifs_znode *zr,
1965 struct ubifs_znode *znode);
1966int ubifs_search_zbranch(const struct ubifs_info *c,
1967 const struct ubifs_znode *znode,
1968 const union ubifs_key *key, int *n);
1969struct ubifs_znode *ubifs_tnc_postorder_first(struct ubifs_znode *znode);
1970struct ubifs_znode *ubifs_tnc_postorder_next(struct ubifs_znode *znode);
1971long ubifs_destroy_tnc_subtree(struct ubifs_znode *zr);
1972struct ubifs_znode *ubifs_load_znode(struct ubifs_info *c,
1973 struct ubifs_zbranch *zbr,
1974 struct ubifs_znode *parent, int iip);
1975int ubifs_tnc_read_node(struct ubifs_info *c, struct ubifs_zbranch *zbr,
1976 void *node);
1977
1978
1979int ubifs_tnc_start_commit(struct ubifs_info *c, struct ubifs_zbranch *zroot);
1980int ubifs_tnc_end_commit(struct ubifs_info *c);
1981
1982
1983int ubifs_shrinker(int nr_to_scan, gfp_t gfp_mask);
1984
1985
1986int ubifs_bg_thread(void *info);
1987void ubifs_commit_required(struct ubifs_info *c);
1988void ubifs_request_bg_commit(struct ubifs_info *c);
1989int ubifs_run_commit(struct ubifs_info *c);
1990void ubifs_recovery_commit(struct ubifs_info *c);
1991int ubifs_gc_should_commit(struct ubifs_info *c);
1992void ubifs_wait_for_commit(struct ubifs_info *c);
1993
1994
1995int ubifs_read_master(struct ubifs_info *c);
1996int ubifs_write_master(struct ubifs_info *c);
1997
1998
1999int ubifs_read_superblock(struct ubifs_info *c);
2000struct ubifs_sb_node *ubifs_read_sb_node(struct ubifs_info *c);
2001int ubifs_write_sb_node(struct ubifs_info *c, struct ubifs_sb_node *sup);
2002
2003
2004int ubifs_validate_entry(struct ubifs_info *c,
2005 const struct ubifs_dent_node *dent);
2006int ubifs_replay_journal(struct ubifs_info *c);
2007
2008
2009int ubifs_garbage_collect(struct ubifs_info *c, int anyway);
2010int ubifs_gc_start_commit(struct ubifs_info *c);
2011int ubifs_gc_end_commit(struct ubifs_info *c);
2012void ubifs_destroy_idx_gc(struct ubifs_info *c);
2013int ubifs_get_idx_gc_leb(struct ubifs_info *c);
2014int ubifs_garbage_collect_leb(struct ubifs_info *c, struct ubifs_lprops *lp);
2015
2016
2017int ubifs_add_orphan(struct ubifs_info *c, ino_t inum);
2018void ubifs_delete_orphan(struct ubifs_info *c, ino_t inum);
2019int ubifs_orphan_start_commit(struct ubifs_info *c);
2020int ubifs_orphan_end_commit(struct ubifs_info *c);
2021int ubifs_mount_orphans(struct ubifs_info *c, int unclean, int read_only);
2022int ubifs_clear_orphans(struct ubifs_info *c);
2023
2024
2025int ubifs_calc_lpt_geom(struct ubifs_info *c);
2026int ubifs_create_dflt_lpt(struct ubifs_info *c, int *main_lebs, int lpt_first,
2027 int *lpt_lebs, int *big_lpt);
2028int ubifs_lpt_init(struct ubifs_info *c, int rd, int wr);
2029struct ubifs_lprops *ubifs_lpt_lookup(struct ubifs_info *c, int lnum);
2030struct ubifs_lprops *ubifs_lpt_lookup_dirty(struct ubifs_info *c, int lnum);
2031int ubifs_lpt_scan_nolock(struct ubifs_info *c, int start_lnum, int end_lnum,
2032 ubifs_lpt_scan_callback scan_cb, void *data);
2033
2034
2035void ubifs_pack_lsave(struct ubifs_info *c, void *buf, int *lsave);
2036void ubifs_pack_ltab(struct ubifs_info *c, void *buf,
2037 struct ubifs_lpt_lprops *ltab);
2038void ubifs_pack_pnode(struct ubifs_info *c, void *buf,
2039 struct ubifs_pnode *pnode);
2040void ubifs_pack_nnode(struct ubifs_info *c, void *buf,
2041 struct ubifs_nnode *nnode);
2042struct ubifs_pnode *ubifs_get_pnode(struct ubifs_info *c,
2043 struct ubifs_nnode *parent, int iip);
2044struct ubifs_nnode *ubifs_get_nnode(struct ubifs_info *c,
2045 struct ubifs_nnode *parent, int iip);
2046int ubifs_read_nnode(struct ubifs_info *c, struct ubifs_nnode *parent, int iip);
2047void ubifs_add_lpt_dirt(struct ubifs_info *c, int lnum, int dirty);
2048void ubifs_add_nnode_dirt(struct ubifs_info *c, struct ubifs_nnode *nnode);
2049uint32_t ubifs_unpack_bits(uint8_t **addr, int *pos, int nrbits);
2050struct ubifs_nnode *ubifs_first_nnode(struct ubifs_info *c, int *hght);
2051
2052int ubifs_unpack_nnode(const struct ubifs_info *c, void *buf,
2053 struct ubifs_nnode *nnode);
2054
2055
2056int ubifs_lpt_start_commit(struct ubifs_info *c);
2057int ubifs_lpt_end_commit(struct ubifs_info *c);
2058int ubifs_lpt_post_commit(struct ubifs_info *c);
2059void ubifs_lpt_free(struct ubifs_info *c, int wr_only);
2060
2061
2062const struct ubifs_lprops *ubifs_change_lp(struct ubifs_info *c,
2063 const struct ubifs_lprops *lp,
2064 int free, int dirty, int flags,
2065 int idx_gc_cnt);
2066void ubifs_get_lp_stats(struct ubifs_info *c, struct ubifs_lp_stats *lst);
2067void ubifs_add_to_cat(struct ubifs_info *c, struct ubifs_lprops *lprops,
2068 int cat);
2069void ubifs_replace_cat(struct ubifs_info *c, struct ubifs_lprops *old_lprops,
2070 struct ubifs_lprops *new_lprops);
2071void ubifs_ensure_cat(struct ubifs_info *c, struct ubifs_lprops *lprops);
2072int ubifs_categorize_lprops(const struct ubifs_info *c,
2073 const struct ubifs_lprops *lprops);
2074int ubifs_change_one_lp(struct ubifs_info *c, int lnum, int free, int dirty,
2075 int flags_set, int flags_clean, int idx_gc_cnt);
2076int ubifs_update_one_lp(struct ubifs_info *c, int lnum, int free, int dirty,
2077 int flags_set, int flags_clean);
2078int ubifs_read_one_lp(struct ubifs_info *c, int lnum, struct ubifs_lprops *lp);
2079const struct ubifs_lprops *ubifs_fast_find_free(struct ubifs_info *c);
2080const struct ubifs_lprops *ubifs_fast_find_empty(struct ubifs_info *c);
2081const struct ubifs_lprops *ubifs_fast_find_freeable(struct ubifs_info *c);
2082const struct ubifs_lprops *ubifs_fast_find_frdi_idx(struct ubifs_info *c);
2083
2084
2085int ubifs_fsync(struct file *file, struct dentry *dentry, int datasync);
2086int ubifs_setattr(struct dentry *dentry, struct iattr *attr);
2087
2088
2089struct inode *ubifs_new_inode(struct ubifs_info *c, const struct inode *dir,
2090 int mode);
2091int ubifs_getattr(struct vfsmount *mnt, struct dentry *dentry,
2092 struct kstat *stat);
2093
2094
2095int ubifs_setxattr(struct dentry *dentry, const char *name,
2096 const void *value, size_t size, int flags);
2097ssize_t ubifs_getxattr(struct dentry *dentry, const char *name, void *buf,
2098 size_t size);
2099ssize_t ubifs_listxattr(struct dentry *dentry, char *buffer, size_t size);
2100int ubifs_removexattr(struct dentry *dentry, const char *name);
2101
2102
2103struct inode *ubifs_iget(struct super_block *sb, unsigned long inum);
2104int ubifs_iput(struct inode *inode);
2105
2106
2107int ubifs_recover_master_node(struct ubifs_info *c);
2108int ubifs_write_rcvrd_mst_node(struct ubifs_info *c);
2109struct ubifs_scan_leb *ubifs_recover_leb(struct ubifs_info *c, int lnum,
2110 int offs, void *sbuf, int grouped);
2111struct ubifs_scan_leb *ubifs_recover_log_leb(struct ubifs_info *c, int lnum,
2112 int offs, void *sbuf);
2113int ubifs_recover_inl_heads(const struct ubifs_info *c, void *sbuf);
2114int ubifs_clean_lebs(const struct ubifs_info *c, void *sbuf);
2115int ubifs_rcvry_gc_commit(struct ubifs_info *c);
2116int ubifs_recover_size_accum(struct ubifs_info *c, union ubifs_key *key,
2117 int deletion, loff_t new_size);
2118int ubifs_recover_size(struct ubifs_info *c);
2119void ubifs_destroy_size_tree(struct ubifs_info *c);
2120
2121
2122long ubifs_ioctl(struct file *file, unsigned int cmd, unsigned long arg);
2123void ubifs_set_inode_flags(struct inode *inode);
2124#ifdef CONFIG_COMPAT
2125long ubifs_compat_ioctl(struct file *file, unsigned int cmd, unsigned long arg);
2126#endif
2127
2128
2129int __init ubifs_compressors_init(void);
2130void __exit ubifs_compressors_exit(void);
2131void ubifs_compress(const void *in_buf, int in_len, void *out_buf, int *out_len,
2132 int *compr_type);
2133int ubifs_decompress(const void *buf, int len, void *out, int *out_len,
2134 int compr_type);
2135
2136#include "debug.h"
2137#include "misc.h"
2138#include "key.h"
2139
2140
2141int lzo1x_decompress_safe(const unsigned char *in, size_t in_len,
2142 unsigned char *out, size_t *out_len);
2143#endif
2144