⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nodelist.h

📁 linux 内核源代码
💻 H
📖 第 1 页 / 共 2 页
字号:
	uint32_t mctime_ver;	struct jffs2_full_dirent *fds;	struct jffs2_raw_node_ref *latest_ref;};struct jffs2_full_dirent{	struct jffs2_raw_node_ref *raw;	struct jffs2_full_dirent *next;	uint32_t version;	uint32_t ino; /* == zero for unlink */	unsigned int nhash;	unsigned char type;	unsigned char name[0];};/*  Fragments - used to build a map of which raw node to obtain  data from for each part of the ino*/struct jffs2_node_frag{	struct rb_node rb;	struct jffs2_full_dnode *node; /* NULL for holes */	uint32_t size;	uint32_t ofs; /* The offset to which this fragment belongs */};struct jffs2_eraseblock{	struct list_head list;	int bad_count;	uint32_t offset;		/* of this block in the MTD */	uint32_t unchecked_size;	uint32_t used_size;	uint32_t dirty_size;	uint32_t wasted_size;	uint32_t free_size;	/* Note that sector_size - free_size				   is the address of the first free space */	uint32_t allocated_refs;	struct jffs2_raw_node_ref *first_node;	struct jffs2_raw_node_ref *last_node;	struct jffs2_raw_node_ref *gc_node;	/* Next node to be garbage collected */};static inline int jffs2_blocks_use_vmalloc(struct jffs2_sb_info *c){	return ((c->flash_size / c->sector_size) * sizeof (struct jffs2_eraseblock)) > (128 * 1024);}#define ref_totlen(a, b, c) __jffs2_ref_totlen((a), (b), (c))#define ALLOC_NORMAL	0	/* Normal allocation */#define ALLOC_DELETION	1	/* Deletion node. Best to allow it */#define ALLOC_GC	2	/* Space requested for GC. Give it or die */#define ALLOC_NORETRY	3	/* For jffs2_write_dnode: On failure, return -EAGAIN instead of retrying *//* How much dirty space before it goes on the very_dirty_list */#define VERYDIRTY(c, size) ((size) >= ((c)->sector_size / 2))/* check if dirty space is more than 255 Byte */#define ISDIRTY(size) ((size) >  sizeof (struct jffs2_raw_inode) + JFFS2_MIN_DATA_LEN)#define PAD(x) (((x)+3)&~3)static inline int jffs2_encode_dev(union jffs2_device_node *jdev, dev_t rdev){	if (old_valid_dev(rdev)) {		jdev->old = cpu_to_je16(old_encode_dev(rdev));		return sizeof(jdev->old);	} else {		jdev->new = cpu_to_je32(new_encode_dev(rdev));		return sizeof(jdev->new);	}}static inline struct jffs2_node_frag *frag_first(struct rb_root *root){	struct rb_node *node = rb_first(root);	if (!node)		return NULL;	return rb_entry(node, struct jffs2_node_frag, rb);}static inline struct jffs2_node_frag *frag_last(struct rb_root *root){	struct rb_node *node = rb_last(root);	if (!node)		return NULL;	return rb_entry(node, struct jffs2_node_frag, rb);}#define frag_next(frag) rb_entry(rb_next(&(frag)->rb), struct jffs2_node_frag, rb)#define frag_prev(frag) rb_entry(rb_prev(&(frag)->rb), struct jffs2_node_frag, rb)#define frag_parent(frag) rb_entry(rb_parent(&(frag)->rb), struct jffs2_node_frag, rb)#define frag_left(frag) rb_entry((frag)->rb.rb_left, struct jffs2_node_frag, rb)#define frag_right(frag) rb_entry((frag)->rb.rb_right, struct jffs2_node_frag, rb)#define frag_erase(frag, list) rb_erase(&frag->rb, list);#define tn_next(tn) rb_entry(rb_next(&(tn)->rb), struct jffs2_tmp_dnode_info, rb)#define tn_prev(tn) rb_entry(rb_prev(&(tn)->rb), struct jffs2_tmp_dnode_info, rb)#define tn_parent(tn) rb_entry(rb_parent(&(tn)->rb), struct jffs2_tmp_dnode_info, rb)#define tn_left(tn) rb_entry((tn)->rb.rb_left, struct jffs2_tmp_dnode_info, rb)#define tn_right(tn) rb_entry((tn)->rb.rb_right, struct jffs2_tmp_dnode_info, rb)#define tn_erase(tn, list) rb_erase(&tn->rb, list);#define tn_last(list) rb_entry(rb_last(list), struct jffs2_tmp_dnode_info, rb)#define tn_first(list) rb_entry(rb_first(list), struct jffs2_tmp_dnode_info, rb)/* nodelist.c */void jffs2_add_fd_to_list(struct jffs2_sb_info *c, struct jffs2_full_dirent *new, struct jffs2_full_dirent **list);void jffs2_set_inocache_state(struct jffs2_sb_info *c, struct jffs2_inode_cache *ic, int state);struct jffs2_inode_cache *jffs2_get_ino_cache(struct jffs2_sb_info *c, uint32_t ino);void jffs2_add_ino_cache (struct jffs2_sb_info *c, struct jffs2_inode_cache *new);void jffs2_del_ino_cache(struct jffs2_sb_info *c, struct jffs2_inode_cache *old);void jffs2_free_ino_caches(struct jffs2_sb_info *c);void jffs2_free_raw_node_refs(struct jffs2_sb_info *c);struct jffs2_node_frag *jffs2_lookup_node_frag(struct rb_root *fragtree, uint32_t offset);void jffs2_kill_fragtree(struct rb_root *root, struct jffs2_sb_info *c_delete);struct rb_node *rb_next(struct rb_node *);struct rb_node *rb_prev(struct rb_node *);void rb_replace_node(struct rb_node *victim, struct rb_node *new, struct rb_root *root);int jffs2_add_full_dnode_to_inode(struct jffs2_sb_info *c, struct jffs2_inode_info *f, struct jffs2_full_dnode *fn);uint32_t jffs2_truncate_fragtree (struct jffs2_sb_info *c, struct rb_root *list, uint32_t size);struct jffs2_raw_node_ref *jffs2_link_node_ref(struct jffs2_sb_info *c,					       struct jffs2_eraseblock *jeb,					       uint32_t ofs, uint32_t len,					       struct jffs2_inode_cache *ic);extern uint32_t __jffs2_ref_totlen(struct jffs2_sb_info *c,				   struct jffs2_eraseblock *jeb,				   struct jffs2_raw_node_ref *ref);/* nodemgmt.c */int jffs2_thread_should_wake(struct jffs2_sb_info *c);int jffs2_reserve_space(struct jffs2_sb_info *c, uint32_t minsize,			uint32_t *len, int prio, uint32_t sumsize);int jffs2_reserve_space_gc(struct jffs2_sb_info *c, uint32_t minsize,			uint32_t *len, uint32_t sumsize);struct jffs2_raw_node_ref *jffs2_add_physical_node_ref(struct jffs2_sb_info *c, 						       uint32_t ofs, uint32_t len,						       struct jffs2_inode_cache *ic);void jffs2_complete_reservation(struct jffs2_sb_info *c);void jffs2_mark_node_obsolete(struct jffs2_sb_info *c, struct jffs2_raw_node_ref *raw);/* write.c */int jffs2_do_new_inode(struct jffs2_sb_info *c, struct jffs2_inode_info *f, uint32_t mode, struct jffs2_raw_inode *ri);struct jffs2_full_dnode *jffs2_write_dnode(struct jffs2_sb_info *c, struct jffs2_inode_info *f,					   struct jffs2_raw_inode *ri, const unsigned char *data,					   uint32_t datalen, int alloc_mode);struct jffs2_full_dirent *jffs2_write_dirent(struct jffs2_sb_info *c, struct jffs2_inode_info *f,					     struct jffs2_raw_dirent *rd, const unsigned char *name,					     uint32_t namelen, int alloc_mode);int jffs2_write_inode_range(struct jffs2_sb_info *c, struct jffs2_inode_info *f,			    struct jffs2_raw_inode *ri, unsigned char *buf,			    uint32_t offset, uint32_t writelen, uint32_t *retlen);int jffs2_do_create(struct jffs2_sb_info *c, struct jffs2_inode_info *dir_f, struct jffs2_inode_info *f,		    struct jffs2_raw_inode *ri, const char *name, int namelen);int jffs2_do_unlink(struct jffs2_sb_info *c, struct jffs2_inode_info *dir_f, const char *name,		    int namelen, struct jffs2_inode_info *dead_f, uint32_t time);int jffs2_do_link(struct jffs2_sb_info *c, struct jffs2_inode_info *dir_f, uint32_t ino,		   uint8_t type, const char *name, int namelen, uint32_t time);/* readinode.c */int jffs2_do_read_inode(struct jffs2_sb_info *c, struct jffs2_inode_info *f,			uint32_t ino, struct jffs2_raw_inode *latest_node);int jffs2_do_crccheck_inode(struct jffs2_sb_info *c, struct jffs2_inode_cache *ic);void jffs2_do_clear_inode(struct jffs2_sb_info *c, struct jffs2_inode_info *f);/* malloc.c */int jffs2_create_slab_caches(void);void jffs2_destroy_slab_caches(void);struct jffs2_full_dirent *jffs2_alloc_full_dirent(int namesize);void jffs2_free_full_dirent(struct jffs2_full_dirent *);struct jffs2_full_dnode *jffs2_alloc_full_dnode(void);void jffs2_free_full_dnode(struct jffs2_full_dnode *);struct jffs2_raw_dirent *jffs2_alloc_raw_dirent(void);void jffs2_free_raw_dirent(struct jffs2_raw_dirent *);struct jffs2_raw_inode *jffs2_alloc_raw_inode(void);void jffs2_free_raw_inode(struct jffs2_raw_inode *);struct jffs2_tmp_dnode_info *jffs2_alloc_tmp_dnode_info(void);void jffs2_free_tmp_dnode_info(struct jffs2_tmp_dnode_info *);int jffs2_prealloc_raw_node_refs(struct jffs2_sb_info *c,				 struct jffs2_eraseblock *jeb, int nr);void jffs2_free_refblock(struct jffs2_raw_node_ref *);struct jffs2_node_frag *jffs2_alloc_node_frag(void);void jffs2_free_node_frag(struct jffs2_node_frag *);struct jffs2_inode_cache *jffs2_alloc_inode_cache(void);void jffs2_free_inode_cache(struct jffs2_inode_cache *);#ifdef CONFIG_JFFS2_FS_XATTRstruct jffs2_xattr_datum *jffs2_alloc_xattr_datum(void);void jffs2_free_xattr_datum(struct jffs2_xattr_datum *);struct jffs2_xattr_ref *jffs2_alloc_xattr_ref(void);void jffs2_free_xattr_ref(struct jffs2_xattr_ref *);#endif/* gc.c */int jffs2_garbage_collect_pass(struct jffs2_sb_info *c);/* read.c */int jffs2_read_dnode(struct jffs2_sb_info *c, struct jffs2_inode_info *f,		     struct jffs2_full_dnode *fd, unsigned char *buf,		     int ofs, int len);int jffs2_read_inode_range(struct jffs2_sb_info *c, struct jffs2_inode_info *f,			   unsigned char *buf, uint32_t offset, uint32_t len);char *jffs2_getlink(struct jffs2_sb_info *c, struct jffs2_inode_info *f);/* scan.c */int jffs2_scan_medium(struct jffs2_sb_info *c);void jffs2_rotate_lists(struct jffs2_sb_info *c);struct jffs2_inode_cache *jffs2_scan_make_ino_cache(struct jffs2_sb_info *c, uint32_t ino);int jffs2_scan_classify_jeb(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb);int jffs2_scan_dirty_space(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb, uint32_t size);/* build.c */int jffs2_do_mount_fs(struct jffs2_sb_info *c);/* erase.c */void jffs2_erase_pending_blocks(struct jffs2_sb_info *c, int count);void jffs2_free_jeb_node_refs(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb);#ifdef CONFIG_JFFS2_FS_WRITEBUFFER/* wbuf.c */int jffs2_flush_wbuf_gc(struct jffs2_sb_info *c, uint32_t ino);int jffs2_flush_wbuf_pad(struct jffs2_sb_info *c);int jffs2_check_nand_cleanmarker(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb);int jffs2_write_nand_cleanmarker(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb);#endif#include "debug.h"#endif /* __JFFS2_NODELIST_H__ */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -