Rev 422 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
422 | giacomo | 1 | /* $Id: jffs2_fs_sb.h,v 1.1 2004-01-28 15:25:48 giacomo Exp $ */ |
2 | |||
3 | #ifndef _JFFS2_FS_SB |
||
4 | #define _JFFS2_FS_SB |
||
5 | |||
6 | #include <linux/types.h> |
||
7 | #include <linux/spinlock.h> |
||
8 | #include <linux/workqueue.h> |
||
9 | #include <linux/completion.h> |
||
10 | #include <asm/semaphore.h> |
||
11 | #include <linux/timer.h> |
||
12 | #include <linux/wait.h> |
||
13 | #include <linux/list.h> |
||
14 | |||
15 | #define JFFS2_SB_FLAG_RO 1 |
||
16 | #define JFFS2_SB_FLAG_MOUNTING 2 |
||
17 | |||
18 | struct jffs2_inodirty; |
||
19 | |||
20 | /* A struct for the overall file system control. Pointers to |
||
21 | jffs2_sb_info structs are named `c' in the source code. |
||
22 | Nee jffs_control |
||
23 | */ |
||
24 | struct jffs2_sb_info { |
||
25 | struct mtd_info *mtd; |
||
26 | |||
27 | uint32_t highest_ino; |
||
28 | uint32_t checked_ino; |
||
29 | |||
30 | unsigned int flags; |
||
31 | |||
32 | struct task_struct *gc_task; /* GC task struct */ |
||
33 | struct semaphore gc_thread_start; /* GC thread start mutex */ |
||
34 | struct completion gc_thread_exit; /* GC thread exit completion port */ |
||
35 | |||
36 | struct semaphore alloc_sem; /* Used to protect all the following |
||
37 | fields, and also to protect against |
||
38 | out-of-order writing of nodes. |
||
39 | And GC. |
||
40 | */ |
||
41 | uint32_t cleanmarker_size; /* Size of an _inline_ CLEANMARKER |
||
42 | (i.e. zero for OOB CLEANMARKER */ |
||
43 | |||
44 | uint32_t flash_size; |
||
45 | uint32_t used_size; |
||
46 | uint32_t dirty_size; |
||
47 | uint32_t wasted_size; |
||
48 | uint32_t free_size; |
||
49 | uint32_t erasing_size; |
||
50 | uint32_t bad_size; |
||
51 | uint32_t sector_size; |
||
52 | uint32_t unchecked_size; |
||
53 | |||
54 | uint32_t nr_free_blocks; |
||
55 | uint32_t nr_erasing_blocks; |
||
56 | |||
57 | /* Number of free blocks there must be before we... */ |
||
58 | uint8_t resv_blocks_write; /* ... allow a normal filesystem write */ |
||
59 | uint8_t resv_blocks_deletion; /* ... allow a normal filesystem deletion */ |
||
60 | uint8_t resv_blocks_gctrigger; /* ... wake up the GC thread */ |
||
61 | uint8_t resv_blocks_gcbad; /* ... pick a block from the bad_list to GC */ |
||
62 | uint8_t resv_blocks_gcmerge; /* ... merge pages when garbage collecting */ |
||
63 | |||
64 | uint32_t nospc_dirty_size; |
||
65 | |||
66 | uint32_t nr_blocks; |
||
67 | struct jffs2_eraseblock *blocks; /* The whole array of blocks. Used for getting blocks |
||
68 | * from the offset (blocks[ofs / sector_size]) */ |
||
69 | struct jffs2_eraseblock *nextblock; /* The block we're currently filling */ |
||
70 | |||
71 | struct jffs2_eraseblock *gcblock; /* The block we're currently garbage-collecting */ |
||
72 | |||
73 | struct list_head clean_list; /* Blocks 100% full of clean data */ |
||
74 | struct list_head very_dirty_list; /* Blocks with lots of dirty space */ |
||
75 | struct list_head dirty_list; /* Blocks with some dirty space */ |
||
76 | struct list_head erasable_list; /* Blocks which are completely dirty, and need erasing */ |
||
77 | struct list_head erasable_pending_wbuf_list; /* Blocks which need erasing but only after the current wbuf is flushed */ |
||
78 | struct list_head erasing_list; /* Blocks which are currently erasing */ |
||
79 | struct list_head erase_pending_list; /* Blocks which need erasing now */ |
||
80 | struct list_head erase_complete_list; /* Blocks which are erased and need the clean marker written to them */ |
||
81 | struct list_head free_list; /* Blocks which are free and ready to be used */ |
||
82 | struct list_head bad_list; /* Bad blocks. */ |
||
83 | struct list_head bad_used_list; /* Bad blocks with valid data in. */ |
||
84 | |||
85 | spinlock_t erase_completion_lock; /* Protect free_list and erasing_list |
||
86 | against erase completion handler */ |
||
87 | wait_queue_head_t erase_wait; /* For waiting for erases to complete */ |
||
88 | |||
89 | wait_queue_head_t inocache_wq; |
||
90 | struct jffs2_inode_cache **inocache_list; |
||
91 | spinlock_t inocache_lock; |
||
92 | |||
93 | /* Sem to allow jffs2_garbage_collect_deletion_dirent to |
||
94 | drop the erase_completion_lock while it's holding a pointer |
||
95 | to an obsoleted node. I don't like this. Alternatives welcomed. */ |
||
96 | struct semaphore erase_free_sem; |
||
97 | |||
98 | #ifdef CONFIG_JFFS2_FS_NAND |
||
99 | /* Write-behind buffer for NAND flash */ |
||
100 | unsigned char *wbuf; |
||
101 | uint32_t wbuf_ofs; |
||
102 | uint32_t wbuf_len; |
||
103 | uint32_t wbuf_pagesize; |
||
104 | struct jffs2_inodirty *wbuf_inodes; |
||
105 | |||
106 | /* Information about out-of-band area usage... */ |
||
107 | struct nand_oobinfo *oobinfo; |
||
108 | uint32_t badblock_pos; |
||
109 | uint32_t fsdata_pos; |
||
110 | uint32_t fsdata_len; |
||
111 | #endif |
||
112 | |||
113 | /* OS-private pointer for getting back to master superblock info */ |
||
114 | void *os_priv; |
||
115 | }; |
||
116 | |||
117 | #endif /* _JFFS2_FB_SB */ |