RTEMS CPU Kit with SuperCore  4.11.3
Data Structures | Macros | Functions
nodelist.h File Reference
#include <linux/fs.h>
#include <linux/types.h>
#include <linux/jffs2.h>
#include "jffs2_fs_sb.h"
#include "jffs2_fs_i.h"
#include "xattr.h"
#include "acl.h"
#include "summary.h"
#include "os-linux.h"
#include "debug.h"
Include dependency graph for nodelist.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  jffs2_raw_node_ref
 
struct  jffs2_inode_cache
 
struct  jffs2_full_dnode
 
struct  jffs2_tmp_dnode_info
 
struct  jffs2_readinode_info
 
struct  jffs2_full_dirent
 
struct  jffs2_node_frag
 
struct  jffs2_eraseblock
 

Macros

#define JFFS2_NATIVE_ENDIAN
 
#define cpu_to_je16(x)   ((jint16_t){x})
 
#define cpu_to_je32(x)   ((jint32_t){x})
 
#define cpu_to_jemode(x)   ((jmode_t){os_to_jffs2_mode(x)})
 
#define constant_cpu_to_je16(x)   ((jint16_t){x})
 
#define constant_cpu_to_je32(x)   ((jint32_t){x})
 
#define je16_to_cpu(x)   ((x).v16)
 
#define je32_to_cpu(x)   ((x).v32)
 
#define jemode_to_cpu(x)   (jffs2_to_os_mode((x).m))
 
#define JFFS2_MIN_NODE_HEADER   sizeof(struct jffs2_raw_dirent)
 
#define REF_LINK_NODE   ((int32_t)-1)
 
#define REF_EMPTY_NODE   ((int32_t)-2)
 
#define REFS_PER_BLOCK   ((255/sizeof(struct jffs2_raw_node_ref))-1)
 
#define REF_UNCHECKED   0 /* We haven't yet checked the CRC or built its inode */
 
#define REF_OBSOLETE   1 /* Obsolete, can be completely ignored */
 
#define REF_PRISTINE   2 /* Completely clean. GC without looking */
 
#define REF_NORMAL   3 /* Possibly overlapped. Read the page and write again on GC */
 
#define ref_flags(ref)   ((ref)->flash_offset & 3)
 
#define ref_offset(ref)   ((ref)->flash_offset & ~3)
 
#define ref_obsolete(ref)   (((ref)->flash_offset & 3) == REF_OBSOLETE)
 
#define mark_ref_normal(ref)   do { (ref)->flash_offset = ref_offset(ref) | REF_NORMAL; } while(0)
 
#define dirent_node_state(rd)   ( (je32_to_cpu((rd)->ino)?REF_PRISTINE:REF_NORMAL) )
 
#define INO_STATE_UNCHECKED   0 /* CRC checks not yet done */
 
#define INO_STATE_CHECKING   1 /* CRC checks in progress */
 
#define INO_STATE_PRESENT   2 /* In core */
 
#define INO_STATE_CHECKEDABSENT   3 /* Checked, cleared again */
 
#define INO_STATE_GC   4 /* GCing a 'pristine' node */
 
#define INO_STATE_READING   5 /* In read_inode() */
 
#define INO_STATE_CLEARING   6 /* In clear_inode() */
 
#define INO_FLAGS_XATTR_CHECKED   0x01 /* has no duplicate xattr_ref */
 
#define RAWNODE_CLASS_INODE_CACHE   0
 
#define RAWNODE_CLASS_XATTR_DATUM   1
 
#define RAWNODE_CLASS_XATTR_REF   2
 
#define INOCACHE_HASHSIZE_MIN   128
 
#define INOCACHE_HASHSIZE_MAX   1024
 
#define write_ofs(c)   ((c)->nextblock->offset + (c)->sector_size - (c)->nextblock->free_size)
 
#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 */
 
#define VERYDIRTY(c, size)   ((size) >= ((c)->sector_size / 2))
 
#define ISDIRTY(size)   ((size) > sizeof (struct jffs2_raw_inode) + JFFS2_MIN_DATA_LEN)
 
#define PAD(x)   (((x)+3)&~3)
 
#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)
 

Functions

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_cachejffs2_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_fragjffs2_lookup_node_frag (struct rb_root *fragtree, uint32_t offset)
 
void jffs2_kill_fragtree (struct rb_root *root, struct jffs2_sb_info *c_delete)
 
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_refjffs2_link_node_ref (struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb, uint32_t ofs, uint32_t len, struct jffs2_inode_cache *ic)
 
uint32_t __jffs2_ref_totlen (struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb, struct jffs2_raw_node_ref *ref)
 
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_refjffs2_add_physical_node_ref (struct jffs2_sb_info *c, uint32_t ofs, uint32_t len, struct jffs2_inode_cache *ic)
 jffs2_add_physical_node_ref - add a physical node reference to the list : superblock info : new node reference to add : length of this physical node More...
 
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)
 
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_dnodejffs2_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_direntjffs2_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 struct qstr *qstr)
 
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)
 
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)
 
int jffs2_create_slab_caches (void)
 
void jffs2_destroy_slab_caches (void)
 
struct jffs2_full_direntjffs2_alloc_full_dirent (int namesize)
 
void jffs2_free_full_dirent (struct jffs2_full_dirent *)
 
struct jffs2_full_dnodejffs2_alloc_full_dnode (void)
 
void jffs2_free_full_dnode (struct jffs2_full_dnode *)
 
struct jffs2_raw_direntjffs2_alloc_raw_dirent (void)
 
void jffs2_free_raw_dirent (struct jffs2_raw_dirent *)
 
struct jffs2_raw_inodejffs2_alloc_raw_inode (void)
 
void jffs2_free_raw_inode (struct jffs2_raw_inode *)
 
struct jffs2_tmp_dnode_infojffs2_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_fragjffs2_alloc_node_frag (void)
 
void jffs2_free_node_frag (struct jffs2_node_frag *)
 
struct jffs2_inode_cachejffs2_alloc_inode_cache (void)
 
void jffs2_free_inode_cache (struct jffs2_inode_cache *)
 
int jffs2_garbage_collect_pass (struct jffs2_sb_info *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)
 
int jffs2_scan_medium (struct jffs2_sb_info *c)
 
void jffs2_rotate_lists (struct jffs2_sb_info *c)
 
struct jffs2_inode_cachejffs2_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)
 
int jffs2_do_mount_fs (struct jffs2_sb_info *c)
 
int 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)
 

Function Documentation

◆ jffs2_add_physical_node_ref()

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 
)

jffs2_add_physical_node_ref - add a physical node reference to the list : superblock info : new node reference to add : length of this physical node

Should only be used to report nodes for which space has been allocated by jffs2_reserve_space.

Must be called with the alloc_sem held.