Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
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 {
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 {
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 {
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 {
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 {
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 {
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 {
260 };
261 
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 {
280 };
281 
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 
312  int lnum;
314  struct list_head nodes;
315  int endpt;
316  int ecc;
317  void *buf;
318 };
319 
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;
407  loff_t ui_size;
408  int flags;
411  int data_len;
412  void *data;
413 };
414 
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 {
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 
488  int free;
489  int dirty;
490  unsigned tgc:1;
491  unsigned cmt:1;
492 };
493 
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 {
545  unsigned long flags;
546  int iip;
547  int level;
548  int num;
549 };
550 
561 struct ubifs_pnode {
564  unsigned long flags;
565  int iip;
566  int level;
567  int num;
569 };
570 
580  int lnum;
581  int offs;
582  union {
586  };
587 };
588 
599 struct ubifs_nnode {
602  unsigned long flags;
603  int iip;
604  int level;
605  int num;
607 };
608 
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 {
634 };
635 
636 struct ubifs_info;
637 
638 /* Callback used by the 'ubifs_lpt_scan_nolock()' function */
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;
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;
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;
725  unsigned int grouped:1;
726 };
727 
737  union ubifs_key key;
738  union {
740  void *leaf;
741  };
742  int lnum;
743  int offs;
744  int len;
745 };
746 
765 struct ubifs_znode {
768  unsigned long flags;
769  unsigned long time;
770  int level;
772  int iip;
773  int alt;
774  int lnum;
775  int offs;
776  int len;
778 };
779 
791 struct bu_info {
792  union ubifs_key key;
794  void *buf;
795  int buf_len;
796  int gc_seq;
797  int cnt;
798  int blk_cnt;
799  int eof;
800 };
801 
811  union {
812  int len;
813  int min_len;
814  };
815  int max_len;
816 };
817 
829  struct crypto_comp *cc;
830  struct mutex *comp_mutex;
832  const char *name;
833  const char *capi_name;
834 };
835 
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
896 };
897 
908 struct ubifs_orphan {
909  struct rb_node rb;
910  struct list_head list;
915  int new;
916 };
917 
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 
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;
965  unsigned int nospace:1;
966  unsigned int nospace_rp:1;
970 };
971 
972 struct ubifs_debug_info;
973 
1222 struct ubifs_info {
1225 
1227  unsigned long long max_sqnum;
1228  unsigned long long cmt_no;
1232  unsigned char uuid[16];
1233 
1239  long long cmt_bud_bytes;
1240 
1241  struct rb_root buds;
1242  long long bud_bytes;
1246  long long max_bud_bytes;
1247  long long bg_bud_bytes;
1250 
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 
1267  int *gap_lebs;
1268  void *cbuf;
1269  void *ileb_buf;
1273  int *ilebs;
1278 
1282 
1284  struct mutex bu_mutex;
1285  struct bu_info bu;
1286 
1289 
1291  long long log_bytes;
1301  long long main_bytes;
1302 
1304  uint32_t (*key_hash)(const char *str, int len);
1305  int key_fmt;
1306  int key_len;
1307  int fanout;
1308 
1317  int leb_cnt;
1320  unsigned int ro_media:1;
1321  unsigned int ro_mount:1;
1322  unsigned int ro_error:1;
1323 
1327 
1331  unsigned long long calc_idx_sz;
1332 
1337  long long max_inode_sz;
1339 
1341  int dead_wm;
1342  int dark_wm;
1344 
1349 
1356  void *orph_buf;
1364 
1365  struct task_struct *bgt;
1366  char bgt_name[sizeof(BGT_NAME_PATTERN) + 9];
1369 
1370  int gc_lnum;
1371  void *sbuf;
1374  int gc_seq;
1376 
1379  unsigned int shrinker_run_no;
1380 
1389  int ltab_sz;
1395 
1396  struct mutex lp_mutex;
1405  long long lpt_sz;
1407  void *lpt_buf;
1418 
1426  int *lsave;
1428 
1429  long long rp_size;
1430  long long report_rp_size;
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;
1442  unsigned long long cs_sqnum;
1443  unsigned long long replay_sqnum;
1448 
1450 };
1451 
1452 extern struct list_head ubifs_infos;
1455 extern struct kmem_cache *ubifs_inode_slab;
1456 extern const struct super_operations ubifs_super_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;
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);
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);
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);
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 */
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__ */