2 * JFFS2 -- Journalling Flash File System, Version 2.
4 * Copyright © 2001-2007 Red Hat, Inc.
5 * Copyright © 2004-2010 David Woodhouse <dwmw2@infradead.org>
7 * Created by David Woodhouse <dwmw2@infradead.org>
9 * For licensing information, see the file 'LICENCE' in this directory.
13 #include <linux/kernel.h>
14 #include <linux/sched.h>
15 #include <linux/slab.h>
16 #include <linux/vmalloc.h>
17 #include <linux/mtd/mtd.h>
20 static void jffs2_build_remove_unlinked_inode(struct jffs2_sb_info
*,
21 struct jffs2_inode_cache
*, struct jffs2_full_dirent
**);
23 static inline struct jffs2_inode_cache
*
24 first_inode_chain(int *i
, struct jffs2_sb_info
*c
)
26 for (; *i
< c
->inocache_hashsize
; (*i
)++) {
27 if (c
->inocache_list
[*i
])
28 return c
->inocache_list
[*i
];
33 static inline struct jffs2_inode_cache
*
34 next_inode(int *i
, struct jffs2_inode_cache
*ic
, struct jffs2_sb_info
*c
)
36 /* More in this chain? */
40 return first_inode_chain(i
, c
);
43 #define for_each_inode(i, c, ic) \
44 for (i = 0, ic = first_inode_chain(&i, (c)); \
46 ic = next_inode(&i, ic, (c)))
49 static void jffs2_build_inode_pass1(struct jffs2_sb_info
*c
,
50 struct jffs2_inode_cache
*ic
,
53 struct jffs2_full_dirent
*fd
;
55 dbg_fsbuild("building directory inode #%u\n", ic
->ino
);
57 /* For each child, increase nlink */
58 for(fd
= ic
->scan_dents
; fd
; fd
= fd
->next
) {
59 struct jffs2_inode_cache
*child_ic
;
63 /* we can get high latency here with huge directories */
65 child_ic
= jffs2_get_ino_cache(c
, fd
->ino
);
67 dbg_fsbuild("child \"%s\" (ino #%u) of dir ino #%u doesn't exist!\n",
68 fd
->name
, fd
->ino
, ic
->ino
);
69 jffs2_mark_node_obsolete(c
, fd
->raw
);
70 /* Clear the ic/raw union so it doesn't cause problems later. */
75 /* From this point, fd->raw is no longer used so we can set fd->ic */
77 child_ic
->pino_nlink
++;
78 /* If we appear (at this stage) to have hard-linked directories,
79 * set a flag to trigger a scan later */
80 if (fd
->type
== DT_DIR
) {
81 child_ic
->flags
|= INO_FLAGS_IS_DIR
;
82 if (child_ic
->pino_nlink
> 1)
86 dbg_fsbuild("increased nlink for child \"%s\" (ino #%u)\n", fd
->name
, fd
->ino
);
87 /* Can't free scan_dents so far. We might need them in pass 2 */
92 - Scan physical nodes. Build map of inodes/dirents. Allocate inocaches as we go
93 - Scan directory tree from top down, setting nlink in inocaches
94 - Scan inocaches for inodes with nlink==0
96 static int jffs2_build_filesystem(struct jffs2_sb_info
*c
)
98 int ret
, i
, dir_hardlinks
= 0;
99 struct jffs2_inode_cache
*ic
;
100 struct jffs2_full_dirent
*fd
;
101 struct jffs2_full_dirent
*dead_fds
= NULL
;
103 dbg_fsbuild("build FS data structures\n");
105 /* First, scan the medium and build all the inode caches with
106 lists of physical nodes */
108 c
->flags
|= JFFS2_SB_FLAG_SCANNING
;
109 ret
= jffs2_scan_medium(c
);
110 c
->flags
&= ~JFFS2_SB_FLAG_SCANNING
;
114 dbg_fsbuild("scanned flash completely\n");
115 jffs2_dbg_dump_block_lists_nolock(c
);
117 dbg_fsbuild("pass 1 starting\n");
118 c
->flags
|= JFFS2_SB_FLAG_BUILDING
;
119 /* Now scan the directory tree, increasing nlink according to every dirent found. */
120 for_each_inode(i
, c
, ic
) {
121 if (ic
->scan_dents
) {
122 jffs2_build_inode_pass1(c
, ic
, &dir_hardlinks
);
127 dbg_fsbuild("pass 1 complete\n");
129 /* Next, scan for inodes with nlink == 0 and remove them. If
130 they were directories, then decrement the nlink of their
131 children too, and repeat the scan. As that's going to be
132 a fairly uncommon occurrence, it's not so evil to do it this
133 way. Recursion bad. */
134 dbg_fsbuild("pass 2 starting\n");
136 for_each_inode(i
, c
, ic
) {
140 jffs2_build_remove_unlinked_inode(c
, ic
, &dead_fds
);
144 dbg_fsbuild("pass 2a starting\n");
150 ic
= jffs2_get_ino_cache(c
, fd
->ino
);
153 jffs2_build_remove_unlinked_inode(c
, ic
, &dead_fds
);
154 jffs2_free_full_dirent(fd
);
157 dbg_fsbuild("pass 2a complete\n");
160 /* If we detected directory hardlinks earlier, *hopefully*
161 * they are gone now because some of the links were from
162 * dead directories which still had some old dirents lying
163 * around and not yet garbage-collected, but which have
164 * been discarded above. So clear the pino_nlink field
165 * in each directory, so that the final scan below can
166 * print appropriate warnings. */
167 for_each_inode(i
, c
, ic
) {
168 if (ic
->flags
& INO_FLAGS_IS_DIR
)
172 dbg_fsbuild("freeing temporary data structures\n");
174 /* Finally, we can scan again and free the dirent structs */
175 for_each_inode(i
, c
, ic
) {
176 while(ic
->scan_dents
) {
178 ic
->scan_dents
= fd
->next
;
179 /* We do use the pino_nlink field to count nlink of
180 * directories during fs build, so set it to the
181 * parent ino# now. Now that there's hopefully only
183 if (fd
->type
== DT_DIR
) {
185 /* We'll have complained about it and marked the coresponding
186 raw node obsolete already. Just skip it. */
190 /* We *have* to have set this in jffs2_build_inode_pass1() */
191 BUG_ON(!(fd
->ic
->flags
& INO_FLAGS_IS_DIR
));
193 /* We clear ic->pino_nlink ∀ directories' ic *only* if dir_hardlinks
194 * is set. Otherwise, we know this should never trigger anyway, so
195 * we don't do the check. And ic->pino_nlink still contains the nlink
196 * value (which is 1). */
197 if (dir_hardlinks
&& fd
->ic
->pino_nlink
) {
198 JFFS2_ERROR("child dir \"%s\" (ino #%u) of dir ino #%u is also hard linked from dir ino #%u\n",
199 fd
->name
, fd
->ino
, ic
->ino
, fd
->ic
->pino_nlink
);
200 /* Should we unlink it from its previous parent? */
203 /* For directories, ic->pino_nlink holds that parent inode # */
204 fd
->ic
->pino_nlink
= ic
->ino
;
206 jffs2_free_full_dirent(fd
);
208 ic
->scan_dents
= NULL
;
211 jffs2_build_xattr_subsystem(c
);
212 c
->flags
&= ~JFFS2_SB_FLAG_BUILDING
;
214 dbg_fsbuild("FS build complete\n");
216 /* Rotate the lists by some number to ensure wear levelling */
217 jffs2_rotate_lists(c
);
223 for_each_inode(i
, c
, ic
) {
224 while(ic
->scan_dents
) {
226 ic
->scan_dents
= fd
->next
;
227 jffs2_free_full_dirent(fd
);
230 jffs2_clear_xattr_subsystem(c
);
236 static void jffs2_build_remove_unlinked_inode(struct jffs2_sb_info
*c
,
237 struct jffs2_inode_cache
*ic
,
238 struct jffs2_full_dirent
**dead_fds
)
240 struct jffs2_raw_node_ref
*raw
;
241 struct jffs2_full_dirent
*fd
;
243 dbg_fsbuild("removing ino #%u with nlink == zero.\n", ic
->ino
);
246 while (raw
!= (void *)ic
) {
247 struct jffs2_raw_node_ref
*next
= raw
->next_in_ino
;
248 dbg_fsbuild("obsoleting node at 0x%08x\n", ref_offset(raw
));
249 jffs2_mark_node_obsolete(c
, raw
);
253 if (ic
->scan_dents
) {
255 dbg_fsbuild("inode #%u was a directory which may have children...\n", ic
->ino
);
257 while(ic
->scan_dents
) {
258 struct jffs2_inode_cache
*child_ic
;
261 ic
->scan_dents
= fd
->next
;
264 /* It's a deletion dirent. Ignore it */
265 dbg_fsbuild("child \"%s\" is a deletion dirent, skipping...\n", fd
->name
);
266 jffs2_free_full_dirent(fd
);
272 dbg_fsbuild("removing child \"%s\", ino #%u\n", fd
->name
, fd
->ino
);
274 child_ic
= jffs2_get_ino_cache(c
, fd
->ino
);
276 dbg_fsbuild("cannot remove child \"%s\", ino #%u, because it doesn't exist\n",
278 jffs2_free_full_dirent(fd
);
282 /* Reduce nlink of the child. If it's now zero, stick it on the
283 dead_fds list to be cleaned up later. Else just free the fd */
284 child_ic
->pino_nlink
--;
286 if (!child_ic
->pino_nlink
) {
287 dbg_fsbuild("inode #%u (\"%s\") now has no links; adding to dead_fds list.\n",
289 fd
->next
= *dead_fds
;
292 dbg_fsbuild("inode #%u (\"%s\") has now got nlink %d. Ignoring.\n",
293 fd
->ino
, fd
->name
, child_ic
->pino_nlink
);
294 jffs2_free_full_dirent(fd
);
300 We don't delete the inocache from the hash list and free it yet.
301 The erase code will do that, when all the nodes are completely gone.
305 static void jffs2_calc_trigger_levels(struct jffs2_sb_info
*c
)
309 /* Deletion should almost _always_ be allowed. We're fairly
310 buggered once we stop allowing people to delete stuff
311 because there's not enough free space... */
312 c
->resv_blocks_deletion
= 2;
314 /* Be conservative about how much space we need before we allow writes.
315 On top of that which is required for deletia, require an extra 2%
316 of the medium to be available, for overhead caused by nodes being
317 split across blocks, etc. */
319 size
= c
->flash_size
/ 50; /* 2% of flash size */
320 size
+= c
->nr_blocks
* 100; /* And 100 bytes per eraseblock */
321 size
+= c
->sector_size
- 1; /* ... and round up */
323 c
->resv_blocks_write
= c
->resv_blocks_deletion
+ (size
/ c
->sector_size
);
325 /* When do we let the GC thread run in the background */
327 c
->resv_blocks_gctrigger
= c
->resv_blocks_write
+ 1;
329 /* When do we allow garbage collection to merge nodes to make
330 long-term progress at the expense of short-term space exhaustion? */
331 c
->resv_blocks_gcmerge
= c
->resv_blocks_deletion
+ 1;
333 /* When do we allow garbage collection to eat from bad blocks rather
334 than actually making progress? */
335 c
->resv_blocks_gcbad
= 0;//c->resv_blocks_deletion + 2;
337 /* What number of 'very dirty' eraseblocks do we allow before we
338 trigger the GC thread even if we don't _need_ the space. When we
339 can't mark nodes obsolete on the medium, the old dirty nodes cause
340 performance problems because we have to inspect and discard them. */
341 c
->vdirty_blocks_gctrigger
= c
->resv_blocks_gctrigger
;
342 if (jffs2_can_mark_obsolete(c
))
343 c
->vdirty_blocks_gctrigger
*= 10;
345 /* If there's less than this amount of dirty space, don't bother
346 trying to GC to make more space. It'll be a fruitless task */
347 c
->nospc_dirty_size
= c
->sector_size
+ (c
->flash_size
/ 100);
349 dbg_fsbuild("JFFS2 trigger levels (size %d KiB, block size %d KiB, %d blocks)\n",
350 c
->flash_size
/ 1024, c
->sector_size
/ 1024, c
->nr_blocks
);
351 dbg_fsbuild("Blocks required to allow deletion: %d (%d KiB)\n",
352 c
->resv_blocks_deletion
, c
->resv_blocks_deletion
*c
->sector_size
/1024);
353 dbg_fsbuild("Blocks required to allow writes: %d (%d KiB)\n",
354 c
->resv_blocks_write
, c
->resv_blocks_write
*c
->sector_size
/1024);
355 dbg_fsbuild("Blocks required to quiesce GC thread: %d (%d KiB)\n",
356 c
->resv_blocks_gctrigger
, c
->resv_blocks_gctrigger
*c
->sector_size
/1024);
357 dbg_fsbuild("Blocks required to allow GC merges: %d (%d KiB)\n",
358 c
->resv_blocks_gcmerge
, c
->resv_blocks_gcmerge
*c
->sector_size
/1024);
359 dbg_fsbuild("Blocks required to GC bad blocks: %d (%d KiB)\n",
360 c
->resv_blocks_gcbad
, c
->resv_blocks_gcbad
*c
->sector_size
/1024);
361 dbg_fsbuild("Amount of dirty space required to GC: %d bytes\n",
362 c
->nospc_dirty_size
);
363 dbg_fsbuild("Very dirty blocks before GC triggered: %d\n",
364 c
->vdirty_blocks_gctrigger
);
367 int jffs2_do_mount_fs(struct jffs2_sb_info
*c
)
373 c
->free_size
= c
->flash_size
;
374 c
->nr_blocks
= c
->flash_size
/ c
->sector_size
;
375 size
= sizeof(struct jffs2_eraseblock
) * c
->nr_blocks
;
377 if (jffs2_blocks_use_vmalloc(c
))
378 c
->blocks
= vzalloc(size
);
381 c
->blocks
= kzalloc(size
, GFP_KERNEL
);
385 for (i
=0; i
<c
->nr_blocks
; i
++) {
386 INIT_LIST_HEAD(&c
->blocks
[i
].list
);
387 c
->blocks
[i
].offset
= i
* c
->sector_size
;
388 c
->blocks
[i
].free_size
= c
->sector_size
;
391 INIT_LIST_HEAD(&c
->clean_list
);
392 INIT_LIST_HEAD(&c
->very_dirty_list
);
393 INIT_LIST_HEAD(&c
->dirty_list
);
394 INIT_LIST_HEAD(&c
->erasable_list
);
395 INIT_LIST_HEAD(&c
->erasing_list
);
396 INIT_LIST_HEAD(&c
->erase_checking_list
);
397 INIT_LIST_HEAD(&c
->erase_pending_list
);
398 INIT_LIST_HEAD(&c
->erasable_pending_wbuf_list
);
399 INIT_LIST_HEAD(&c
->erase_complete_list
);
400 INIT_LIST_HEAD(&c
->free_list
);
401 INIT_LIST_HEAD(&c
->bad_list
);
402 INIT_LIST_HEAD(&c
->bad_used_list
);
406 ret
= jffs2_sum_init(c
);
410 if (jffs2_build_filesystem(c
)) {
411 dbg_fsbuild("build_fs failed\n");
412 jffs2_free_ino_caches(c
);
413 jffs2_free_raw_node_refs(c
);
418 jffs2_calc_trigger_levels(c
);
424 if (jffs2_blocks_use_vmalloc(c
))