Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
fs
jffs2
jffs2_fs_sb.h
Go to the documentation of this file.
1
/*
2
* JFFS2 -- Journalling Flash File System, Version 2.
3
*
4
* Copyright © 2001-2007 Red Hat, Inc.
5
* Copyright © 2004-2010 David Woodhouse <
[email protected]
>
6
*
7
* Created by David Woodhouse <
[email protected]
>
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
30
struct
jffs2_inodirty
;
31
32
struct
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
*/
48
struct
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 */
Generated on Thu Jan 10 2013 14:47:40 for Linux Kernel by
1.8.2