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

📄 nodelist.h

📁 jffs2源代码基于2。6内核
💻 H
📖 第 1 页 / 共 2 页
字号:
{	struct jffs2_raw_node_ref *ref;	int i=0;	printk(KERN_NOTICE);	for (ref = jeb->first_node; ref; ref = ref->next_phys) {		printk("%08x->", ref_offset(ref));		if (++i == 8) {			i = 0;			printk("\n" KERN_NOTICE);		}	}	printk("\n");}#define ACCT_PARANOIA_CHECK(jeb) do { \		uint32_t my_used_size = 0; \		uint32_t my_unchecked_size = 0; \		struct jffs2_raw_node_ref *ref2 = jeb->first_node; \		while (ref2) { \			if (unlikely(ref2->flash_offset < jeb->offset || \				     ref2->flash_offset > jeb->offset + c->sector_size)) { \				printk(KERN_NOTICE "Node %08x shouldn't be in block at %08x!\n", \				       ref_offset(ref2), jeb->offset); \				paranoia_failed_dump(jeb); \				BUG(); \			} \			if (ref_flags(ref2) == REF_UNCHECKED) \				my_unchecked_size += ref_totlen(c, jeb, ref2); \			else if (!ref_obsolete(ref2)) \				my_used_size += ref_totlen(c, jeb, ref2); \			if (unlikely((!ref2->next_phys) != (ref2 == jeb->last_node))) { \                                if (!ref2->next_phys) \				       printk("ref for node at %p (phys %08x) has next_phys->%p (----), last_node->%p (phys %08x)\n", \				             ref2, ref_offset(ref2), ref2->next_phys, \				             jeb->last_node, ref_offset(jeb->last_node)); \                                else \                                       printk("ref for node at %p (phys %08x) has next_phys->%p (%08x), last_node->%p (phys %08x)\n", \				             ref2, ref_offset(ref2), ref2->next_phys, ref_offset(ref2->next_phys), \				             jeb->last_node, ref_offset(jeb->last_node)); \				paranoia_failed_dump(jeb); \				BUG(); \			} \			ref2 = ref2->next_phys; \		} \		if (my_used_size != jeb->used_size) { \			printk(KERN_NOTICE "Calculated used size %08x != stored used size %08x\n", my_used_size, jeb->used_size); \			BUG(); \		} \		if (my_unchecked_size != jeb->unchecked_size) { \			printk(KERN_NOTICE "Calculated unchecked size %08x != stored unchecked size %08x\n", my_unchecked_size, jeb->unchecked_size); \			BUG(); \		} \	} while(0)/* Calculate totlen from surrounding nodes or eraseblock */static inline uint32_t __ref_totlen(struct jffs2_sb_info *c,				    struct jffs2_eraseblock *jeb,				    struct jffs2_raw_node_ref *ref){	uint32_t ref_end;		if (ref->next_phys)		ref_end = ref_offset(ref->next_phys);	else {		if (!jeb)			jeb = &c->blocks[ref->flash_offset / c->sector_size];		/* Last node in block. Use free_space */		BUG_ON(ref != jeb->last_node);		ref_end = jeb->offset + c->sector_size - jeb->free_size;	}	return ref_end - ref_offset(ref);}static inline uint32_t ref_totlen(struct jffs2_sb_info *c,				  struct jffs2_eraseblock *jeb,				  struct jffs2_raw_node_ref *ref){	uint32_t ret;	D1(if (jeb && jeb != &c->blocks[ref->flash_offset / c->sector_size]) {		printk(KERN_CRIT "ref_totlen called with wrong block -- at 0x%08x instead of 0x%08x; ref 0x%08x\n",		       jeb->offset, c->blocks[ref->flash_offset / c->sector_size].offset, ref_offset(ref));		BUG();	})#if 1	ret = ref->__totlen;#else	/* This doesn't actually work yet */	ret = __ref_totlen(c, jeb, ref);	if (ret != ref->__totlen) {		printk(KERN_CRIT "Totlen for ref at %p (0x%08x-0x%08x) miscalculated as 0x%x instead of %x\n",		       ref, ref_offset(ref), ref_offset(ref)+ref->__totlen,		       ret, ref->__totlen);		if (!jeb)			jeb = &c->blocks[ref->flash_offset / c->sector_size];		paranoia_failed_dump(jeb);		BUG();	}#endif	return ret;}#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 struct jffs2_inode_cache *jffs2_raw_ref_to_ic(struct jffs2_raw_node_ref *raw){	while(raw->next_in_ino) {		raw = raw->next_in_ino;	}	return ((struct jffs2_inode_cache *)raw);}static inline struct jffs2_node_frag *frag_first(struct rb_root *root){	struct rb_node *node = root->rb_node;	if (!node)		return NULL;	while(node->rb_left)		node = node->rb_left;	return rb_entry(node, struct jffs2_node_frag, rb);}#define rb_parent(rb) ((rb)->rb_parent)#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);/* nodelist.c */D1(void jffs2_print_frag_list(struct jffs2_inode_info *f));void jffs2_add_fd_to_list(struct jffs2_sb_info *c, struct jffs2_full_dirent *new, struct jffs2_full_dirent **list);int jffs2_get_inode_nodes(struct jffs2_sb_info *c, ino_t ino, struct jffs2_inode_info *f,			  struct jffs2_tmp_dnode_info **tnp, struct jffs2_full_dirent **fdp,			  uint32_t *highest_version, uint32_t *latest_mctime,			  uint32_t *mctime_ver);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);void jffs2_fragtree_insert(struct jffs2_node_frag *newfrag, struct jffs2_node_frag *base);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);/* 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 *ofs, uint32_t *len, int prio);int jffs2_reserve_space_gc(struct jffs2_sb_info *c, uint32_t minsize, uint32_t *ofs, uint32_t *len);int jffs2_add_physical_node_ref(struct jffs2_sb_info *c, struct jffs2_raw_node_ref *new);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);void jffs2_dump_block_lists(struct jffs2_sb_info *c);/* 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, uint32_t flash_ofs, 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, uint32_t flash_ofs, 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);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);/* readinode.c */void jffs2_truncate_fraglist (struct jffs2_sb_info *c, struct rb_root *list, uint32_t size);int jffs2_add_full_dnode_to_inode(struct jffs2_sb_info *c, struct jffs2_inode_info *f, struct jffs2_full_dnode *fn);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 *);struct jffs2_raw_node_ref *jffs2_alloc_raw_node_ref(void);void jffs2_free_raw_node_ref(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 *);/* 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);/* build.c */int jffs2_do_mount_fs(struct jffs2_sb_info *c);/* erase.c */void jffs2_erase_block(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb);void jffs2_erase_pending_blocks(struct jffs2_sb_info *c, int count);#ifdef CONFIG_JFFS2_FS_NAND/* 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#endif /* __JFFS2_NODELIST_H__ */

⌨️ 快捷键说明

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