source: rtems/cpukit/libfs/src/jffs2/src/jffs2_fs_sb.h @ 672038b

4.115
Last change on this file since 672038b was 0c0f128, checked in by Sebastian Huber <sebastian.huber@…>, on 09/12/13 at 13:57:47

JFFS2: Import from Linux

Import of Journalling Flash File System, Version 2 from Linux 3.11.
This part of the Linux kernel is under a separate license which is
similar to the RTEMS license.

The file "cpukit/libfs/src/jffs2/include/linux/jffs2.h" is a copy of
"linux-3.11/include/uapi/linux/jffs2.h".

The file "LICENSE.JFFS2" is a copy of "linux-3.11/fs/jffs2/LICENCE".

The files

"linux-3.11/fs/jffs2/LICENCE",
"linux-3.11/fs/jffs2/acl.h",
"linux-3.11/fs/jffs2/build.c",
"linux-3.11/fs/jffs2/compr.c",
"linux-3.11/fs/jffs2/compr.h",
"linux-3.11/fs/jffs2/compr_rtime.c",
"linux-3.11/fs/jffs2/compr_rubin.c",
"linux-3.11/fs/jffs2/compr_zlib.c",
"linux-3.11/fs/jffs2/debug.c",
"linux-3.11/fs/jffs2/debug.h",
"linux-3.11/fs/jffs2/erase.c",
"linux-3.11/fs/jffs2/gc.c",
"linux-3.11/fs/jffs2/jffs2_fs_i.h",
"linux-3.11/fs/jffs2/jffs2_fs_sb.h",
"linux-3.11/fs/jffs2/nodelist.c",
"linux-3.11/fs/jffs2/nodelist.h",
"linux-3.11/fs/jffs2/nodemgmt.c",
"linux-3.11/fs/jffs2/read.c",
"linux-3.11/fs/jffs2/readinode.c",
"linux-3.11/fs/jffs2/scan.c",
"linux-3.11/fs/jffs2/summary.h",
"linux-3.11/fs/jffs2/write.c", and
"linux-3.11/fs/jffs2/xattr.h"

are copied to "cpukit/libfs/src/jffs2/src".

  • Property mode set to 100644
