Home | History | Annotate | Download | only in ubifs
      1 /* SPDX-License-Identifier: GPL-2.0+ */
      2 /*
      3  * This file is part of UBIFS.
      4  *
      5  * Copyright (C) 2006-2008 Nokia Corporation
      6  *
      7  * (C) Copyright 2008-2009
      8  * Stefan Roese, DENX Software Engineering, sr (at) denx.de.
      9  *
     10  * Authors: Artem Bityutskiy ( )
     11  *          Adrian Hunter
     12  */
     13 
     14 #ifndef __UBIFS_H__
     15 #define __UBIFS_H__
     16 
     17 #ifndef __UBOOT__
     18 #include <asm/div64.h>
     19 #include <linux/statfs.h>
     20 #include <linux/fs.h>
     21 #include <linux/err.h>
     22 #include <linux/sched.h>
     23 #include <linux/slab.h>
     24 #include <linux/vmalloc.h>
     25 #include <linux/spinlock.h>
     26 #include <linux/mutex.h>
     27 #include <linux/rwsem.h>
     28 #include <linux/mtd/ubi.h>
     29 #include <linux/pagemap.h>
     30 #include <linux/backing-dev.h>
     31 #include <linux/security.h>
     32 #include "ubifs-media.h"
     33 #else
     34 #include <asm/atomic.h>
     35 #include <asm-generic/atomic-long.h>
     36 #include <ubi_uboot.h>
     37 #include <ubifs_uboot.h>
     38 
     39 #include <linux/ctype.h>
     40 #include <linux/time.h>
     41 #include <linux/math64.h>
     42 #include "ubifs-media.h"
     43 
     44 struct dentry;
     45 struct file;
     46 struct iattr;
     47 struct kstat;
     48 struct vfsmount;
     49 
     50 extern struct super_block *ubifs_sb;
     51 
     52 extern unsigned int ubifs_msg_flags;
     53 extern unsigned int ubifs_chk_flags;
     54 extern unsigned int ubifs_tst_flags;
     55 
     56 #define pgoff_t		unsigned long
     57 
     58 /*
     59  * We "simulate" the Linux page struct much simpler here
     60  */
     61 struct page {
     62 	pgoff_t index;
     63 	void *addr;
     64 	struct inode *inode;
     65 };
     66 
     67 void iput(struct inode *inode);
     68 
     69 /* linux/include/time.h */
     70 #define NSEC_PER_SEC	1000000000L
     71 #define get_seconds()	0
     72 #define CURRENT_TIME_SEC	((struct timespec) { get_seconds(), 0 })
     73 
     74 struct timespec {
     75 	time_t	tv_sec;		/* seconds */
     76 	long	tv_nsec;	/* nanoseconds */
     77 };
     78 
     79 static struct timespec current_fs_time(struct super_block *sb)
     80 {
     81 	struct timespec now;
     82 	now.tv_sec = 0;
     83 	now.tv_nsec = 0;
     84 	return now;
     85 };
     86 
     87 /* linux/include/dcache.h */
     88 
     89 /*
     90  * "quick string" -- eases parameter passing, but more importantly
     91  * saves "metadata" about the string (ie length and the hash).
     92  *
     93  * hash comes first so it snuggles against d_parent in the
     94  * dentry.
     95  */
     96 struct qstr {
     97 	unsigned int hash;
     98 	unsigned int len;
     99 #ifndef __UBOOT__
    100 	const char *name;
    101 #else
    102 	char *name;
    103 #endif
    104 };
    105 
    106 /* include/linux/fs.h */
    107 
    108 /* Possible states of 'frozen' field */
    109 enum {
    110 	SB_UNFROZEN = 0,		/* FS is unfrozen */
    111 	SB_FREEZE_WRITE	= 1,		/* Writes, dir ops, ioctls frozen */
    112 	SB_FREEZE_PAGEFAULT = 2,	/* Page faults stopped as well */
    113 	SB_FREEZE_FS = 3,		/* For internal FS use (e.g. to stop
    114 					 * internal threads if needed) */
    115 	SB_FREEZE_COMPLETE = 4,		/* ->freeze_fs finished successfully */
    116 };
    117 
    118 #define SB_FREEZE_LEVELS (SB_FREEZE_COMPLETE - 1)
    119 
    120 struct sb_writers {
    121 #ifndef __UBOOT__
    122 	/* Counters for counting writers at each level */
    123 	struct percpu_counter	counter[SB_FREEZE_LEVELS];
    124 #endif
    125 	wait_queue_head_t	wait;		/* queue for waiting for
    126 						   writers / faults to finish */
    127 	int			frozen;		/* Is sb frozen? */
    128 	wait_queue_head_t	wait_unfrozen;	/* queue for waiting for
    129 						   sb to be thawed */
    130 #ifdef CONFIG_DEBUG_LOCK_ALLOC
    131 	struct lockdep_map	lock_map[SB_FREEZE_LEVELS];
    132 #endif
    133 };
    134 
    135 struct address_space {
    136 	struct inode		*host;		/* owner: inode, block_device */
    137 #ifndef __UBOOT__
    138 	struct radix_tree_root	page_tree;	/* radix tree of all pages */
    139 #endif
    140 	spinlock_t		tree_lock;	/* and lock protecting it */
    141 	unsigned int		i_mmap_writable;/* count VM_SHARED mappings */
    142 	struct rb_root		i_mmap;		/* tree of private and shared mappings */
    143 	struct list_head	i_mmap_nonlinear;/*list VM_NONLINEAR mappings */
    144 	struct mutex		i_mmap_mutex;	/* protect tree, count, list */
    145 	/* Protected by tree_lock together with the radix tree */
    146 	unsigned long		nrpages;	/* number of total pages */
    147 	pgoff_t			writeback_index;/* writeback starts here */
    148 	const struct address_space_operations *a_ops;	/* methods */
    149 	unsigned long		flags;		/* error bits/gfp mask */
    150 #ifndef __UBOOT__
    151 	struct backing_dev_info *backing_dev_info; /* device readahead, etc */
    152 #endif
    153 	spinlock_t		private_lock;	/* for use by the address_space */
    154 	struct list_head	private_list;	/* ditto */
    155 	void			*private_data;	/* ditto */
    156 } __attribute__((aligned(sizeof(long))));
    157 
    158 /*
    159  * Keep mostly read-only and often accessed (especially for
    160  * the RCU path lookup and 'stat' data) fields at the beginning
    161  * of the 'struct inode'
    162  */
    163 struct inode {
    164 	umode_t			i_mode;
    165 	unsigned short		i_opflags;
    166 	kuid_t			i_uid;
    167 	kgid_t			i_gid;
    168 	unsigned int		i_flags;
    169 
    170 #ifdef CONFIG_FS_POSIX_ACL
    171 	struct posix_acl	*i_acl;
    172 	struct posix_acl	*i_default_acl;
    173 #endif
    174 
    175 	const struct inode_operations	*i_op;
    176 	struct super_block	*i_sb;
    177 	struct address_space	*i_mapping;
    178 
    179 #ifdef CONFIG_SECURITY
    180 	void			*i_security;
    181 #endif
    182 
    183 	/* Stat data, not accessed from path walking */
    184 	unsigned long		i_ino;
    185 	/*
    186 	 * Filesystems may only read i_nlink directly.  They shall use the
    187 	 * following functions for modification:
    188 	 *
    189 	 *    (set|clear|inc|drop)_nlink
    190 	 *    inode_(inc|dec)_link_count
    191 	 */
    192 	union {
    193 		const unsigned int i_nlink;
    194 		unsigned int __i_nlink;
    195 	};
    196 	dev_t			i_rdev;
    197 	loff_t			i_size;
    198 	struct timespec		i_atime;
    199 	struct timespec		i_mtime;
    200 	struct timespec		i_ctime;
    201 	spinlock_t		i_lock;	/* i_blocks, i_bytes, maybe i_size */
    202 	unsigned short          i_bytes;
    203 	unsigned int		i_blkbits;
    204 	blkcnt_t		i_blocks;
    205 
    206 #ifdef __NEED_I_SIZE_ORDERED
    207 	seqcount_t		i_size_seqcount;
    208 #endif
    209 
    210 	/* Misc */
    211 	unsigned long		i_state;
    212 	struct mutex		i_mutex;
    213 
    214 	unsigned long		dirtied_when;	/* jiffies of first dirtying */
    215 
    216 	struct hlist_node	i_hash;
    217 	struct list_head	i_wb_list;	/* backing dev IO list */
    218 	struct list_head	i_lru;		/* inode LRU list */
    219 	struct list_head	i_sb_list;
    220 	union {
    221 		struct hlist_head	i_dentry;
    222 		struct rcu_head		i_rcu;
    223 	};
    224 	u64			i_version;
    225 	atomic_t		i_count;
    226 	atomic_t		i_dio_count;
    227 	atomic_t		i_writecount;
    228 	const struct file_operations	*i_fop;	/* former ->i_op->default_file_ops */
    229 	struct file_lock	*i_flock;
    230 	struct address_space	i_data;
    231 #ifdef CONFIG_QUOTA
    232 	struct dquot		*i_dquot[MAXQUOTAS];
    233 #endif
    234 	struct list_head	i_devices;
    235 	union {
    236 		struct pipe_inode_info	*i_pipe;
    237 		struct block_device	*i_bdev;
    238 		struct cdev		*i_cdev;
    239 	};
    240 
    241 	__u32			i_generation;
    242 
    243 #ifdef CONFIG_FSNOTIFY
    244 	__u32			i_fsnotify_mask; /* all events this inode cares about */
    245 	struct hlist_head	i_fsnotify_marks;
    246 #endif
    247 
    248 #ifdef CONFIG_IMA
    249 	atomic_t		i_readcount; /* struct files open RO */
    250 #endif
    251 	void			*i_private; /* fs or device private pointer */
    252 };
    253 
    254 struct super_operations {
    255    	struct inode *(*alloc_inode)(struct super_block *sb);
    256 	void (*destroy_inode)(struct inode *);
    257 
    258    	void (*dirty_inode) (struct inode *, int flags);
    259 	int (*write_inode) (struct inode *, struct writeback_control *wbc);
    260 	int (*drop_inode) (struct inode *);
    261 	void (*evict_inode) (struct inode *);
    262 	void (*put_super) (struct super_block *);
    263 	int (*sync_fs)(struct super_block *sb, int wait);
    264 	int (*freeze_fs) (struct super_block *);
    265 	int (*unfreeze_fs) (struct super_block *);
    266 #ifndef __UBOOT__
    267 	int (*statfs) (struct dentry *, struct kstatfs *);
    268 #endif
    269 	int (*remount_fs) (struct super_block *, int *, char *);
    270 	void (*umount_begin) (struct super_block *);
    271 
    272 #ifndef __UBOOT__
    273 	int (*show_options)(struct seq_file *, struct dentry *);
    274 	int (*show_devname)(struct seq_file *, struct dentry *);
    275 	int (*show_path)(struct seq_file *, struct dentry *);
    276 	int (*show_stats)(struct seq_file *, struct dentry *);
    277 #endif
    278 #ifdef CONFIG_QUOTA
    279 	ssize_t (*quota_read)(struct super_block *, int, char *, size_t, loff_t);
    280 	ssize_t (*quota_write)(struct super_block *, int, const char *, size_t, loff_t);
    281 #endif
    282 	int (*bdev_try_to_free_page)(struct super_block*, struct page*, gfp_t);
    283 	long (*nr_cached_objects)(struct super_block *, int);
    284 	long (*free_cached_objects)(struct super_block *, long, int);
    285 };
    286 
    287 struct super_block {
    288 	struct list_head	s_list;		/* Keep this first */
    289 	dev_t			s_dev;		/* search index; _not_ kdev_t */
    290 	unsigned char		s_blocksize_bits;
    291 	unsigned long		s_blocksize;
    292 	loff_t			s_maxbytes;	/* Max file size */
    293 	struct file_system_type	*s_type;
    294 	const struct super_operations	*s_op;
    295 	const struct dquot_operations	*dq_op;
    296 	const struct quotactl_ops	*s_qcop;
    297 	const struct export_operations *s_export_op;
    298 	unsigned long		s_flags;
    299 	unsigned long		s_magic;
    300 	struct dentry		*s_root;
    301 	struct rw_semaphore	s_umount;
    302 	int			s_count;
    303 	atomic_t		s_active;
    304 #ifdef CONFIG_SECURITY
    305 	void                    *s_security;
    306 #endif
    307 	const struct xattr_handler **s_xattr;
    308 
    309 	struct list_head	s_inodes;	/* all inodes */
    310 #ifndef __UBOOT__
    311 	struct hlist_bl_head	s_anon;		/* anonymous dentries for (nfs) exporting */
    312 #endif
    313 	struct list_head	s_mounts;	/* list of mounts; _not_ for fs use */
    314 	struct block_device	*s_bdev;
    315 #ifndef __UBOOT__
    316 	struct backing_dev_info *s_bdi;
    317 #endif
    318 	struct mtd_info		*s_mtd;
    319 	struct hlist_node	s_instances;
    320 #ifndef __UBOOT__
    321 	struct quota_info	s_dquot;	/* Diskquota specific options */
    322 #endif
    323 
    324 	struct sb_writers	s_writers;
    325 
    326 	char s_id[32];				/* Informational name */
    327 	u8 s_uuid[16];				/* UUID */
    328 
    329 	void 			*s_fs_info;	/* Filesystem private info */
    330 	unsigned int		s_max_links;
    331 #ifndef __UBOOT__
    332 	fmode_t			s_mode;
    333 #endif
    334 
    335 	/* Granularity of c/m/atime in ns.
    336 	   Cannot be worse than a second */
    337 	u32		   s_time_gran;
    338 
    339 	/*
    340 	 * The next field is for VFS *only*. No filesystems have any business
    341 	 * even looking at it. You had been warned.
    342 	 */
    343 	struct mutex s_vfs_rename_mutex;	/* Kludge */
    344 
    345 	/*
    346 	 * Filesystem subtype.  If non-empty the filesystem type field
    347 	 * in /proc/mounts will be "type.subtype"
    348 	 */
    349 	char *s_subtype;
    350 
    351 #ifndef __UBOOT__
    352 	/*
    353 	 * Saved mount options for lazy filesystems using
    354 	 * generic_show_options()
    355 	 */
    356 	char __rcu *s_options;
    357 #endif
    358 	const struct dentry_operations *s_d_op; /* default d_op for dentries */
    359 
    360 	/*
    361 	 * Saved pool identifier for cleancache (-1 means none)
    362 	 */
    363 	int cleancache_poolid;
    364 
    365 #ifndef __UBOOT__
    366 	struct shrinker s_shrink;	/* per-sb shrinker handle */
    367 #endif
    368 
    369 	/* Number of inodes with nlink == 0 but still referenced */
    370 	atomic_long_t s_remove_count;
    371 
    372 	/* Being remounted read-only */
    373 	int s_readonly_remount;
    374 
    375 	/* AIO completions deferred from interrupt context */
    376 	struct workqueue_struct *s_dio_done_wq;
    377 
    378 #ifndef __UBOOT__
    379 	/*
    380 	 * Keep the lru lists last in the structure so they always sit on their
    381 	 * own individual cachelines.
    382 	 */
    383 	struct list_lru		s_dentry_lru ____cacheline_aligned_in_smp;
    384 	struct list_lru		s_inode_lru ____cacheline_aligned_in_smp;
    385 #endif
    386 	struct rcu_head		rcu;
    387 };
    388 
    389 struct file_system_type {
    390 	const char *name;
    391 	int fs_flags;
    392 #define FS_REQUIRES_DEV		1
    393 #define FS_BINARY_MOUNTDATA	2
    394 #define FS_HAS_SUBTYPE		4
    395 #define FS_USERNS_MOUNT		8	/* Can be mounted by userns root */
    396 #define FS_USERNS_DEV_MOUNT	16 /* A userns mount does not imply MNT_NODEV */
    397 #define FS_RENAME_DOES_D_MOVE	32768	/* FS will handle d_move() during rename() internally. */
    398 	struct dentry *(*mount) (struct file_system_type *, int,
    399 		       const char *, void *);
    400 	void (*kill_sb) (struct super_block *);
    401 	struct module *owner;
    402 	struct file_system_type * next;
    403 	struct hlist_head fs_supers;
    404 
    405 #ifndef __UBOOT__
    406 	struct lock_class_key s_lock_key;
    407 	struct lock_class_key s_umount_key;
    408 	struct lock_class_key s_vfs_rename_key;
    409 	struct lock_class_key s_writers_key[SB_FREEZE_LEVELS];
    410 
    411 	struct lock_class_key i_lock_key;
    412 	struct lock_class_key i_mutex_key;
    413 	struct lock_class_key i_mutex_dir_key;
    414 #endif
    415 };
    416 
    417 /* include/linux/mount.h */
    418 struct vfsmount {
    419 	struct dentry *mnt_root;	/* root of the mounted tree */
    420 	struct super_block *mnt_sb;	/* pointer to superblock */
    421 	int mnt_flags;
    422 };
    423 
    424 struct path {
    425 	struct vfsmount *mnt;
    426 	struct dentry *dentry;
    427 };
    428 
    429 struct file {
    430 	struct path		f_path;
    431 #define f_dentry	f_path.dentry
    432 #define f_vfsmnt	f_path.mnt
    433 	const struct file_operations	*f_op;
    434 	unsigned int 		f_flags;
    435 	loff_t			f_pos;
    436 	unsigned int		f_uid, f_gid;
    437 
    438 	u64			f_version;
    439 #ifdef CONFIG_SECURITY
    440 	void			*f_security;
    441 #endif
    442 	/* needed for tty driver, and maybe others */
    443 	void			*private_data;
    444 
    445 #ifdef CONFIG_EPOLL
    446 	/* Used by fs/eventpoll.c to link all the hooks to this file */
    447 	struct list_head	f_ep_links;
    448 	spinlock_t		f_ep_lock;
    449 #endif /* #ifdef CONFIG_EPOLL */
    450 #ifdef CONFIG_DEBUG_WRITECOUNT
    451 	unsigned long f_mnt_write_state;
    452 #endif
    453 };
    454 
    455 /*
    456  * get_seconds() not really needed in the read-only implmentation
    457  */
    458 #define get_seconds()		0
    459 
    460 /* 4k page size */
    461 #define PAGE_CACHE_SHIFT	12
    462 #define PAGE_CACHE_SIZE		(1 << PAGE_CACHE_SHIFT)
    463 
    464 /* Page cache limit. The filesystems should put that into their s_maxbytes
    465    limits, otherwise bad things can happen in VM. */
    466 #if BITS_PER_LONG==32
    467 #define MAX_LFS_FILESIZE	(((u64)PAGE_CACHE_SIZE << (BITS_PER_LONG-1))-1)
    468 #elif BITS_PER_LONG==64
    469 #define MAX_LFS_FILESIZE 	0x7fffffffffffffffUL
    470 #endif
    471 
    472 /*
    473  * These are the fs-independent mount-flags: up to 32 flags are supported
    474  */
    475 #define MS_RDONLY	 1	/* Mount read-only */
    476 #define MS_NOSUID	 2	/* Ignore suid and sgid bits */
    477 #define MS_NODEV	 4	/* Disallow access to device special files */
    478 #define MS_NOEXEC	 8	/* Disallow program execution */
    479 #define MS_SYNCHRONOUS	16	/* Writes are synced at once */
    480 #define MS_REMOUNT	32	/* Alter flags of a mounted FS */
    481 #define MS_MANDLOCK	64	/* Allow mandatory locks on an FS */
    482 #define MS_DIRSYNC	128	/* Directory modifications are synchronous */
    483 #define MS_NOATIME	1024	/* Do not update access times. */
    484 #define MS_NODIRATIME	2048	/* Do not update directory access times */
    485 #define MS_BIND		4096
    486 #define MS_MOVE		8192
    487 #define MS_REC		16384
    488 #define MS_VERBOSE	32768	/* War is peace. Verbosity is silence.
    489 				   MS_VERBOSE is deprecated. */
    490 #define MS_SILENT	32768
    491 #define MS_POSIXACL	(1<<16)	/* VFS does not apply the umask */
    492 #define MS_UNBINDABLE	(1<<17)	/* change to unbindable */
    493 #define MS_PRIVATE	(1<<18)	/* change to private */
    494 #define MS_SLAVE	(1<<19)	/* change to slave */
    495 #define MS_SHARED	(1<<20)	/* change to shared */
    496 #define MS_RELATIME	(1<<21)	/* Update atime relative to mtime/ctime. */
    497 #define MS_KERNMOUNT	(1<<22) /* this is a kern_mount call */
    498 #define MS_I_VERSION	(1<<23) /* Update inode I_version field */
    499 #define MS_ACTIVE	(1<<30)
    500 #define MS_NOUSER	(1<<31)
    501 
    502 #define I_NEW			8
    503 
    504 /* Inode flags - they have nothing to superblock flags now */
    505 
    506 #define S_SYNC		1	/* Writes are synced at once */
    507 #define S_NOATIME	2	/* Do not update access times */
    508 #define S_APPEND	4	/* Append-only file */
    509 #define S_IMMUTABLE	8	/* Immutable file */
    510 #define S_DEAD		16	/* removed, but still open directory */
    511 #define S_NOQUOTA	32	/* Inode is not counted to quota */
    512 #define S_DIRSYNC	64	/* Directory modifications are synchronous */
    513 #define S_NOCMTIME	128	/* Do not update file c/mtime */
    514 #define S_SWAPFILE	256	/* Do not truncate: swapon got its bmaps */
    515 #define S_PRIVATE	512	/* Inode is fs-internal */
    516 
    517 /* include/linux/stat.h */
    518 
    519 #define S_IFMT  00170000
    520 #define S_IFSOCK 0140000
    521 #define S_IFLNK	 0120000
    522 #define S_IFREG  0100000
    523 #define S_IFBLK  0060000
    524 #define S_IFDIR  0040000
    525 #define S_IFCHR  0020000
    526 #define S_IFIFO  0010000
    527 #define S_ISUID  0004000
    528 #define S_ISGID  0002000
    529 #define S_ISVTX  0001000
    530 
    531 /* include/linux/fs.h */
    532 
    533 /*
    534  * File types
    535  *
    536  * NOTE! These match bits 12..15 of stat.st_mode
    537  * (ie "(i_mode >> 12) & 15").
    538  */
    539 #define DT_UNKNOWN	0
    540 #define DT_FIFO		1
    541 #define DT_CHR		2
    542 #define DT_DIR		4
    543 #define DT_BLK		6
    544 #define DT_REG		8
    545 #define DT_LNK		10
    546 #define DT_SOCK		12
    547 #define DT_WHT		14
    548 
    549 #define I_DIRTY_SYNC		1
    550 #define I_DIRTY_DATASYNC	2
    551 #define I_DIRTY_PAGES		4
    552 #define I_NEW			8
    553 #define I_WILL_FREE		16
    554 #define I_FREEING		32
    555 #define I_CLEAR			64
    556 #define __I_LOCK		7
    557 #define I_LOCK			(1 << __I_LOCK)
    558 #define __I_SYNC		8
    559 #define I_SYNC			(1 << __I_SYNC)
    560 
    561 #define I_DIRTY (I_DIRTY_SYNC | I_DIRTY_DATASYNC | I_DIRTY_PAGES)
    562 
    563 /* linux/include/dcache.h */
    564 
    565 #define DNAME_INLINE_LEN_MIN 36
    566 
    567 struct dentry {
    568 	unsigned int d_flags;		/* protected by d_lock */
    569 	spinlock_t d_lock;		/* per dentry lock */
    570 	struct inode *d_inode;		/* Where the name belongs to - NULL is
    571 					 * negative */
    572 	/*
    573 	 * The next three fields are touched by __d_lookup.  Place them here
    574 	 * so they all fit in a cache line.
    575 	 */
    576 	struct hlist_node d_hash;	/* lookup hash list */
    577 	struct dentry *d_parent;	/* parent directory */
    578 	struct qstr d_name;
    579 
    580 	struct list_head d_lru;		/* LRU list */
    581 	/*
    582 	 * d_child and d_rcu can share memory
    583 	 */
    584 	struct list_head d_subdirs;	/* our children */
    585 	struct list_head d_alias;	/* inode alias list */
    586 	unsigned long d_time;		/* used by d_revalidate */
    587 	struct super_block *d_sb;	/* The root of the dentry tree */
    588 	void *d_fsdata;			/* fs-specific data */
    589 #ifdef CONFIG_PROFILING
    590 	struct dcookie_struct *d_cookie; /* cookie, if any */
    591 #endif
    592 	int d_mounted;
    593 	unsigned char d_iname[DNAME_INLINE_LEN_MIN];	/* small names */
    594 };
    595 
    596 static inline ino_t parent_ino(struct dentry *dentry)
    597 {
    598 	ino_t res;
    599 
    600 	spin_lock(&dentry->d_lock);
    601 	res = dentry->d_parent->d_inode->i_ino;
    602 	spin_unlock(&dentry->d_lock);
    603 	return res;
    604 }
    605 
    606 /* debug.c */
    607 
    608 #define module_param_named(...)
    609 
    610 /* misc.h */
    611 #define mutex_lock_nested(...)
    612 #define mutex_unlock_nested(...)
    613 #define mutex_is_locked(...)	1
    614 #endif
    615 
    616 /* Version of this UBIFS implementation */
    617 #define UBIFS_VERSION 1
    618 
    619 /* Normal UBIFS messages */
    620 #ifdef CONFIG_UBIFS_SILENCE_MSG
    621 #define ubifs_msg(c, fmt, ...)
    622 #else
    623 #define ubifs_msg(c, fmt, ...)                                      \
    624 	pr_notice("UBIFS (ubi%d:%d): " fmt "\n",                    \
    625 		  (c)->vi.ubi_num, (c)->vi.vol_id, ##__VA_ARGS__)
    626 #endif
    627 /* UBIFS error messages */
    628 #ifndef __UBOOT__
    629 #define ubifs_err(c, fmt, ...)                                      \
    630 	pr_err("UBIFS error (ubi%d:%d pid %d): %s: " fmt "\n",      \
    631 	       (c)->vi.ubi_num, (c)->vi.vol_id, current->pid,       \
    632 	       __func__, ##__VA_ARGS__)
    633 /* UBIFS warning messages */
    634 #define ubifs_warn(c, fmt, ...)                                     \
    635 	pr_warn("UBIFS warning (ubi%d:%d pid %d): %s: " fmt "\n",   \
    636 		(c)->vi.ubi_num, (c)->vi.vol_id, current->pid,      \
    637 		__func__, ##__VA_ARGS__)
    638 #else
    639 #define ubifs_err(c, fmt, ...)                                      \
    640 	pr_err("UBIFS error (ubi%d:%d pid %d): %s: " fmt "\n",      \
    641 	       (c)->vi.ubi_num, (c)->vi.vol_id, 0,                  \
    642 	       __func__, ##__VA_ARGS__)
    643 /* UBIFS warning messages */
    644 #define ubifs_warn(c, fmt, ...)                                     \
    645 	pr_warn("UBIFS warning (ubi%d:%d pid %d): %s: " fmt "\n",   \
    646 		(c)->vi.ubi_num, (c)->vi.vol_id, 0,                 \
    647 		__func__, ##__VA_ARGS__)
    648 
    649 #endif
    650 
    651 /*
    652  * A variant of 'ubifs_err()' which takes the UBIFS file-sytem description
    653  * object as an argument.
    654  */
    655 #define ubifs_errc(c, fmt, ...)                                     \
    656 	do {                                                        \
    657 		if (!(c)->probing)                                  \
    658 			ubifs_err(c, fmt, ##__VA_ARGS__);           \
    659 	} while (0)
    660 
    661 /* UBIFS file system VFS magic number */
    662 #define UBIFS_SUPER_MAGIC 0x24051905
    663 
    664 /* Number of UBIFS blocks per VFS page */
    665 #define UBIFS_BLOCKS_PER_PAGE (PAGE_CACHE_SIZE / UBIFS_BLOCK_SIZE)
    666 #define UBIFS_BLOCKS_PER_PAGE_SHIFT (PAGE_CACHE_SHIFT - UBIFS_BLOCK_SHIFT)
    667 
    668 /* "File system end of life" sequence number watermark */
    669 #define SQNUM_WARN_WATERMARK 0xFFFFFFFF00000000ULL
    670 #define SQNUM_WATERMARK      0xFFFFFFFFFF000000ULL
    671 
    672 /*
    673  * Minimum amount of LEBs reserved for the index. At present the index needs at
    674  * least 2 LEBs: one for the index head and one for in-the-gaps method (which
    675  * currently does not cater for the index head and so excludes it from
    676  * consideration).
    677  */
    678 #define MIN_INDEX_LEBS 2
    679 
    680 /* Minimum amount of data UBIFS writes to the flash */
    681 #define MIN_WRITE_SZ (UBIFS_DATA_NODE_SZ + 8)
    682 
    683 /*
    684  * Currently we do not support inode number overlapping and re-using, so this
    685  * watermark defines dangerous inode number level. This should be fixed later,
    686  * although it is difficult to exceed current limit. Another option is to use
    687  * 64-bit inode numbers, but this means more overhead.
    688  */
    689 #define INUM_WARN_WATERMARK 0xFFF00000
    690 #define INUM_WATERMARK      0xFFFFFF00
    691 
    692 /* Maximum number of entries in each LPT (LEB category) heap */
    693 #define LPT_HEAP_SZ 256
    694 
    695 /*
    696  * Background thread name pattern. The numbers are UBI device and volume
    697  * numbers.
    698  */
    699 #define BGT_NAME_PATTERN "ubifs_bgt%d_%d"
    700 
    701 /* Write-buffer synchronization timeout interval in seconds */
    702 #define WBUF_TIMEOUT_SOFTLIMIT 3
    703 #define WBUF_TIMEOUT_HARDLIMIT 5
    704 
    705 /* Maximum possible inode number (only 32-bit inodes are supported now) */
    706 #define MAX_INUM 0xFFFFFFFF
    707 
    708 /* Number of non-data journal heads */
    709 #define NONDATA_JHEADS_CNT 2
    710 
    711 /* Shorter names for journal head numbers for internal usage */
    712 #define GCHD   UBIFS_GC_HEAD
    713 #define BASEHD UBIFS_BASE_HEAD
    714 #define DATAHD UBIFS_DATA_HEAD
    715 
    716 /* 'No change' value for 'ubifs_change_lp()' */
    717 #define LPROPS_NC 0x80000001
    718 
    719 /*
    720  * There is no notion of truncation key because truncation nodes do not exist
    721  * in TNC. However, when replaying, it is handy to introduce fake "truncation"
    722  * keys for truncation nodes because the code becomes simpler. So we define
    723  * %UBIFS_TRUN_KEY type.
    724  *
    725  * But otherwise, out of the journal reply scope, the truncation keys are
    726  * invalid.
    727  */
    728 #define UBIFS_TRUN_KEY    UBIFS_KEY_TYPES_CNT
    729 #define UBIFS_INVALID_KEY UBIFS_KEY_TYPES_CNT
    730 
    731 /*
    732  * How much a directory entry/extended attribute entry adds to the parent/host
    733  * inode.
    734  */
    735 #define CALC_DENT_SIZE(name_len) ALIGN(UBIFS_DENT_NODE_SZ + (name_len) + 1, 8)
    736 
    737 /* How much an extended attribute adds to the host inode */
    738 #define CALC_XATTR_BYTES(data_len) ALIGN(UBIFS_INO_NODE_SZ + (data_len) + 1, 8)
    739 
    740 /*
    741  * Znodes which were not touched for 'OLD_ZNODE_AGE' seconds are considered
    742  * "old", and znode which were touched last 'YOUNG_ZNODE_AGE' seconds ago are
    743  * considered "young". This is used by shrinker when selecting znode to trim
    744  * off.
    745  */
    746 #define OLD_ZNODE_AGE 20
    747 #define YOUNG_ZNODE_AGE 5
    748 
    749 /*
    750  * Some compressors, like LZO, may end up with more data then the input buffer.
    751  * So UBIFS always allocates larger output buffer, to be sure the compressor
    752  * will not corrupt memory in case of worst case compression.
    753  */
    754 #define WORST_COMPR_FACTOR 2
    755 
    756 /*
    757  * How much memory is needed for a buffer where we compress a data node.
    758  */
    759 #define COMPRESSED_DATA_NODE_BUF_SZ \
    760 	(UBIFS_DATA_NODE_SZ + UBIFS_BLOCK_SIZE * WORST_COMPR_FACTOR)
    761 
    762 /* Maximum expected tree height for use by bottom_up_buf */
    763 #define BOTTOM_UP_HEIGHT 64
    764 
    765 /* Maximum number of data nodes to bulk-read */
    766 #define UBIFS_MAX_BULK_READ 32
    767 
    768 /*
    769  * Lockdep classes for UBIFS inode @ui_mutex.
    770  */
    771 enum {
    772 	WB_MUTEX_1 = 0,
    773 	WB_MUTEX_2 = 1,
    774 	WB_MUTEX_3 = 2,
    775 };
    776 
    777 /*
    778  * Znode flags (actually, bit numbers which store the flags).
    779  *
    780  * DIRTY_ZNODE: znode is dirty
    781  * COW_ZNODE: znode is being committed and a new instance of this znode has to
    782  *            be created before changing this znode
    783  * OBSOLETE_ZNODE: znode is obsolete, which means it was deleted, but it is
    784  *                 still in the commit list and the ongoing commit operation
    785  *                 will commit it, and delete this znode after it is done
    786  */
    787 enum {
    788 	DIRTY_ZNODE    = 0,
    789 	COW_ZNODE      = 1,
    790 	OBSOLETE_ZNODE = 2,
    791 };
    792 
    793 /*
    794  * Commit states.
    795  *
    796  * COMMIT_RESTING: commit is not wanted
    797  * COMMIT_BACKGROUND: background commit has been requested
    798  * COMMIT_REQUIRED: commit is required
    799  * COMMIT_RUNNING_BACKGROUND: background commit is running
    800  * COMMIT_RUNNING_REQUIRED: commit is running and it is required
    801  * COMMIT_BROKEN: commit failed
    802  */
    803 enum {
    804 	COMMIT_RESTING = 0,
    805 	COMMIT_BACKGROUND,
    806 	COMMIT_REQUIRED,
    807 	COMMIT_RUNNING_BACKGROUND,
    808 	COMMIT_RUNNING_REQUIRED,
    809 	COMMIT_BROKEN,
    810 };
    811 
    812 /*
    813  * 'ubifs_scan_a_node()' return values.
    814  *
    815  * SCANNED_GARBAGE:  scanned garbage
    816  * SCANNED_EMPTY_SPACE: scanned empty space
    817  * SCANNED_A_NODE: scanned a valid node
    818  * SCANNED_A_CORRUPT_NODE: scanned a corrupted node
    819  * SCANNED_A_BAD_PAD_NODE: scanned a padding node with invalid pad length
    820  *
    821  * Greater than zero means: 'scanned that number of padding bytes'
    822  */
    823 enum {
    824 	SCANNED_GARBAGE        = 0,
    825 	SCANNED_EMPTY_SPACE    = -1,
    826 	SCANNED_A_NODE         = -2,
    827 	SCANNED_A_CORRUPT_NODE = -3,
    828 	SCANNED_A_BAD_PAD_NODE = -4,
    829 };
    830 
    831 /*
    832  * LPT cnode flag bits.
    833  *
    834  * DIRTY_CNODE: cnode is dirty
    835  * OBSOLETE_CNODE: cnode is being committed and has been copied (or deleted),
    836  *                 so it can (and must) be freed when the commit is finished
    837  * COW_CNODE: cnode is being committed and must be copied before writing
    838  */
    839 enum {
    840 	DIRTY_CNODE    = 0,
    841 	OBSOLETE_CNODE = 1,
    842 	COW_CNODE      = 2,
    843 };
    844 
    845 /*
    846  * Dirty flag bits (lpt_drty_flgs) for LPT special nodes.
    847  *
    848  * LTAB_DIRTY: ltab node is dirty
    849  * LSAVE_DIRTY: lsave node is dirty
    850  */
    851 enum {
    852 	LTAB_DIRTY  = 1,
    853 	LSAVE_DIRTY = 2,
    854 };
    855 
    856 /*
    857  * Return codes used by the garbage collector.
    858  * @LEB_FREED: the logical eraseblock was freed and is ready to use
    859  * @LEB_FREED_IDX: indexing LEB was freed and can be used only after the commit
    860  * @LEB_RETAINED: the logical eraseblock was freed and retained for GC purposes
    861  */
    862 enum {
    863 	LEB_FREED,
    864 	LEB_FREED_IDX,
    865 	LEB_RETAINED,
    866 };
    867 
    868 /**
    869  * struct ubifs_old_idx - index node obsoleted since last commit start.
    870  * @rb: rb-tree node
    871  * @lnum: LEB number of obsoleted index node
    872  * @offs: offset of obsoleted index node
    873  */
    874 struct ubifs_old_idx {
    875 	struct rb_node rb;
    876 	int lnum;
    877 	int offs;
    878 };
    879 
    880 /* The below union makes it easier to deal with keys */
    881 union ubifs_key {
    882 	uint8_t u8[UBIFS_SK_LEN];
    883 	uint32_t u32[UBIFS_SK_LEN/4];
    884 	uint64_t u64[UBIFS_SK_LEN/8];
    885 	__le32 j32[UBIFS_SK_LEN/4];
    886 };
    887 
    888 /**
    889  * struct ubifs_scan_node - UBIFS scanned node information.
    890  * @list: list of scanned nodes
    891  * @key: key of node scanned (if it has one)
    892  * @sqnum: sequence number
    893  * @type: type of node scanned
    894  * @offs: offset with LEB of node scanned
    895  * @len: length of node scanned
    896  * @node: raw node
    897  */
    898 struct ubifs_scan_node {
    899 	struct list_head list;
    900 	union ubifs_key key;
    901 	unsigned long long sqnum;
    902 	int type;
    903 	int offs;
    904 	int len;
    905 	void *node;
    906 };
    907 
    908 /**
    909  * struct ubifs_scan_leb - UBIFS scanned LEB information.
    910  * @lnum: logical eraseblock number
    911  * @nodes_cnt: number of nodes scanned
    912  * @nodes: list of struct ubifs_scan_node
    913  * @endpt: end point (and therefore the start of empty space)
    914  * @buf: buffer containing entire LEB scanned
    915  */
    916 struct ubifs_scan_leb {
    917 	int lnum;
    918 	int nodes_cnt;
    919 	struct list_head nodes;
    920 	int endpt;
    921 	void *buf;
    922 };
    923 
    924 /**
    925  * struct ubifs_gced_idx_leb - garbage-collected indexing LEB.
    926  * @list: list
    927  * @lnum: LEB number
    928  * @unmap: OK to unmap this LEB
    929  *
    930  * This data structure is used to temporary store garbage-collected indexing
    931  * LEBs - they are not released immediately, but only after the next commit.
    932  * This is needed to guarantee recoverability.
    933  */
    934 struct ubifs_gced_idx_leb {
    935 	struct list_head list;
    936 	int lnum;
    937 	int unmap;
    938 };
    939 
    940 /**
    941  * struct ubifs_inode - UBIFS in-memory inode description.
    942  * @vfs_inode: VFS inode description object
    943  * @creat_sqnum: sequence number at time of creation
    944  * @del_cmtno: commit number corresponding to the time the inode was deleted,
    945  *             protected by @c->commit_sem;
    946  * @xattr_size: summarized size of all extended attributes in bytes
    947  * @xattr_cnt: count of extended attributes this inode has
    948  * @xattr_names: sum of lengths of all extended attribute names belonging to
    949  *               this inode
    950  * @dirty: non-zero if the inode is dirty
    951  * @xattr: non-zero if this is an extended attribute inode
    952  * @bulk_read: non-zero if bulk-read should be used
    953  * @ui_mutex: serializes inode write-back with the rest of VFS operations,
    954  *            serializes "clean <-> dirty" state changes, serializes bulk-read,
    955  *            protects @dirty, @bulk_read, @ui_size, and @xattr_size
    956  * @ui_lock: protects @synced_i_size
    957  * @synced_i_size: synchronized size of inode, i.e. the value of inode size
    958  *                 currently stored on the flash; used only for regular file
    959  *                 inodes
    960  * @ui_size: inode size used by UBIFS when writing to flash
    961  * @flags: inode flags (@UBIFS_COMPR_FL, etc)
    962  * @compr_type: default compression type used for this inode
    963  * @last_page_read: page number of last page read (for bulk read)
    964  * @read_in_a_row: number of consecutive pages read in a row (for bulk read)
    965  * @data_len: length of the data attached to the inode
    966  * @data: inode's data
    967  *
    968  * @ui_mutex exists for two main reasons. At first it prevents inodes from
    969  * being written back while UBIFS changing them, being in the middle of an VFS
    970  * operation. This way UBIFS makes sure the inode fields are consistent. For
    971  * example, in 'ubifs_rename()' we change 3 inodes simultaneously, and
    972  * write-back must not write any of them before we have finished.
    973  *
    974  * The second reason is budgeting - UBIFS has to budget all operations. If an
    975  * operation is going to mark an inode dirty, it has to allocate budget for
    976  * this. It cannot just mark it dirty because there is no guarantee there will
    977  * be enough flash space to write the inode back later. This means UBIFS has
    978  * to have full control over inode "clean <-> dirty" transitions (and pages
    979  * actually). But unfortunately, VFS marks inodes dirty in many places, and it
    980  * does not ask the file-system if it is allowed to do so (there is a notifier,
    981  * but it is not enough), i.e., there is no mechanism to synchronize with this.
    982  * So UBIFS has its own inode dirty flag and its own mutex to serialize
    983  * "clean <-> dirty" transitions.
    984  *
    985  * The @synced_i_size field is used to make sure we never write pages which are
    986  * beyond last synchronized inode size. See 'ubifs_writepage()' for more
    987  * information.
    988  *
    989  * The @ui_size is a "shadow" variable for @inode->i_size and UBIFS uses
    990  * @ui_size instead of @inode->i_size. The reason for this is that UBIFS cannot
    991  * make sure @inode->i_size is always changed under @ui_mutex, because it
    992  * cannot call 'truncate_setsize()' with @ui_mutex locked, because it would
    993  * deadlock with 'ubifs_writepage()' (see file.c). All the other inode fields
    994  * are changed under @ui_mutex, so they do not need "shadow" fields. Note, one
    995  * could consider to rework locking and base it on "shadow" fields.
    996  */
    997 struct ubifs_inode {
    998 	struct inode vfs_inode;
    999 	unsigned long long creat_sqnum;
   1000 	unsigned long long del_cmtno;
   1001 	unsigned int xattr_size;
   1002 	unsigned int xattr_cnt;
   1003 	unsigned int xattr_names;
   1004 	unsigned int dirty:1;
   1005 	unsigned int xattr:1;
   1006 	unsigned int bulk_read:1;
   1007 	unsigned int compr_type:2;
   1008 	struct mutex ui_mutex;
   1009 	spinlock_t ui_lock;
   1010 	loff_t synced_i_size;
   1011 	loff_t ui_size;
   1012 	int flags;
   1013 	pgoff_t last_page_read;
   1014 	pgoff_t read_in_a_row;
   1015 	int data_len;
   1016 	void *data;
   1017 };
   1018 
   1019 /**
   1020  * struct ubifs_unclean_leb - records a LEB recovered under read-only mode.
   1021  * @list: list
   1022  * @lnum: LEB number of recovered LEB
   1023  * @endpt: offset where recovery ended
   1024  *
   1025  * This structure records a LEB identified during recovery that needs to be
   1026  * cleaned but was not because UBIFS was mounted read-only. The information
   1027  * is used to clean the LEB when remounting to read-write mode.
   1028  */
   1029 struct ubifs_unclean_leb {
   1030 	struct list_head list;
   1031 	int lnum;
   1032 	int endpt;
   1033 };
   1034 
   1035 /*
   1036  * LEB properties flags.
   1037  *
   1038  * LPROPS_UNCAT: not categorized
   1039  * LPROPS_DIRTY: dirty > free, dirty >= @c->dead_wm, not index
   1040  * LPROPS_DIRTY_IDX: dirty + free > @c->min_idx_node_sze and index
   1041  * LPROPS_FREE: free > 0, dirty < @c->dead_wm, not empty, not index
   1042  * LPROPS_HEAP_CNT: number of heaps used for storing categorized LEBs
   1043  * LPROPS_EMPTY: LEB is empty, not taken
   1044  * LPROPS_FREEABLE: free + dirty == leb_size, not index, not taken
   1045  * LPROPS_FRDI_IDX: free + dirty == leb_size and index, may be taken
   1046  * LPROPS_CAT_MASK: mask for the LEB categories above
   1047  * LPROPS_TAKEN: LEB was taken (this flag is not saved on the media)
   1048  * LPROPS_INDEX: LEB contains indexing nodes (this flag also exists on flash)
   1049  */
   1050 enum {
   1051 	LPROPS_UNCAT     =  0,
   1052 	LPROPS_DIRTY     =  1,
   1053 	LPROPS_DIRTY_IDX =  2,
   1054 	LPROPS_FREE      =  3,
   1055 	LPROPS_HEAP_CNT  =  3,
   1056 	LPROPS_EMPTY     =  4,
   1057 	LPROPS_FREEABLE  =  5,
   1058 	LPROPS_FRDI_IDX  =  6,
   1059 	LPROPS_CAT_MASK  = 15,
   1060 	LPROPS_TAKEN     = 16,
   1061 	LPROPS_INDEX     = 32,
   1062 };
   1063 
   1064 /**
   1065  * struct ubifs_lprops - logical eraseblock properties.
   1066  * @free: amount of free space in bytes
   1067  * @dirty: amount of dirty space in bytes
   1068  * @flags: LEB properties flags (see above)
   1069  * @lnum: LEB number
   1070  * @list: list of same-category lprops (for LPROPS_EMPTY and LPROPS_FREEABLE)
   1071  * @hpos: heap position in heap of same-category lprops (other categories)
   1072  */
   1073 struct ubifs_lprops {
   1074 	int free;
   1075 	int dirty;
   1076 	int flags;
   1077 	int lnum;
   1078 	union {
   1079 		struct list_head list;
   1080 		int hpos;
   1081 	};
   1082 };
   1083 
   1084 /**
   1085  * struct ubifs_lpt_lprops - LPT logical eraseblock properties.
   1086  * @free: amount of free space in bytes
   1087  * @dirty: amount of dirty space in bytes
   1088  * @tgc: trivial GC flag (1 => unmap after commit end)
   1089  * @cmt: commit flag (1 => reserved for commit)
   1090  */
   1091 struct ubifs_lpt_lprops {
   1092 	int free;
   1093 	int dirty;
   1094 	unsigned tgc:1;
   1095 	unsigned cmt:1;
   1096 };
   1097 
   1098 /**
   1099  * struct ubifs_lp_stats - statistics of eraseblocks in the main area.
   1100  * @empty_lebs: number of empty LEBs
   1101  * @taken_empty_lebs: number of taken LEBs
   1102  * @idx_lebs: number of indexing LEBs
   1103  * @total_free: total free space in bytes (includes all LEBs)
   1104  * @total_dirty: total dirty space in bytes (includes all LEBs)
   1105  * @total_used: total used space in bytes (does not include index LEBs)
   1106  * @total_dead: total dead space in bytes (does not include index LEBs)
   1107  * @total_dark: total dark space in bytes (does not include index LEBs)
   1108  *
   1109  * The @taken_empty_lebs field counts the LEBs that are in the transient state
   1110  * of having been "taken" for use but not yet written to. @taken_empty_lebs is
   1111  * needed to account correctly for @gc_lnum, otherwise @empty_lebs could be
   1112  * used by itself (in which case 'unused_lebs' would be a better name). In the
   1113  * case of @gc_lnum, it is "taken" at mount time or whenever a LEB is retained
   1114  * by GC, but unlike other empty LEBs that are "taken", it may not be written
   1115  * straight away (i.e. before the next commit start or unmount), so either
   1116  * @gc_lnum must be specially accounted for, or the current approach followed
   1117  * i.e. count it under @taken_empty_lebs.
   1118  *
   1119  * @empty_lebs includes @taken_empty_lebs.
   1120  *
   1121  * @total_used, @total_dead and @total_dark fields do not account indexing
   1122  * LEBs.
   1123  */
   1124 struct ubifs_lp_stats {
   1125 	int empty_lebs;
   1126 	int taken_empty_lebs;
   1127 	int idx_lebs;
   1128 	long long total_free;
   1129 	long long total_dirty;
   1130 	long long total_used;
   1131 	long long total_dead;
   1132 	long long total_dark;
   1133 };
   1134 
   1135 struct ubifs_nnode;
   1136 
   1137 /**
   1138  * struct ubifs_cnode - LEB Properties Tree common node.
   1139  * @parent: parent nnode
   1140  * @cnext: next cnode to commit
   1141  * @flags: flags (%DIRTY_LPT_NODE or %OBSOLETE_LPT_NODE)
   1142  * @iip: index in parent
   1143  * @level: level in the tree (zero for pnodes, greater than zero for nnodes)
   1144  * @num: node number
   1145  */
   1146 struct ubifs_cnode {
   1147 	struct ubifs_nnode *parent;
   1148 	struct ubifs_cnode *cnext;
   1149 	unsigned long flags;
   1150 	int iip;
   1151 	int level;
   1152 	int num;
   1153 };
   1154 
   1155 /**
   1156  * struct ubifs_pnode - LEB Properties Tree leaf node.
   1157  * @parent: parent nnode
   1158  * @cnext: next cnode to commit
   1159  * @flags: flags (%DIRTY_LPT_NODE or %OBSOLETE_LPT_NODE)
   1160  * @iip: index in parent
   1161  * @level: level in the tree (always zero for pnodes)
   1162  * @num: node number
   1163  * @lprops: LEB properties array
   1164  */
   1165 struct ubifs_pnode {
   1166 	struct ubifs_nnode *parent;
   1167 	struct ubifs_cnode *cnext;
   1168 	unsigned long flags;
   1169 	int iip;
   1170 	int level;
   1171 	int num;
   1172 	struct ubifs_lprops lprops[UBIFS_LPT_FANOUT];
   1173 };
   1174 
   1175 /**
   1176  * struct ubifs_nbranch - LEB Properties Tree internal node branch.
   1177  * @lnum: LEB number of child
   1178  * @offs: offset of child
   1179  * @nnode: nnode child
   1180  * @pnode: pnode child
   1181  * @cnode: cnode child
   1182  */
   1183 struct ubifs_nbranch {
   1184 	int lnum;
   1185 	int offs;
   1186 	union {
   1187 		struct ubifs_nnode *nnode;
   1188 		struct ubifs_pnode *pnode;
   1189 		struct ubifs_cnode *cnode;
   1190 	};
   1191 };
   1192 
   1193 /**
   1194  * struct ubifs_nnode - LEB Properties Tree internal node.
   1195  * @parent: parent nnode
   1196  * @cnext: next cnode to commit
   1197  * @flags: flags (%DIRTY_LPT_NODE or %OBSOLETE_LPT_NODE)
   1198  * @iip: index in parent
   1199  * @level: level in the tree (always greater than zero for nnodes)
   1200  * @num: node number
   1201  * @nbranch: branches to child nodes
   1202  */
   1203 struct ubifs_nnode {
   1204 	struct ubifs_nnode *parent;
   1205 	struct ubifs_cnode *cnext;
   1206 	unsigned long flags;
   1207 	int iip;
   1208 	int level;
   1209 	int num;
   1210 	struct ubifs_nbranch nbranch[UBIFS_LPT_FANOUT];
   1211 };
   1212 
   1213 /**
   1214  * struct ubifs_lpt_heap - heap of categorized lprops.
   1215  * @arr: heap array
   1216  * @cnt: number in heap
   1217  * @max_cnt: maximum number allowed in heap
   1218  *
   1219  * There are %LPROPS_HEAP_CNT heaps.
   1220  */
   1221 struct ubifs_lpt_heap {
   1222 	struct ubifs_lprops **arr;
   1223 	int cnt;
   1224 	int max_cnt;
   1225 };
   1226 
   1227 /*
   1228  * Return codes for LPT scan callback function.
   1229  *
   1230  * LPT_SCAN_CONTINUE: continue scanning
   1231  * LPT_SCAN_ADD: add the LEB properties scanned to the tree in memory
   1232  * LPT_SCAN_STOP: stop scanning
   1233  */
   1234 enum {
   1235 	LPT_SCAN_CONTINUE = 0,
   1236 	LPT_SCAN_ADD = 1,
   1237 	LPT_SCAN_STOP = 2,
   1238 };
   1239 
   1240 struct ubifs_info;
   1241 
   1242 /* Callback used by the 'ubifs_lpt_scan_nolock()' function */
   1243 typedef int (*ubifs_lpt_scan_callback)(struct ubifs_info *c,
   1244 				       const struct ubifs_lprops *lprops,
   1245 				       int in_tree, void *data);
   1246 
   1247 /**
   1248  * struct ubifs_wbuf - UBIFS write-buffer.
   1249  * @c: UBIFS file-system description object
   1250  * @buf: write-buffer (of min. flash I/O unit size)
   1251  * @lnum: logical eraseblock number the write-buffer points to
   1252  * @offs: write-buffer offset in this logical eraseblock
   1253  * @avail: number of bytes available in the write-buffer
   1254  * @used:  number of used bytes in the write-buffer
   1255  * @size: write-buffer size (in [@c->min_io_size, @c->max_write_size] range)
   1256  * @jhead: journal head the mutex belongs to (note, needed only to shut lockdep
   1257  *         up by 'mutex_lock_nested()).
   1258  * @sync_callback: write-buffer synchronization callback
   1259  * @io_mutex: serializes write-buffer I/O
   1260  * @lock: serializes @buf, @lnum, @offs, @avail, @used, @next_ino and @inodes
   1261  *        fields
   1262  * @softlimit: soft write-buffer timeout interval
   1263  * @delta: hard and soft timeouts delta (the timer expire interval is @softlimit
   1264  *         and @softlimit + @delta)
   1265  * @timer: write-buffer timer
   1266  * @no_timer: non-zero if this write-buffer does not have a timer
   1267  * @need_sync: non-zero if the timer expired and the wbuf needs sync'ing
   1268  * @next_ino: points to the next position of the following inode number
   1269  * @inodes: stores the inode numbers of the nodes which are in wbuf
   1270  *
   1271  * The write-buffer synchronization callback is called when the write-buffer is
   1272  * synchronized in order to notify how much space was wasted due to
   1273  * write-buffer padding and how much free space is left in the LEB.
   1274  *
   1275  * Note: the fields @buf, @lnum, @offs, @avail and @used can be read under
   1276  * spin-lock or mutex because they are written under both mutex and spin-lock.
   1277  * @buf is appended to under mutex but overwritten under both mutex and
   1278  * spin-lock. Thus the data between @buf and @buf + @used can be read under
   1279  * spinlock.
   1280  */
   1281 struct ubifs_wbuf {
   1282 	struct ubifs_info *c;
   1283 	void *buf;
   1284 	int lnum;
   1285 	int offs;
   1286 	int avail;
   1287 	int used;
   1288 	int size;
   1289 	int jhead;
   1290 	int (*sync_callback)(struct ubifs_info *c, int lnum, int free, int pad);
   1291 	struct mutex io_mutex;
   1292 	spinlock_t lock;
   1293 //	ktime_t softlimit;
   1294 //	unsigned long long delta;
   1295 //	struct hrtimer timer;
   1296 	unsigned int no_timer:1;
   1297 	unsigned int need_sync:1;
   1298 	int next_ino;
   1299 	ino_t *inodes;
   1300 };
   1301 
   1302 /**
   1303  * struct ubifs_bud - bud logical eraseblock.
   1304  * @lnum: logical eraseblock number
   1305  * @start: where the (uncommitted) bud data starts
   1306  * @jhead: journal head number this bud belongs to
   1307  * @list: link in the list buds belonging to the same journal head
   1308  * @rb: link in the tree of all buds
   1309  */
   1310 struct ubifs_bud {
   1311 	int lnum;
   1312 	int start;
   1313 	int jhead;
   1314 	struct list_head list;
   1315 	struct rb_node rb;
   1316 };
   1317 
   1318 /**
   1319  * struct ubifs_jhead - journal head.
   1320  * @wbuf: head's write-buffer
   1321  * @buds_list: list of bud LEBs belonging to this journal head
   1322  * @grouped: non-zero if UBIFS groups nodes when writing to this journal head
   1323  *
   1324  * Note, the @buds list is protected by the @c->buds_lock.
   1325  */
   1326 struct ubifs_jhead {
   1327 	struct ubifs_wbuf wbuf;
   1328 	struct list_head buds_list;
   1329 	unsigned int grouped:1;
   1330 };
   1331 
   1332 /**
   1333  * struct ubifs_zbranch - key/coordinate/length branch stored in znodes.
   1334  * @key: key
   1335  * @znode: znode address in memory
   1336  * @lnum: LEB number of the target node (indexing node or data node)
   1337  * @offs: target node offset within @lnum
   1338  * @len: target node length
   1339  */
   1340 struct ubifs_zbranch {
   1341 	union ubifs_key key;
   1342 	union {
   1343 		struct ubifs_znode *znode;
   1344 		void *leaf;
   1345 	};
   1346 	int lnum;
   1347 	int offs;
   1348 	int len;
   1349 };
   1350 
   1351 /**
   1352  * struct ubifs_znode - in-memory representation of an indexing node.
   1353  * @parent: parent znode or NULL if it is the root
   1354  * @cnext: next znode to commit
   1355  * @flags: znode flags (%DIRTY_ZNODE, %COW_ZNODE or %OBSOLETE_ZNODE)
   1356  * @time: last access time (seconds)
   1357  * @level: level of the entry in the TNC tree
   1358  * @child_cnt: count of child znodes
   1359  * @iip: index in parent's zbranch array
   1360  * @alt: lower bound of key range has altered i.e. child inserted at slot 0
   1361  * @lnum: LEB number of the corresponding indexing node
   1362  * @offs: offset of the corresponding indexing node
   1363  * @len: length  of the corresponding indexing node
   1364  * @zbranch: array of znode branches (@c->fanout elements)
   1365  *
   1366  * Note! The @lnum, @offs, and @len fields are not really needed - we have them
   1367  * only for internal consistency check. They could be removed to save some RAM.
   1368  */
   1369 struct ubifs_znode {
   1370 	struct ubifs_znode *parent;
   1371 	struct ubifs_znode *cnext;
   1372 	unsigned long flags;
   1373 	unsigned long time;
   1374 	int level;
   1375 	int child_cnt;
   1376 	int iip;
   1377 	int alt;
   1378 	int lnum;
   1379 	int offs;
   1380 	int len;
   1381 	struct ubifs_zbranch zbranch[];
   1382 };
   1383 
   1384 /**
   1385  * struct bu_info - bulk-read information.
   1386  * @key: first data node key
   1387  * @zbranch: zbranches of data nodes to bulk read
   1388  * @buf: buffer to read into
   1389  * @buf_len: buffer length
   1390  * @gc_seq: GC sequence number to detect races with GC
   1391  * @cnt: number of data nodes for bulk read
   1392  * @blk_cnt: number of data blocks including holes
   1393  * @oef: end of file reached
   1394  */
   1395 struct bu_info {
   1396 	union ubifs_key key;
   1397 	struct ubifs_zbranch zbranch[UBIFS_MAX_BULK_READ];
   1398 	void *buf;
   1399 	int buf_len;
   1400 	int gc_seq;
   1401 	int cnt;
   1402 	int blk_cnt;
   1403 	int eof;
   1404 };
   1405 
   1406 /**
   1407  * struct ubifs_node_range - node length range description data structure.
   1408  * @len: fixed node length
   1409  * @min_len: minimum possible node length
   1410  * @max_len: maximum possible node length
   1411  *
   1412  * If @max_len is %0, the node has fixed length @len.
   1413  */
   1414 struct ubifs_node_range {
   1415 	union {
   1416 		int len;
   1417 		int min_len;
   1418 	};
   1419 	int max_len;
   1420 };
   1421 
   1422 /**
   1423  * struct ubifs_compressor - UBIFS compressor description structure.
   1424  * @compr_type: compressor type (%UBIFS_COMPR_LZO, etc)
   1425  * @cc: cryptoapi compressor handle
   1426  * @comp_mutex: mutex used during compression
   1427  * @decomp_mutex: mutex used during decompression
   1428  * @name: compressor name
   1429  * @capi_name: cryptoapi compressor name
   1430  */
   1431 struct ubifs_compressor {
   1432 	int compr_type;
   1433 	struct crypto_comp *cc;
   1434 	struct mutex *comp_mutex;
   1435 	struct mutex *decomp_mutex;
   1436 	const char *name;
   1437 	const char *capi_name;
   1438 #ifdef __UBOOT__
   1439 	int (*decompress)(const unsigned char *in, size_t in_len,
   1440 			  unsigned char *out, size_t *out_len);
   1441 #endif
   1442 };
   1443 
   1444 /**
   1445  * struct ubifs_budget_req - budget requirements of an operation.
   1446  *
   1447  * @fast: non-zero if the budgeting should try to acquire budget quickly and
   1448  *        should not try to call write-back
   1449  * @recalculate: non-zero if @idx_growth, @data_growth, and @dd_growth fields
   1450  *               have to be re-calculated
   1451  * @new_page: non-zero if the operation adds a new page
   1452  * @dirtied_page: non-zero if the operation makes a page dirty
   1453  * @new_dent: non-zero if the operation adds a new directory entry
   1454  * @mod_dent: non-zero if the operation removes or modifies an existing
   1455  *            directory entry
   1456  * @new_ino: non-zero if the operation adds a new inode
   1457  * @new_ino_d: now much data newly created inode contains
   1458  * @dirtied_ino: how many inodes the operation makes dirty
   1459  * @dirtied_ino_d: now much data dirtied inode contains
   1460  * @idx_growth: how much the index will supposedly grow
   1461  * @data_growth: how much new data the operation will supposedly add
   1462  * @dd_growth: how much data that makes other data dirty the operation will
   1463  *             supposedly add
   1464  *
   1465  * @idx_growth, @data_growth and @dd_growth are not used in budget request. The
   1466  * budgeting subsystem caches index and data growth values there to avoid
   1467  * re-calculating them when the budget is released. However, if @idx_growth is
   1468  * %-1, it is calculated by the release function using other fields.
   1469  *
   1470  * An inode may contain 4KiB of data at max., thus the widths of @new_ino_d
   1471  * is 13 bits, and @dirtied_ino_d - 15, because up to 4 inodes may be made
   1472  * dirty by the re-name operation.
   1473  *
   1474  * Note, UBIFS aligns node lengths to 8-bytes boundary, so the requester has to
   1475  * make sure the amount of inode data which contribute to @new_ino_d and
   1476  * @dirtied_ino_d fields are aligned.
   1477  */
   1478 struct ubifs_budget_req {
   1479 	unsigned int fast:1;
   1480 	unsigned int recalculate:1;
   1481 #ifndef UBIFS_DEBUG
   1482 	unsigned int new_page:1;
   1483 	unsigned int dirtied_page:1;
   1484 	unsigned int new_dent:1;
   1485 	unsigned int mod_dent:1;
   1486 	unsigned int new_ino:1;
   1487 	unsigned int new_ino_d:13;
   1488 	unsigned int dirtied_ino:4;
   1489 	unsigned int dirtied_ino_d:15;
   1490 #else
   1491 	/* Not bit-fields to check for overflows */
   1492 	unsigned int new_page;
   1493 	unsigned int dirtied_page;
   1494 	unsigned int new_dent;
   1495 	unsigned int mod_dent;
   1496 	unsigned int new_ino;
   1497 	unsigned int new_ino_d;
   1498 	unsigned int dirtied_ino;
   1499 	unsigned int dirtied_ino_d;
   1500 #endif
   1501 	int idx_growth;
   1502 	int data_growth;
   1503 	int dd_growth;
   1504 };
   1505 
   1506 /**
   1507  * struct ubifs_orphan - stores the inode number of an orphan.
   1508  * @rb: rb-tree node of rb-tree of orphans sorted by inode number
   1509  * @list: list head of list of orphans in order added
   1510  * @new_list: list head of list of orphans added since the last commit
   1511  * @cnext: next orphan to commit
   1512  * @dnext: next orphan to delete
   1513  * @inum: inode number
   1514  * @new: %1 => added since the last commit, otherwise %0
   1515  * @cmt: %1 => commit pending, otherwise %0
   1516  * @del: %1 => delete pending, otherwise %0
   1517  */
   1518 struct ubifs_orphan {
   1519 	struct rb_node rb;
   1520 	struct list_head list;
   1521 	struct list_head new_list;
   1522 	struct ubifs_orphan *cnext;
   1523 	struct ubifs_orphan *dnext;
   1524 	ino_t inum;
   1525 	unsigned new:1;
   1526 	unsigned cmt:1;
   1527 	unsigned del:1;
   1528 };
   1529 
   1530 /**
   1531  * struct ubifs_mount_opts - UBIFS-specific mount options information.
   1532  * @unmount_mode: selected unmount mode (%0 default, %1 normal, %2 fast)
   1533  * @bulk_read: enable/disable bulk-reads (%0 default, %1 disable, %2 enable)
   1534  * @chk_data_crc: enable/disable CRC data checking when reading data nodes
   1535  *                (%0 default, %1 disable, %2 enable)
   1536  * @override_compr: override default compressor (%0 - do not override and use
   1537  *                  superblock compressor, %1 - override and use compressor
   1538  *                  specified in @compr_type)
   1539  * @compr_type: compressor type to override the superblock compressor with
   1540  *              (%UBIFS_COMPR_NONE, etc)
   1541  */
   1542 struct ubifs_mount_opts {
   1543 	unsigned int unmount_mode:2;
   1544 	unsigned int bulk_read:2;
   1545 	unsigned int chk_data_crc:2;
   1546 	unsigned int override_compr:1;
   1547 	unsigned int compr_type:2;
   1548 };
   1549 
   1550 /**
   1551  * struct ubifs_budg_info - UBIFS budgeting information.
   1552  * @idx_growth: amount of bytes budgeted for index growth
   1553  * @data_growth: amount of bytes budgeted for cached data
   1554  * @dd_growth: amount of bytes budgeted for cached data that will make
   1555  *             other data dirty
   1556  * @uncommitted_idx: amount of bytes were budgeted for growth of the index, but
   1557  *                   which still have to be taken into account because the index
   1558  *                   has not been committed so far
   1559  * @old_idx_sz: size of index on flash
   1560  * @min_idx_lebs: minimum number of LEBs required for the index
   1561  * @nospace: non-zero if the file-system does not have flash space (used as
   1562  *           optimization)
   1563  * @nospace_rp: the same as @nospace, but additionally means that even reserved
   1564  *              pool is full
   1565  * @page_budget: budget for a page (constant, never changed after mount)
   1566  * @inode_budget: budget for an inode (constant, never changed after mount)
   1567  * @dent_budget: budget for a directory entry (constant, never changed after
   1568  *               mount)
   1569  */
   1570 struct ubifs_budg_info {
   1571 	long long idx_growth;
   1572 	long long data_growth;
   1573 	long long dd_growth;
   1574 	long long uncommitted_idx;
   1575 	unsigned long long old_idx_sz;
   1576 	int min_idx_lebs;
   1577 	unsigned int nospace:1;
   1578 	unsigned int nospace_rp:1;
   1579 	int page_budget;
   1580 	int inode_budget;
   1581 	int dent_budget;
   1582 };
   1583 
   1584 struct ubifs_debug_info;
   1585 
   1586 /**
   1587  * struct ubifs_info - UBIFS file-system description data structure
   1588  * (per-superblock).
   1589  * @vfs_sb: VFS @struct super_block object
   1590  * @bdi: backing device info object to make VFS happy and disable read-ahead
   1591  *
   1592  * @highest_inum: highest used inode number
   1593  * @max_sqnum: current global sequence number
   1594  * @cmt_no: commit number of the last successfully completed commit, protected
   1595  *          by @commit_sem
   1596  * @cnt_lock: protects @highest_inum and @max_sqnum counters
   1597  * @fmt_version: UBIFS on-flash format version
   1598  * @ro_compat_version: R/O compatibility version
   1599  * @uuid: UUID from super block
   1600  *
   1601  * @lhead_lnum: log head logical eraseblock number
   1602  * @lhead_offs: log head offset
   1603  * @ltail_lnum: log tail logical eraseblock number (offset is always 0)
   1604  * @log_mutex: protects the log, @lhead_lnum, @lhead_offs, @ltail_lnum, and
   1605  *             @bud_bytes
   1606  * @min_log_bytes: minimum required number of bytes in the log
   1607  * @cmt_bud_bytes: used during commit to temporarily amount of bytes in
   1608  *                 committed buds
   1609  *
   1610  * @buds: tree of all buds indexed by bud LEB number
   1611  * @bud_bytes: how many bytes of flash is used by buds
   1612  * @buds_lock: protects the @buds tree, @bud_bytes, and per-journal head bud
   1613  *             lists
   1614  * @jhead_cnt: count of journal heads
   1615  * @jheads: journal heads (head zero is base head)
   1616  * @max_bud_bytes: maximum number of bytes allowed in buds
   1617  * @bg_bud_bytes: number of bud bytes when background commit is initiated
   1618  * @old_buds: buds to be released after commit ends
   1619  * @max_bud_cnt: maximum number of buds
   1620  *
   1621  * @commit_sem: synchronizes committer with other processes
   1622  * @cmt_state: commit state
   1623  * @cs_lock: commit state lock
   1624  * @cmt_wq: wait queue to sleep on if the log is full and a commit is running
   1625  *
   1626  * @big_lpt: flag that LPT is too big to write whole during commit
   1627  * @space_fixup: flag indicating that free space in LEBs needs to be cleaned up
   1628  * @no_chk_data_crc: do not check CRCs when reading data nodes (except during
   1629  *                   recovery)
   1630  * @bulk_read: enable bulk-reads
   1631  * @default_compr: default compression algorithm (%UBIFS_COMPR_LZO, etc)
   1632  * @rw_incompat: the media is not R/W compatible
   1633  *
   1634  * @tnc_mutex: protects the Tree Node Cache (TNC), @zroot, @cnext, @enext, and
   1635  *             @calc_idx_sz
   1636  * @zroot: zbranch which points to the root index node and znode
   1637  * @cnext: next znode to commit
   1638  * @enext: next znode to commit to empty space
   1639  * @gap_lebs: array of LEBs used by the in-gaps commit method
   1640  * @cbuf: commit buffer
   1641  * @ileb_buf: buffer for commit in-the-gaps method
   1642  * @ileb_len: length of data in ileb_buf
   1643  * @ihead_lnum: LEB number of index head
   1644  * @ihead_offs: offset of index head
   1645  * @ilebs: pre-allocated index LEBs
   1646  * @ileb_cnt: number of pre-allocated index LEBs
   1647  * @ileb_nxt: next pre-allocated index LEBs
   1648  * @old_idx: tree of index nodes obsoleted since the last commit start
   1649  * @bottom_up_buf: a buffer which is used by 'dirty_cow_bottom_up()' in tnc.c
   1650  *
   1651  * @mst_node: master node
   1652  * @mst_offs: offset of valid master node
   1653  *
   1654  * @max_bu_buf_len: maximum bulk-read buffer length
   1655  * @bu_mutex: protects the pre-allocated bulk-read buffer and @c->bu
   1656  * @bu: pre-allocated bulk-read information
   1657  *
   1658  * @write_reserve_mutex: protects @write_reserve_buf
   1659  * @write_reserve_buf: on the write path we allocate memory, which might
   1660  *                     sometimes be unavailable, in which case we use this
   1661  *                     write reserve buffer
   1662  *
   1663  * @log_lebs: number of logical eraseblocks in the log
   1664  * @log_bytes: log size in bytes
   1665  * @log_last: last LEB of the log
   1666  * @lpt_lebs: number of LEBs used for lprops table
   1667  * @lpt_first: first LEB of the lprops table area
   1668  * @lpt_last: last LEB of the lprops table area
   1669  * @orph_lebs: number of LEBs used for the orphan area
   1670  * @orph_first: first LEB of the orphan area
   1671  * @orph_last: last LEB of the orphan area
   1672  * @main_lebs: count of LEBs in the main area
   1673  * @main_first: first LEB of the main area
   1674  * @main_bytes: main area size in bytes
   1675  *
   1676  * @key_hash_type: type of the key hash
   1677  * @key_hash: direntry key hash function
   1678  * @key_fmt: key format
   1679  * @key_len: key length
   1680  * @fanout: fanout of the index tree (number of links per indexing node)
   1681  *
   1682  * @min_io_size: minimal input/output unit size
   1683  * @min_io_shift: number of bits in @min_io_size minus one
   1684  * @max_write_size: maximum amount of bytes the underlying flash can write at a
   1685  *                  time (MTD write buffer size)
   1686  * @max_write_shift: number of bits in @max_write_size minus one
   1687  * @leb_size: logical eraseblock size in bytes
   1688  * @leb_start: starting offset of logical eraseblocks within physical
   1689  *             eraseblocks
   1690  * @half_leb_size: half LEB size
   1691  * @idx_leb_size: how many bytes of an LEB are effectively available when it is
   1692  *                used to store indexing nodes (@leb_size - @max_idx_node_sz)
   1693  * @leb_cnt: count of logical eraseblocks
   1694  * @max_leb_cnt: maximum count of logical eraseblocks
   1695  * @old_leb_cnt: count of logical eraseblocks before re-size
   1696  * @ro_media: the underlying UBI volume is read-only
   1697  * @ro_mount: the file-system was mounted as read-only
   1698  * @ro_error: UBIFS switched to R/O mode because an error happened
   1699  *
   1700  * @dirty_pg_cnt: number of dirty pages (not used)
   1701  * @dirty_zn_cnt: number of dirty znodes
   1702  * @clean_zn_cnt: number of clean znodes
   1703  *
   1704  * @space_lock: protects @bi and @lst
   1705  * @lst: lprops statistics
   1706  * @bi: budgeting information
   1707  * @calc_idx_sz: temporary variable which is used to calculate new index size
   1708  *               (contains accurate new index size at end of TNC commit start)
   1709  *
   1710  * @ref_node_alsz: size of the LEB reference node aligned to the min. flash
   1711  *                 I/O unit
   1712  * @mst_node_alsz: master node aligned size
   1713  * @min_idx_node_sz: minimum indexing node aligned on 8-bytes boundary
   1714  * @max_idx_node_sz: maximum indexing node aligned on 8-bytes boundary
   1715  * @max_inode_sz: maximum possible inode size in bytes
   1716  * @max_znode_sz: size of znode in bytes
   1717  *
   1718  * @leb_overhead: how many bytes are wasted in an LEB when it is filled with
   1719  *                data nodes of maximum size - used in free space reporting
   1720  * @dead_wm: LEB dead space watermark
   1721  * @dark_wm: LEB dark space watermark
   1722  * @block_cnt: count of 4KiB blocks on the FS
   1723  *
   1724  * @ranges: UBIFS node length ranges
   1725  * @ubi: UBI volume descriptor
   1726  * @di: UBI device information
   1727  * @vi: UBI volume information
   1728  *
   1729  * @orph_tree: rb-tree of orphan inode numbers
   1730  * @orph_list: list of orphan inode numbers in order added
   1731  * @orph_new: list of orphan inode numbers added since last commit
   1732  * @orph_cnext: next orphan to commit
   1733  * @orph_dnext: next orphan to delete
   1734  * @orphan_lock: lock for orph_tree and orph_new
   1735  * @orph_buf: buffer for orphan nodes
   1736  * @new_orphans: number of orphans since last commit
   1737  * @cmt_orphans: number of orphans being committed
   1738  * @tot_orphans: number of orphans in the rb_tree
   1739  * @max_orphans: maximum number of orphans allowed
   1740  * @ohead_lnum: orphan head LEB number
   1741  * @ohead_offs: orphan head offset
   1742  * @no_orphs: non-zero if there are no orphans
   1743  *
   1744  * @bgt: UBIFS background thread
   1745  * @bgt_name: background thread name
   1746  * @need_bgt: if background thread should run
   1747  * @need_wbuf_sync: if write-buffers have to be synchronized
   1748  *
   1749  * @gc_lnum: LEB number used for garbage collection
   1750  * @sbuf: a buffer of LEB size used by GC and replay for scanning
   1751  * @idx_gc: list of index LEBs that have been garbage collected
   1752  * @idx_gc_cnt: number of elements on the idx_gc list
   1753  * @gc_seq: incremented for every non-index LEB garbage collected
   1754  * @gced_lnum: last non-index LEB that was garbage collected
   1755  *
   1756  * @infos_list: links all 'ubifs_info' objects
   1757  * @umount_mutex: serializes shrinker and un-mount
   1758  * @shrinker_run_no: shrinker run number
   1759  *
   1760  * @space_bits: number of bits needed to record free or dirty space
   1761  * @lpt_lnum_bits: number of bits needed to record a LEB number in the LPT
   1762  * @lpt_offs_bits: number of bits needed to record an offset in the LPT
   1763  * @lpt_spc_bits: number of bits needed to space in the LPT
   1764  * @pcnt_bits: number of bits needed to record pnode or nnode number
   1765  * @lnum_bits: number of bits needed to record LEB number
   1766  * @nnode_sz: size of on-flash nnode
   1767  * @pnode_sz: size of on-flash pnode
   1768  * @ltab_sz: size of on-flash LPT lprops table
   1769  * @lsave_sz: size of on-flash LPT save table
   1770  * @pnode_cnt: number of pnodes
   1771  * @nnode_cnt: number of nnodes
   1772  * @lpt_hght: height of the LPT
   1773  * @pnodes_have: number of pnodes in memory
   1774  *
   1775  * @lp_mutex: protects lprops table and all the other lprops-related fields
   1776  * @lpt_lnum: LEB number of the root nnode of the LPT
   1777  * @lpt_offs: offset of the root nnode of the LPT
   1778  * @nhead_lnum: LEB number of LPT head
   1779  * @nhead_offs: offset of LPT head
   1780  * @lpt_drty_flgs: dirty flags for LPT special nodes e.g. ltab
   1781  * @dirty_nn_cnt: number of dirty nnodes
   1782  * @dirty_pn_cnt: number of dirty pnodes
   1783  * @check_lpt_free: flag that indicates LPT GC may be needed
   1784  * @lpt_sz: LPT size
   1785  * @lpt_nod_buf: buffer for an on-flash nnode or pnode
   1786  * @lpt_buf: buffer of LEB size used by LPT
   1787  * @nroot: address in memory of the root nnode of the LPT
   1788  * @lpt_cnext: next LPT node to commit
   1789  * @lpt_heap: array of heaps of categorized lprops
   1790  * @dirty_idx: a (reverse sorted) copy of the LPROPS_DIRTY_IDX heap as at
   1791  *             previous commit start
   1792  * @uncat_list: list of un-categorized LEBs
   1793  * @empty_list: list of empty LEBs
   1794  * @freeable_list: list of freeable non-index LEBs (free + dirty == @leb_size)
   1795  * @frdi_idx_list: list of freeable index LEBs (free + dirty == @leb_size)
   1796  * @freeable_cnt: number of freeable LEBs in @freeable_list
   1797  * @in_a_category_cnt: count of lprops which are in a certain category, which
   1798  *                     basically meants that they were loaded from the flash
   1799  *
   1800  * @ltab_lnum: LEB number of LPT's own lprops table
   1801  * @ltab_offs: offset of LPT's own lprops table
   1802  * @ltab: LPT's own lprops table
   1803  * @ltab_cmt: LPT's own lprops table (commit copy)
   1804  * @lsave_cnt: number of LEB numbers in LPT's save table
   1805  * @lsave_lnum: LEB number of LPT's save table
   1806  * @lsave_offs: offset of LPT's save table
   1807  * @lsave: LPT's save table
   1808  * @lscan_lnum: LEB number of last LPT scan
   1809  *
   1810  * @rp_size: size of the reserved pool in bytes
   1811  * @report_rp_size: size of the reserved pool reported to user-space
   1812  * @rp_uid: reserved pool user ID
   1813  * @rp_gid: reserved pool group ID
   1814  *
   1815  * @empty: %1 if the UBI device is empty
   1816  * @need_recovery: %1 if the file-system needs recovery
   1817  * @replaying: %1 during journal replay
   1818  * @mounting: %1 while mounting
   1819  * @probing: %1 while attempting to mount if MS_SILENT mount flag is set
   1820  * @remounting_rw: %1 while re-mounting from R/O mode to R/W mode
   1821  * @replay_list: temporary list used during journal replay
   1822  * @replay_buds: list of buds to replay
   1823  * @cs_sqnum: sequence number of first node in the log (commit start node)
   1824  * @replay_sqnum: sequence number of node currently being replayed
   1825  * @unclean_leb_list: LEBs to recover when re-mounting R/O mounted FS to R/W
   1826  *                    mode
   1827  * @rcvrd_mst_node: recovered master node to write when re-mounting R/O mounted
   1828  *                  FS to R/W mode
   1829  * @size_tree: inode size information for recovery
   1830  * @mount_opts: UBIFS-specific mount options
   1831  *
   1832  * @dbg: debugging-related information
   1833  */
   1834 struct ubifs_info {
   1835 	struct super_block *vfs_sb;
   1836 #ifndef __UBOOT__
   1837 	struct backing_dev_info bdi;
   1838 #endif
   1839 
   1840 	ino_t highest_inum;
   1841 	unsigned long long max_sqnum;
   1842 	unsigned long long cmt_no;
   1843 	spinlock_t cnt_lock;
   1844 	int fmt_version;
   1845 	int ro_compat_version;
   1846 	unsigned char uuid[16];
   1847 
   1848 	int lhead_lnum;
   1849 	int lhead_offs;
   1850 	int ltail_lnum;
   1851 	struct mutex log_mutex;
   1852 	int min_log_bytes;
   1853 	long long cmt_bud_bytes;
   1854 
   1855 	struct rb_root buds;
   1856 	long long bud_bytes;
   1857 	spinlock_t buds_lock;
   1858 	int jhead_cnt;
   1859 	struct ubifs_jhead *jheads;
   1860 	long long max_bud_bytes;
   1861 	long long bg_bud_bytes;
   1862 	struct list_head old_buds;
   1863 	int max_bud_cnt;
   1864 
   1865 	struct rw_semaphore commit_sem;
   1866 	int cmt_state;
   1867 	spinlock_t cs_lock;
   1868 	wait_queue_head_t cmt_wq;
   1869 
   1870 	unsigned int big_lpt:1;
   1871 	unsigned int space_fixup:1;
   1872 	unsigned int no_chk_data_crc:1;
   1873 	unsigned int bulk_read:1;
   1874 	unsigned int default_compr:2;
   1875 	unsigned int rw_incompat:1;
   1876 
   1877 	struct mutex tnc_mutex;
   1878 	struct ubifs_zbranch zroot;
   1879 	struct ubifs_znode *cnext;
   1880 	struct ubifs_znode *enext;
   1881 	int *gap_lebs;
   1882 	void *cbuf;
   1883 	void *ileb_buf;
   1884 	int ileb_len;
   1885 	int ihead_lnum;
   1886 	int ihead_offs;
   1887 	int *ilebs;
   1888 	int ileb_cnt;
   1889 	int ileb_nxt;
   1890 	struct rb_root old_idx;
   1891 	int *bottom_up_buf;
   1892 
   1893 	struct ubifs_mst_node *mst_node;
   1894 	int mst_offs;
   1895 
   1896 	int max_bu_buf_len;
   1897 	struct mutex bu_mutex;
   1898 	struct bu_info bu;
   1899 
   1900 	struct mutex write_reserve_mutex;
   1901 	void *write_reserve_buf;
   1902 
   1903 	int log_lebs;
   1904 	long long log_bytes;
   1905 	int log_last;
   1906 	int lpt_lebs;
   1907 	int lpt_first;
   1908 	int lpt_last;
   1909 	int orph_lebs;
   1910 	int orph_first;
   1911 	int orph_last;
   1912 	int main_lebs;
   1913 	int main_first;
   1914 	long long main_bytes;
   1915 
   1916 	uint8_t key_hash_type;
   1917 	uint32_t (*key_hash)(const char *str, int len);
   1918 	int key_fmt;
   1919 	int key_len;
   1920 	int fanout;
   1921 
   1922 	int min_io_size;
   1923 	int min_io_shift;
   1924 	int max_write_size;
   1925 	int max_write_shift;
   1926 	int leb_size;
   1927 	int leb_start;
   1928 	int half_leb_size;
   1929 	int idx_leb_size;
   1930 	int leb_cnt;
   1931 	int max_leb_cnt;
   1932 	int old_leb_cnt;
   1933 	unsigned int ro_media:1;
   1934 	unsigned int ro_mount:1;
   1935 	unsigned int ro_error:1;
   1936 
   1937 	atomic_long_t dirty_pg_cnt;
   1938 	atomic_long_t dirty_zn_cnt;
   1939 	atomic_long_t clean_zn_cnt;
   1940 
   1941 	spinlock_t space_lock;
   1942 	struct ubifs_lp_stats lst;
   1943 	struct ubifs_budg_info bi;
   1944 	unsigned long long calc_idx_sz;
   1945 
   1946 	int ref_node_alsz;
   1947 	int mst_node_alsz;
   1948 	int min_idx_node_sz;
   1949 	int max_idx_node_sz;
   1950 	long long max_inode_sz;
   1951 	int max_znode_sz;
   1952 
   1953 	int leb_overhead;
   1954 	int dead_wm;
   1955 	int dark_wm;
   1956 	int block_cnt;
   1957 
   1958 	struct ubifs_node_range ranges[UBIFS_NODE_TYPES_CNT];
   1959 	struct ubi_volume_desc *ubi;
   1960 	struct ubi_device_info di;
   1961 	struct ubi_volume_info vi;
   1962 
   1963 	struct rb_root orph_tree;
   1964 	struct list_head orph_list;
   1965 	struct list_head orph_new;
   1966 	struct ubifs_orphan *orph_cnext;
   1967 	struct ubifs_orphan *orph_dnext;
   1968 	spinlock_t orphan_lock;
   1969 	void *orph_buf;
   1970 	int new_orphans;
   1971 	int cmt_orphans;
   1972 	int tot_orphans;
   1973 	int max_orphans;
   1974 	int ohead_lnum;
   1975 	int ohead_offs;
   1976 	int no_orphs;
   1977 
   1978 	struct task_struct *bgt;
   1979 	char bgt_name[sizeof(BGT_NAME_PATTERN) + 9];
   1980 	int need_bgt;
   1981 	int need_wbuf_sync;
   1982 
   1983 	int gc_lnum;
   1984 	void *sbuf;
   1985 	struct list_head idx_gc;
   1986 	int idx_gc_cnt;
   1987 	int gc_seq;
   1988 	int gced_lnum;
   1989 
   1990 	struct list_head infos_list;
   1991 	struct mutex umount_mutex;
   1992 	unsigned int shrinker_run_no;
   1993 
   1994 	int space_bits;
   1995 	int lpt_lnum_bits;
   1996 	int lpt_offs_bits;
   1997 	int lpt_spc_bits;
   1998 	int pcnt_bits;
   1999 	int lnum_bits;
   2000 	int nnode_sz;
   2001 	int pnode_sz;
   2002 	int ltab_sz;
   2003 	int lsave_sz;
   2004 	int pnode_cnt;
   2005 	int nnode_cnt;
   2006 	int lpt_hght;
   2007 	int pnodes_have;
   2008 
   2009 	struct mutex lp_mutex;
   2010 	int lpt_lnum;
   2011 	int lpt_offs;
   2012 	int nhead_lnum;
   2013 	int nhead_offs;
   2014 	int lpt_drty_flgs;
   2015 	int dirty_nn_cnt;
   2016 	int dirty_pn_cnt;
   2017 	int check_lpt_free;
   2018 	long long lpt_sz;
   2019 	void *lpt_nod_buf;
   2020 	void *lpt_buf;
   2021 	struct ubifs_nnode *nroot;
   2022 	struct ubifs_cnode *lpt_cnext;
   2023 	struct ubifs_lpt_heap lpt_heap[LPROPS_HEAP_CNT];
   2024 	struct ubifs_lpt_heap dirty_idx;
   2025 	struct list_head uncat_list;
   2026 	struct list_head empty_list;
   2027 	struct list_head freeable_list;
   2028 	struct list_head frdi_idx_list;
   2029 	int freeable_cnt;
   2030 	int in_a_category_cnt;
   2031 
   2032 	int ltab_lnum;
   2033 	int ltab_offs;
   2034 	struct ubifs_lpt_lprops *ltab;
   2035 	struct ubifs_lpt_lprops *ltab_cmt;
   2036 	int lsave_cnt;
   2037 	int lsave_lnum;
   2038 	int lsave_offs;
   2039 	int *lsave;
   2040 	int lscan_lnum;
   2041 
   2042 	long long rp_size;
   2043 	long long report_rp_size;
   2044 	kuid_t rp_uid;
   2045 	kgid_t rp_gid;
   2046 
   2047 	/* The below fields are used only during mounting and re-mounting */
   2048 	unsigned int empty:1;
   2049 	unsigned int need_recovery:1;
   2050 	unsigned int replaying:1;
   2051 	unsigned int mounting:1;
   2052 	unsigned int remounting_rw:1;
   2053 	unsigned int probing:1;
   2054 	struct list_head replay_list;
   2055 	struct list_head replay_buds;
   2056 	unsigned long long cs_sqnum;
   2057 	unsigned long long replay_sqnum;
   2058 	struct list_head unclean_leb_list;
   2059 	struct ubifs_mst_node *rcvrd_mst_node;
   2060 	struct rb_root size_tree;
   2061 	struct ubifs_mount_opts mount_opts;
   2062 
   2063 #ifndef __UBOOT__
   2064 	struct ubifs_debug_info *dbg;
   2065 #endif
   2066 };
   2067 
   2068 extern struct list_head ubifs_infos;
   2069 extern spinlock_t ubifs_infos_lock;
   2070 extern atomic_long_t ubifs_clean_zn_cnt;
   2071 extern struct kmem_cache *ubifs_inode_slab;
   2072 extern const struct super_operations ubifs_super_operations;
   2073 extern const struct xattr_handler *ubifs_xattr_handlers[];
   2074 extern const struct address_space_operations ubifs_file_address_operations;
   2075 extern const struct file_operations ubifs_file_operations;
   2076 extern const struct inode_operations ubifs_file_inode_operations;
   2077 extern const struct file_operations ubifs_dir_operations;
   2078 extern const struct inode_operations ubifs_dir_inode_operations;
   2079 extern const struct inode_operations ubifs_symlink_inode_operations;
   2080 extern struct backing_dev_info ubifs_backing_dev_info;
   2081 extern struct ubifs_compressor *ubifs_compressors[UBIFS_COMPR_TYPES_CNT];
   2082 
   2083 /* io.c */
   2084 void ubifs_ro_mode(struct ubifs_info *c, int err);
   2085 int ubifs_leb_read(const struct ubifs_info *c, int lnum, void *buf, int offs,
   2086 		   int len, int even_ebadmsg);
   2087 int ubifs_leb_write(struct ubifs_info *c, int lnum, const void *buf, int offs,
   2088 		    int len);
   2089 int ubifs_leb_change(struct ubifs_info *c, int lnum, const void *buf, int len);
   2090 int ubifs_leb_unmap(struct ubifs_info *c, int lnum);
   2091 int ubifs_leb_map(struct ubifs_info *c, int lnum);
   2092 int ubifs_is_mapped(const struct ubifs_info *c, int lnum);
   2093 int ubifs_wbuf_write_nolock(struct ubifs_wbuf *wbuf, void *buf, int len);
   2094 int ubifs_wbuf_seek_nolock(struct ubifs_wbuf *wbuf, int lnum, int offs);
   2095 int ubifs_wbuf_init(struct ubifs_info *c, struct ubifs_wbuf *wbuf);
   2096 int ubifs_read_node(const struct ubifs_info *c, void *buf, int type, int len,
   2097 		    int lnum, int offs);
   2098 int ubifs_read_node_wbuf(struct ubifs_wbuf *wbuf, void *buf, int type, int len,
   2099 			 int lnum, int offs);
   2100 int ubifs_write_node(struct ubifs_info *c, void *node, int len, int lnum,
   2101 		     int offs);
   2102 int ubifs_check_node(const struct ubifs_info *c, const void *buf, int lnum,
   2103 		     int offs, int quiet, int must_chk_crc);
   2104 void ubifs_prepare_node(struct ubifs_info *c, void *buf, int len, int pad);
   2105 void ubifs_prep_grp_node(struct ubifs_info *c, void *node, int len, int last);
   2106 int ubifs_io_init(struct ubifs_info *c);
   2107 void ubifs_pad(const struct ubifs_info *c, void *buf, int pad);
   2108 int ubifs_wbuf_sync_nolock(struct ubifs_wbuf *wbuf);
   2109 int ubifs_bg_wbufs_sync(struct ubifs_info *c);
   2110 void ubifs_wbuf_add_ino_nolock(struct ubifs_wbuf *wbuf, ino_t inum);
   2111 int ubifs_sync_wbufs_by_inode(struct ubifs_info *c, struct inode *inode);
   2112 
   2113 /* scan.c */
   2114 struct ubifs_scan_leb *ubifs_scan(const struct ubifs_info *c, int lnum,
   2115 				  int offs, void *sbuf, int quiet);
   2116 void ubifs_scan_destroy(struct ubifs_scan_leb *sleb);
   2117 int ubifs_scan_a_node(const struct ubifs_info *c, void *buf, int len, int lnum,
   2118 		      int offs, int quiet);
   2119 struct ubifs_scan_leb *ubifs_start_scan(const struct ubifs_info *c, int lnum,
   2120 					int offs, void *sbuf);
   2121 void ubifs_end_scan(const struct ubifs_info *c, struct ubifs_scan_leb *sleb,
   2122 		    int lnum, int offs);
   2123 int ubifs_add_snod(const struct ubifs_info *c, struct ubifs_scan_leb *sleb,
   2124 		   void *buf, int offs);
   2125 void ubifs_scanned_corruption(const struct ubifs_info *c, int lnum, int offs,
   2126 			      void *buf);
   2127 
   2128 /* log.c */
   2129 void ubifs_add_bud(struct ubifs_info *c, struct ubifs_bud *bud);
   2130 void ubifs_create_buds_lists(struct ubifs_info *c);
   2131 int ubifs_add_bud_to_log(struct ubifs_info *c, int jhead, int lnum, int offs);
   2132 struct ubifs_bud *ubifs_search_bud(struct ubifs_info *c, int lnum);
   2133 struct ubifs_wbuf *ubifs_get_wbuf(struct ubifs_info *c, int lnum);
   2134 int ubifs_log_start_commit(struct ubifs_info *c, int *ltail_lnum);
   2135 int ubifs_log_end_commit(struct ubifs_info *c, int new_ltail_lnum);
   2136 int ubifs_log_post_commit(struct ubifs_info *c, int old_ltail_lnum);
   2137 int ubifs_consolidate_log(struct ubifs_info *c);
   2138 
   2139 /* journal.c */
   2140 int ubifs_jnl_update(struct ubifs_info *c, const struct inode *dir,
   2141 		     const struct qstr *nm, const struct inode *inode,
   2142 		     int deletion, int xent);
   2143 int ubifs_jnl_write_data(struct ubifs_info *c, const struct inode *inode,
   2144 			 const union ubifs_key *key, const void *buf, int len);
   2145 int ubifs_jnl_write_inode(struct ubifs_info *c, const struct inode *inode);
   2146 int ubifs_jnl_delete_inode(struct ubifs_info *c, const struct inode *inode);
   2147 int ubifs_jnl_rename(struct ubifs_info *c, const struct inode *old_dir,
   2148 		     const struct dentry *old_dentry,
   2149 		     const struct inode *new_dir,
   2150 		     const struct dentry *new_dentry, int sync);
   2151 int ubifs_jnl_truncate(struct ubifs_info *c, const struct inode *inode,
   2152 		       loff_t old_size, loff_t new_size);
   2153 int ubifs_jnl_delete_xattr(struct ubifs_info *c, const struct inode *host,
   2154 			   const struct inode *inode, const struct qstr *nm);
   2155 int ubifs_jnl_change_xattr(struct ubifs_info *c, const struct inode *inode1,
   2156 			   const struct inode *inode2);
   2157 
   2158 /* budget.c */
   2159 int ubifs_budget_space(struct ubifs_info *c, struct ubifs_budget_req *req);
   2160 void ubifs_release_budget(struct ubifs_info *c, struct ubifs_budget_req *req);
   2161 void ubifs_release_dirty_inode_budget(struct ubifs_info *c,
   2162 				      struct ubifs_inode *ui);
   2163 int ubifs_budget_inode_op(struct ubifs_info *c, struct inode *inode,
   2164 			  struct ubifs_budget_req *req);
   2165 void ubifs_release_ino_dirty(struct ubifs_info *c, struct inode *inode,
   2166 				struct ubifs_budget_req *req);
   2167 void ubifs_cancel_ino_op(struct ubifs_info *c, struct inode *inode,
   2168 			 struct ubifs_budget_req *req);
   2169 long long ubifs_get_free_space(struct ubifs_info *c);
   2170 long long ubifs_get_free_space_nolock(struct ubifs_info *c);
   2171 int ubifs_calc_min_idx_lebs(struct ubifs_info *c);
   2172 void ubifs_convert_page_budget(struct ubifs_info *c);
   2173 long long ubifs_reported_space(const struct ubifs_info *c, long long free);
   2174 long long ubifs_calc_available(const struct ubifs_info *c, int min_idx_lebs);
   2175 
   2176 /* find.c */
   2177 int ubifs_find_free_space(struct ubifs_info *c, int min_space, int *offs,
   2178 			  int squeeze);
   2179 int ubifs_find_free_leb_for_idx(struct ubifs_info *c);
   2180 int ubifs_find_dirty_leb(struct ubifs_info *c, struct ubifs_lprops *ret_lp,
   2181 			 int min_space, int pick_free);
   2182 int ubifs_find_dirty_idx_leb(struct ubifs_info *c);
   2183 int ubifs_save_dirty_idx_lnums(struct ubifs_info *c);
   2184 
   2185 /* tnc.c */
   2186 int ubifs_lookup_level0(struct ubifs_info *c, const union ubifs_key *key,
   2187 			struct ubifs_znode **zn, int *n);
   2188 int ubifs_tnc_lookup_nm(struct ubifs_info *c, const union ubifs_key *key,
   2189 			void *node, const struct qstr *nm);
   2190 int ubifs_tnc_locate(struct ubifs_info *c, const union ubifs_key *key,
   2191 		     void *node, int *lnum, int *offs);
   2192 int ubifs_tnc_add(struct ubifs_info *c, const union ubifs_key *key, int lnum,
   2193 		  int offs, int len);
   2194 int ubifs_tnc_replace(struct ubifs_info *c, const union ubifs_key *key,
   2195 		      int old_lnum, int old_offs, int lnum, int offs, int len);
   2196 int ubifs_tnc_add_nm(struct ubifs_info *c, const union ubifs_key *key,
   2197 		     int lnum, int offs, int len, const struct qstr *nm);
   2198 int ubifs_tnc_remove(struct ubifs_info *c, const union ubifs_key *key);
   2199 int ubifs_tnc_remove_nm(struct ubifs_info *c, const union ubifs_key *key,
   2200 			const struct qstr *nm);
   2201 int ubifs_tnc_remove_range(struct ubifs_info *c, union ubifs_key *from_key,
   2202 			   union ubifs_key *to_key);
   2203 int ubifs_tnc_remove_ino(struct ubifs_info *c, ino_t inum);
   2204 struct ubifs_dent_node *ubifs_tnc_next_ent(struct ubifs_info *c,
   2205 					   union ubifs_key *key,
   2206 					   const struct qstr *nm);
   2207 void ubifs_tnc_close(struct ubifs_info *c);
   2208 int ubifs_tnc_has_node(struct ubifs_info *c, union ubifs_key *key, int level,
   2209 		       int lnum, int offs, int is_idx);
   2210 int ubifs_dirty_idx_node(struct ubifs_info *c, union ubifs_key *key, int level,
   2211 			 int lnum, int offs);
   2212 /* Shared by tnc.c for tnc_commit.c */
   2213 void destroy_old_idx(struct ubifs_info *c);
   2214 int is_idx_node_in_tnc(struct ubifs_info *c, union ubifs_key *key, int level,
   2215 		       int lnum, int offs);
   2216 int insert_old_idx_znode(struct ubifs_info *c, struct ubifs_znode *znode);
   2217 int ubifs_tnc_get_bu_keys(struct ubifs_info *c, struct bu_info *bu);
   2218 int ubifs_tnc_bulk_read(struct ubifs_info *c, struct bu_info *bu);
   2219 
   2220 /* tnc_misc.c */
   2221 struct ubifs_znode *ubifs_tnc_levelorder_next(struct ubifs_znode *zr,
   2222 					      struct ubifs_znode *znode);
   2223 int ubifs_search_zbranch(const struct ubifs_info *c,
   2224 			 const struct ubifs_znode *znode,
   2225 			 const union ubifs_key *key, int *n);
   2226 struct ubifs_znode *ubifs_tnc_postorder_first(struct ubifs_znode *znode);
   2227 struct ubifs_znode *ubifs_tnc_postorder_next(struct ubifs_znode *znode);
   2228 long ubifs_destroy_tnc_subtree(struct ubifs_znode *zr);
   2229 struct ubifs_znode *ubifs_load_znode(struct ubifs_info *c,
   2230 				     struct ubifs_zbranch *zbr,
   2231 				     struct ubifs_znode *parent, int iip);
   2232 int ubifs_tnc_read_node(struct ubifs_info *c, struct ubifs_zbranch *zbr,
   2233 			void *node);
   2234 
   2235 /* tnc_commit.c */
   2236 int ubifs_tnc_start_commit(struct ubifs_info *c, struct ubifs_zbranch *zroot);
   2237 int ubifs_tnc_end_commit(struct ubifs_info *c);
   2238 
   2239 #ifndef __UBOOT__
   2240 /* shrinker.c */
   2241 unsigned long ubifs_shrink_scan(struct shrinker *shrink,
   2242 				struct shrink_control *sc);
   2243 unsigned long ubifs_shrink_count(struct shrinker *shrink,
   2244 				 struct shrink_control *sc);
   2245 #endif
   2246 
   2247 /* commit.c */
   2248 int ubifs_bg_thread(void *info);
   2249 void ubifs_commit_required(struct ubifs_info *c);
   2250 void ubifs_request_bg_commit(struct ubifs_info *c);
   2251 int ubifs_run_commit(struct ubifs_info *c);
   2252 void ubifs_recovery_commit(struct ubifs_info *c);
   2253 int ubifs_gc_should_commit(struct ubifs_info *c);
   2254 void ubifs_wait_for_commit(struct ubifs_info *c);
   2255 
   2256 /* master.c */
   2257 int ubifs_read_master(struct ubifs_info *c);
   2258 int ubifs_write_master(struct ubifs_info *c);
   2259 
   2260 /* sb.c */
   2261 int ubifs_read_superblock(struct ubifs_info *c);
   2262 struct ubifs_sb_node *ubifs_read_sb_node(struct ubifs_info *c);
   2263 int ubifs_write_sb_node(struct ubifs_info *c, struct ubifs_sb_node *sup);
   2264 int ubifs_fixup_free_space(struct ubifs_info *c);
   2265 
   2266 /* replay.c */
   2267 int ubifs_validate_entry(struct ubifs_info *c,
   2268 			 const struct ubifs_dent_node *dent);
   2269 int ubifs_replay_journal(struct ubifs_info *c);
   2270 
   2271 /* gc.c */
   2272 int ubifs_garbage_collect(struct ubifs_info *c, int anyway);
   2273 int ubifs_gc_start_commit(struct ubifs_info *c);
   2274 int ubifs_gc_end_commit(struct ubifs_info *c);
   2275 void ubifs_destroy_idx_gc(struct ubifs_info *c);
   2276 int ubifs_get_idx_gc_leb(struct ubifs_info *c);
   2277 int ubifs_garbage_collect_leb(struct ubifs_info *c, struct ubifs_lprops *lp);
   2278 
   2279 /* orphan.c */
   2280 int ubifs_add_orphan(struct ubifs_info *c, ino_t inum);
   2281 void ubifs_delete_orphan(struct ubifs_info *c, ino_t inum);
   2282 int ubifs_orphan_start_commit(struct ubifs_info *c);
   2283 int ubifs_orphan_end_commit(struct ubifs_info *c);
   2284 int ubifs_mount_orphans(struct ubifs_info *c, int unclean, int read_only);
   2285 int ubifs_clear_orphans(struct ubifs_info *c);
   2286 
   2287 /* lpt.c */
   2288 int ubifs_calc_lpt_geom(struct ubifs_info *c);
   2289 int ubifs_create_dflt_lpt(struct ubifs_info *c, int *main_lebs, int lpt_first,
   2290 			  int *lpt_lebs, int *big_lpt);
   2291 int ubifs_lpt_init(struct ubifs_info *c, int rd, int wr);
   2292 struct ubifs_lprops *ubifs_lpt_lookup(struct ubifs_info *c, int lnum);
   2293 struct ubifs_lprops *ubifs_lpt_lookup_dirty(struct ubifs_info *c, int lnum);
   2294 int ubifs_lpt_scan_nolock(struct ubifs_info *c, int start_lnum, int end_lnum,
   2295 			  ubifs_lpt_scan_callback scan_cb, void *data);
   2296 
   2297 /* Shared by lpt.c for lpt_commit.c */
   2298 void ubifs_pack_lsave(struct ubifs_info *c, void *buf, int *lsave);
   2299 void ubifs_pack_ltab(struct ubifs_info *c, void *buf,
   2300 		     struct ubifs_lpt_lprops *ltab);
   2301 void ubifs_pack_pnode(struct ubifs_info *c, void *buf,
   2302 		      struct ubifs_pnode *pnode);
   2303 void ubifs_pack_nnode(struct ubifs_info *c, void *buf,
   2304 		      struct ubifs_nnode *nnode);
   2305 struct ubifs_pnode *ubifs_get_pnode(struct ubifs_info *c,
   2306 				    struct ubifs_nnode *parent, int iip);
   2307 struct ubifs_nnode *ubifs_get_nnode(struct ubifs_info *c,
   2308 				    struct ubifs_nnode *parent, int iip);
   2309 int ubifs_read_nnode(struct ubifs_info *c, struct ubifs_nnode *parent, int iip);
   2310 void ubifs_add_lpt_dirt(struct ubifs_info *c, int lnum, int dirty);
   2311 void ubifs_add_nnode_dirt(struct ubifs_info *c, struct ubifs_nnode *nnode);
   2312 uint32_t ubifs_unpack_bits(uint8_t **addr, int *pos, int nrbits);
   2313 struct ubifs_nnode *ubifs_first_nnode(struct ubifs_info *c, int *hght);
   2314 /* Needed only in debugging code in lpt_commit.c */
   2315 int ubifs_unpack_nnode(const struct ubifs_info *c, void *buf,
   2316 		       struct ubifs_nnode *nnode);
   2317 
   2318 /* lpt_commit.c */
   2319 int ubifs_lpt_start_commit(struct ubifs_info *c);
   2320 int ubifs_lpt_end_commit(struct ubifs_info *c);
   2321 int ubifs_lpt_post_commit(struct ubifs_info *c);
   2322 void ubifs_lpt_free(struct ubifs_info *c, int wr_only);
   2323 
   2324 /* lprops.c */
   2325 const struct ubifs_lprops *ubifs_change_lp(struct ubifs_info *c,
   2326 					   const struct ubifs_lprops *lp,
   2327 					   int free, int dirty, int flags,
   2328 					   int idx_gc_cnt);
   2329 void ubifs_get_lp_stats(struct ubifs_info *c, struct ubifs_lp_stats *lst);
   2330 void ubifs_add_to_cat(struct ubifs_info *c, struct ubifs_lprops *lprops,
   2331 		      int cat);
   2332 void ubifs_replace_cat(struct ubifs_info *c, struct ubifs_lprops *old_lprops,
   2333 		       struct ubifs_lprops *new_lprops);
   2334 void ubifs_ensure_cat(struct ubifs_info *c, struct ubifs_lprops *lprops);
   2335 int ubifs_categorize_lprops(const struct ubifs_info *c,
   2336 			    const struct ubifs_lprops *lprops);
   2337 int ubifs_change_one_lp(struct ubifs_info *c, int lnum, int free, int dirty,
   2338 			int flags_set, int flags_clean, int idx_gc_cnt);
   2339 int ubifs_update_one_lp(struct ubifs_info *c, int lnum, int free, int dirty,
   2340 			int flags_set, int flags_clean);
   2341 int ubifs_read_one_lp(struct ubifs_info *c, int lnum, struct ubifs_lprops *lp);
   2342 const struct ubifs_lprops *ubifs_fast_find_free(struct ubifs_info *c);
   2343 const struct ubifs_lprops *ubifs_fast_find_empty(struct ubifs_info *c);
   2344 const struct ubifs_lprops *ubifs_fast_find_freeable(struct ubifs_info *c);
   2345 const struct ubifs_lprops *ubifs_fast_find_frdi_idx(struct ubifs_info *c);
   2346 int ubifs_calc_dark(const struct ubifs_info *c, int spc);
   2347 
   2348 /* file.c */
   2349 int ubifs_fsync(struct file *file, loff_t start, loff_t end, int datasync);
   2350 int ubifs_setattr(struct dentry *dentry, struct iattr *attr);
   2351 
   2352 /* dir.c */
   2353 struct inode *ubifs_new_inode(struct ubifs_info *c, const struct inode *dir,
   2354 			      umode_t mode);
   2355 int ubifs_getattr(struct vfsmount *mnt, struct dentry *dentry,
   2356 		  struct kstat *stat);
   2357 
   2358 /* xattr.c */
   2359 int ubifs_setxattr(struct dentry *dentry, const char *name,
   2360 		   const void *value, size_t size, int flags);
   2361 ssize_t ubifs_getxattr(struct dentry *dentry, const char *name, void *buf,
   2362 		       size_t size);
   2363 ssize_t ubifs_listxattr(struct dentry *dentry, char *buffer, size_t size);
   2364 int ubifs_removexattr(struct dentry *dentry, const char *name);
   2365 int ubifs_init_security(struct inode *dentry, struct inode *inode,
   2366 			const struct qstr *qstr);
   2367 
   2368 /* super.c */
   2369 struct inode *ubifs_iget(struct super_block *sb, unsigned long inum);
   2370 int ubifs_iput(struct inode *inode);
   2371 
   2372 /* recovery.c */
   2373 int ubifs_recover_master_node(struct ubifs_info *c);
   2374 int ubifs_write_rcvrd_mst_node(struct ubifs_info *c);
   2375 struct ubifs_scan_leb *ubifs_recover_leb(struct ubifs_info *c, int lnum,
   2376 					 int offs, void *sbuf, int jhead);
   2377 struct ubifs_scan_leb *ubifs_recover_log_leb(struct ubifs_info *c, int lnum,
   2378 					     int offs, void *sbuf);
   2379 int ubifs_recover_inl_heads(struct ubifs_info *c, void *sbuf);
   2380 int ubifs_clean_lebs(struct ubifs_info *c, void *sbuf);
   2381 int ubifs_rcvry_gc_commit(struct ubifs_info *c);
   2382 int ubifs_recover_size_accum(struct ubifs_info *c, union ubifs_key *key,
   2383 			     int deletion, loff_t new_size);
   2384 int ubifs_recover_size(struct ubifs_info *c);
   2385 void ubifs_destroy_size_tree(struct ubifs_info *c);
   2386 
   2387 /* ioctl.c */
   2388 long ubifs_ioctl(struct file *file, unsigned int cmd, unsigned long arg);
   2389 void ubifs_set_inode_flags(struct inode *inode);
   2390 #ifdef CONFIG_COMPAT
   2391 long ubifs_compat_ioctl(struct file *file, unsigned int cmd, unsigned long arg);
   2392 #endif
   2393 
   2394 /* compressor.c */
   2395 int __init ubifs_compressors_init(void);
   2396 void ubifs_compressors_exit(void);
   2397 void ubifs_compress(const struct ubifs_info *c, const void *in_buf, int in_len,
   2398 		    void *out_buf, int *out_len, int *compr_type);
   2399 int ubifs_decompress(const struct ubifs_info *c, const void *buf, int len,
   2400 		     void *out, int *out_len, int compr_type);
   2401 
   2402 #include "debug.h"
   2403 #include "misc.h"
   2404 #include "key.h"
   2405 
   2406 #ifdef __UBOOT__
   2407 void ubifs_umount(struct ubifs_info *c);
   2408 #endif
   2409 #endif /* !__UBIFS_H__ */
   2410