File size: 5.8 KB
Line 
1/*
2 * JFFS2 -- Journalling Flash File System, Version 2.
3 *
4 * Copyright © 2001-2007 Red Hat, Inc.
5 * Copyright © 2004-2010 David Woodhouse <dwmw2@infradead.org>
6 *
7 * Created by David Woodhouse <dwmw2@infradead.org>
8 *
9 * For licensing information, see the file 'LICENCE' in this directory.
10 *
11 */
12
13#ifndef _JFFS2_FS_SB
14#define _JFFS2_FS_SB
15
16#include <linux/types.h>
17#include <linux/spinlock.h>
18#include <linux/workqueue.h>
19#include <linux/completion.h>
20#include <linux/mutex.h>
21#include <linux/timer.h>
22#include <linux/wait.h>
23#include <linux/list.h>
24#include <linux/rwsem.h>
25
26#define JFFS2_SB_FLAG_RO 1
27#define JFFS2_SB_FLAG_SCANNING 2 /* Flash scanning is in progress */
28#define JFFS2_SB_FLAG_BUILDING 4 /* File system building is in progress */
29
30struct jffs2_inodirty;
31
32struct jffs2_mount_opts {
33        bool override_compr;
34        unsigned int compr;
35
36        /* The size of the reserved pool. The reserved pool is the JFFS2 flash
37         * space which may only be used by root cannot be used by the other
38         * users. This is implemented simply by means of not allowing the
39         * latter users to write to the file system if the amount if the
40         * available space is less then 'rp_size'. */
41        unsigned int rp_size;
42};
43
44/* A struct for the overall file system control.  Pointers to
45   jffs2_sb_info structs are named `c' in the source code.
46   Nee jffs_control
47*/
48struct jffs2_sb_info {
49        struct mtd_info *mtd;
50
51        uint32_t highest_ino;
52        uint32_t checked_ino;
53
54        unsigned int flags;
55
56        struct task_struct *gc_task;    /* GC task struct */
57        struct completion gc_thread_start; /* GC thread start completion */
58        struct completion gc_thread_exit; /* GC thread exit completion port */
59
60        struct mutex alloc_sem;         /* Used to protect all the following
61                                           fields, and also to protect against
62                                           out-of-order writing of nodes. And GC. */
63        uint32_t cleanmarker_size;      /* Size of an _inline_ CLEANMARKER
64                                         (i.e. zero for OOB CLEANMARKER */
65
66        uint32_t flash_size;
67        uint32_t used_size;
68        uint32_t dirty_size;
69        uint32_t wasted_size;
70        uint32_t free_size;
71        uint32_t erasing_size;
72        uint32_t bad_size;
73        uint32_t sector_size;
74        uint32_t unchecked_size;
75
76        uint32_t nr_free_blocks;
77        uint32_t nr_erasing_blocks;
78
79        /* Number of free blocks there must be before we... */
80        uint8_t resv_blocks_write;      /* ... allow a normal filesystem write */
81        uint8_t resv_blocks_deletion;   /* ... allow a normal filesystem deletion */
82        uint8_t resv_blocks_gctrigger;  /* ... wake up the GC thread */
83        uint8_t resv_blocks_gcbad;      /* ... pick a block from the bad_list to GC */
84        uint8_t resv_blocks_gcmerge;    /* ... merge pages when garbage collecting */
85        /* Number of 'very dirty' blocks before we trigger immediate GC */
86        uint8_t vdirty_blocks_gctrigger;
87
88        uint32_t nospc_dirty_size;
89
90        uint32_t nr_blocks;
91        struct jffs2_eraseblock *blocks;        /* The whole array of blocks. Used for getting blocks
92                                                 * from the offset (blocks[ofs / sector_size]) */
93        struct jffs2_eraseblock *nextblock;     /* The block we're currently filling */
94
95        struct jffs2_eraseblock *gcblock;       /* The block we're currently garbage-collecting */
96
97        struct list_head clean_list;            /* Blocks 100% full of clean data */
98        struct list_head very_dirty_list;       /* Blocks with lots of dirty space */
99        struct list_head dirty_list;            /* Blocks with some dirty space */
100        struct list_head erasable_list;         /* Blocks which are completely dirty, and need erasing */
101        struct list_head erasable_pending_wbuf_list;    /* Blocks which need erasing but only after the current wbuf is flushed */
102        struct list_head erasing_list;          /* Blocks which are currently erasing */
103        struct list_head erase_checking_list;   /* Blocks which are being checked and marked */
104        struct list_head erase_pending_list;    /* Blocks which need erasing now */
105        struct list_head erase_complete_list;   /* Blocks which are erased and need the clean marker written to them */
106        struct list_head free_list;             /* Blocks which are free and ready to be used */
107        struct list_head bad_list;              /* Bad blocks. */
108        struct list_head bad_used_list;         /* Bad blocks with valid data in. */
109
110        spinlock_t erase_completion_lock;       /* Protect free_list and erasing_list
111                                                   against erase completion handler */
112        wait_queue_head_t erase_wait;           /* For waiting for erases to complete */
113
114        wait_queue_head_t inocache_wq;
115        int inocache_hashsize;
116        struct jffs2_inode_cache **inocache_list;
117        spinlock_t inocache_lock;
118
119        /* Sem to allow jffs2_garbage_collect_deletion_dirent to
120           drop the erase_completion_lock while it's holding a pointer
121           to an obsoleted node. I don't like this. Alternatives welcomed. */
122        struct mutex erase_free_sem;
123
124        uint32_t wbuf_pagesize; /* 0 for NOR and other flashes with no wbuf */
125
126#ifdef CONFIG_JFFS2_FS_WBUF_VERIFY
127        unsigned char *wbuf_verify; /* read-back buffer for verification */
128#endif
129#ifdef CONFIG_JFFS2_FS_WRITEBUFFER
130        unsigned char *wbuf; /* Write-behind buffer for NAND flash */
131        uint32_t wbuf_ofs;
132        uint32_t wbuf_len;
133        struct jffs2_inodirty *wbuf_inodes;
134        struct rw_semaphore wbuf_sem;   /* Protects the write buffer */
135
136        struct delayed_work wbuf_dwork; /* write-buffer write-out work */
137        int wbuf_queued;                /* non-zero delayed work is queued */
138        spinlock_t wbuf_dwork_lock;     /* protects wbuf_dwork and and wbuf_queued */
139
140        unsigned char *oobbuf;
141        int oobavail; /* How many bytes are available for JFFS2 in OOB */
142#endif
143
144        struct jffs2_summary *summary;          /* Summary information */
145        struct jffs2_mount_opts mount_opts;
146
147#ifdef CONFIG_JFFS2_FS_XATTR
148#define XATTRINDEX_HASHSIZE     (57)
149        uint32_t highest_xid;
150        uint32_t highest_xseqno;
151        struct list_head xattrindex[XATTRINDEX_HASHSIZE];
152        struct list_head xattr_unchecked;
153        struct list_head xattr_dead_list;
154        struct jffs2_xattr_ref *xref_dead_list;
155        struct jffs2_xattr_ref *xref_temp;
156        struct rw_semaphore xattr_sem;
157        uint32_t xdatum_mem_usage;
158        uint32_t xdatum_mem_threshold;
159#endif
160        /* OS-private pointer for getting back to master superblock info */
161        void *os_priv;
162};
163
164#endif /* _JFFS2_FS_SB */
Note: See TracBrowser for help on using the repository browser.