Lines Matching refs:c
23 struct jffs2_sb_info *c; member
29 static void jffs2_erase_failed(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb, uint32_t bad_…
30 static void jffs2_erase_succeeded(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb);
31 static void jffs2_mark_erased_block(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb);
33 static void jffs2_erase_block(struct jffs2_sb_info *c, in jffs2_erase_block() argument
39 ret = jffs2_flash_erase(c, jeb); in jffs2_erase_block()
41 jffs2_erase_succeeded(c, jeb); in jffs2_erase_block()
49 jeb->offset, jeb->offset, jeb->offset + c->sector_size)); in jffs2_erase_block()
53 mutex_lock(&c->erase_free_sem); in jffs2_erase_block()
54 spin_lock(&c->erase_completion_lock); in jffs2_erase_block()
55 list_move(&jeb->list, &c->erase_pending_list); in jffs2_erase_block()
56 c->erasing_size -= c->sector_size; in jffs2_erase_block()
57 c->dirty_size += c->sector_size; in jffs2_erase_block()
58 jeb->dirty_size = c->sector_size; in jffs2_erase_block()
59 spin_unlock(&c->erase_completion_lock); in jffs2_erase_block()
60 mutex_unlock(&c->erase_free_sem); in jffs2_erase_block()
66 instr->mtd = c->mtd; in jffs2_erase_block()
68 instr->len = c->sector_size; in jffs2_erase_block()
74 ((struct erase_priv_struct *)instr->priv)->c = c; in jffs2_erase_block()
76 ret = c->mtd->erase(c->mtd, instr); in jffs2_erase_block()
87 mutex_lock(&c->erase_free_sem); in jffs2_erase_block()
88 spin_lock(&c->erase_completion_lock); in jffs2_erase_block()
89 list_move(&jeb->list, &c->erase_pending_list); in jffs2_erase_block()
90 c->erasing_size -= c->sector_size; in jffs2_erase_block()
91 c->dirty_size += c->sector_size; in jffs2_erase_block()
92 jeb->dirty_size = c->sector_size; in jffs2_erase_block()
93 spin_unlock(&c->erase_completion_lock); in jffs2_erase_block()
94 mutex_unlock(&c->erase_free_sem); in jffs2_erase_block()
103 jffs2_erase_failed(c, jeb, bad_offset); in jffs2_erase_block()
106 void jffs2_erase_pending_blocks(struct jffs2_sb_info *c, int count) in jffs2_erase_pending_blocks() argument
110 mutex_lock(&c->erase_free_sem); in jffs2_erase_pending_blocks()
112 spin_lock(&c->erase_completion_lock); in jffs2_erase_pending_blocks()
114 while (!list_empty(&c->erase_complete_list) || in jffs2_erase_pending_blocks()
115 !list_empty(&c->erase_pending_list)) { in jffs2_erase_pending_blocks()
117 if (!list_empty(&c->erase_complete_list)) { in jffs2_erase_pending_blocks()
118 jeb = list_entry(c->erase_complete_list.next, struct jffs2_eraseblock, list); in jffs2_erase_pending_blocks()
119 list_move(&jeb->list, &c->erase_checking_list); in jffs2_erase_pending_blocks()
120 spin_unlock(&c->erase_completion_lock); in jffs2_erase_pending_blocks()
121 mutex_unlock(&c->erase_free_sem); in jffs2_erase_pending_blocks()
122 jffs2_mark_erased_block(c, jeb); in jffs2_erase_pending_blocks()
129 } else if (!list_empty(&c->erase_pending_list)) { in jffs2_erase_pending_blocks()
130 jeb = list_entry(c->erase_pending_list.next, struct jffs2_eraseblock, list); in jffs2_erase_pending_blocks()
133 c->erasing_size += c->sector_size; in jffs2_erase_pending_blocks()
134 c->wasted_size -= jeb->wasted_size; in jffs2_erase_pending_blocks()
135 c->free_size -= jeb->free_size; in jffs2_erase_pending_blocks()
136 c->used_size -= jeb->used_size; in jffs2_erase_pending_blocks()
137 c->dirty_size -= jeb->dirty_size; in jffs2_erase_pending_blocks()
139 jffs2_free_jeb_node_refs(c, jeb); in jffs2_erase_pending_blocks()
140 list_add(&jeb->list, &c->erasing_list); in jffs2_erase_pending_blocks()
141 spin_unlock(&c->erase_completion_lock); in jffs2_erase_pending_blocks()
142 mutex_unlock(&c->erase_free_sem); in jffs2_erase_pending_blocks()
144 jffs2_erase_block(c, jeb); in jffs2_erase_pending_blocks()
152 mutex_lock(&c->erase_free_sem); in jffs2_erase_pending_blocks()
153 spin_lock(&c->erase_completion_lock); in jffs2_erase_pending_blocks()
156 spin_unlock(&c->erase_completion_lock); in jffs2_erase_pending_blocks()
157 mutex_unlock(&c->erase_free_sem); in jffs2_erase_pending_blocks()
162 static void jffs2_erase_succeeded(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb) in jffs2_erase_succeeded() argument
165 mutex_lock(&c->erase_free_sem); in jffs2_erase_succeeded()
166 spin_lock(&c->erase_completion_lock); in jffs2_erase_succeeded()
167 list_move_tail(&jeb->list, &c->erase_complete_list); in jffs2_erase_succeeded()
168 spin_unlock(&c->erase_completion_lock); in jffs2_erase_succeeded()
169 mutex_unlock(&c->erase_free_sem); in jffs2_erase_succeeded()
171 jffs2_erase_pending_trigger(c); in jffs2_erase_succeeded()
174 static void jffs2_erase_failed(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb, uint32_t bad_… in jffs2_erase_failed() argument
178 if (jffs2_cleanmarker_oob(c) && (bad_offset != (uint32_t)MTD_FAIL_ADDR_UNKNOWN)) { in jffs2_erase_failed()
181 if (!jffs2_write_nand_badblock(c, jeb, bad_offset)) { in jffs2_erase_failed()
183 mutex_lock(&c->erase_free_sem); in jffs2_erase_failed()
184 spin_lock(&c->erase_completion_lock); in jffs2_erase_failed()
185 list_move(&jeb->list, &c->erase_pending_list); in jffs2_erase_failed()
186 c->erasing_size -= c->sector_size; in jffs2_erase_failed()
187 c->dirty_size += c->sector_size; in jffs2_erase_failed()
188 jeb->dirty_size = c->sector_size; in jffs2_erase_failed()
189 spin_unlock(&c->erase_completion_lock); in jffs2_erase_failed()
190 mutex_unlock(&c->erase_free_sem); in jffs2_erase_failed()
195 mutex_lock(&c->erase_free_sem); in jffs2_erase_failed()
196 spin_lock(&c->erase_completion_lock); in jffs2_erase_failed()
197 c->erasing_size -= c->sector_size; in jffs2_erase_failed()
198 c->bad_size += c->sector_size; in jffs2_erase_failed()
199 list_move(&jeb->list, &c->bad_list); in jffs2_erase_failed()
200 c->nr_erasing_blocks--; in jffs2_erase_failed()
201 spin_unlock(&c->erase_completion_lock); in jffs2_erase_failed()
202 mutex_unlock(&c->erase_free_sem); in jffs2_erase_failed()
203 wake_up(&c->erase_wait); in jffs2_erase_failed()
214 jffs2_erase_failed(priv->c, priv->jeb, instr->fail_addr); in jffs2_erase_callback()
216 jffs2_erase_succeeded(priv->c, priv->jeb); in jffs2_erase_callback()
224 static inline void jffs2_remove_node_refs_from_ino_list(struct jffs2_sb_info *c, in jffs2_remove_node_refs_from_ino_list() argument
268 jeb->offset, jeb->offset + c->sector_size, ic->ino)); in jffs2_remove_node_refs_from_ino_list()
291 jffs2_release_xattr_datum(c, (struct jffs2_xattr_datum *)ic); in jffs2_remove_node_refs_from_ino_list()
294 jffs2_release_xattr_ref(c, (struct jffs2_xattr_ref *)ic); in jffs2_remove_node_refs_from_ino_list()
299 jffs2_del_ino_cache(c, ic); in jffs2_remove_node_refs_from_ino_list()
303 void jffs2_free_jeb_node_refs(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb) in jffs2_free_jeb_node_refs() argument
318 jffs2_remove_node_refs_from_ino_list(c, ref, jeb); in jffs2_free_jeb_node_refs()
326 static int jffs2_block_check_erase(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb, uint32_t … in jffs2_block_check_erase() argument
333 if (c->mtd->point) { in jffs2_block_check_erase()
336 ret = c->mtd->point(c->mtd, jeb->offset, c->sector_size, in jffs2_block_check_erase()
342 if (retlen < c->sector_size) { in jffs2_block_check_erase()
345 c->mtd->unpoint(c->mtd, jeb->offset, retlen); in jffs2_block_check_erase()
354 c->mtd->unpoint(c->mtd, jeb->offset, c->sector_size); in jffs2_block_check_erase()
357 *wordebuf, jeb->offset + c->sector_size-retlen*sizeof(*wordebuf)); in jffs2_block_check_erase()
371 for (ofs = jeb->offset; ofs < jeb->offset + c->sector_size; ) { in jffs2_block_check_erase()
372 uint32_t readlen = min((uint32_t)PAGE_SIZE, jeb->offset + c->sector_size - ofs); in jffs2_block_check_erase()
377 ret = c->mtd->read(c->mtd, ofs, readlen, &retlen, ebuf); in jffs2_block_check_erase()
407 static void jffs2_mark_erased_block(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb) in jffs2_mark_erased_block() argument
413 switch (jffs2_block_check_erase(c, jeb, &bad_offset)) { in jffs2_mark_erased_block()
423 if (jffs2_cleanmarker_oob(c) || c->cleanmarker_size == 0) { in jffs2_mark_erased_block()
425 if (jffs2_cleanmarker_oob(c)) { in jffs2_mark_erased_block()
426 if (jffs2_write_nand_cleanmarker(c, jeb)) in jffs2_mark_erased_block()
435 .totlen = cpu_to_je32(c->cleanmarker_size) in jffs2_mark_erased_block()
438 jffs2_prealloc_raw_node_refs(c, jeb, 1); in jffs2_mark_erased_block()
444 ret = jffs2_flash_direct_writev(c, vecs, 1, jeb->offset, &retlen); in jffs2_mark_erased_block()
458 jeb->free_size = c->sector_size; in jffs2_mark_erased_block()
460 mutex_lock(&c->erase_free_sem); in jffs2_mark_erased_block()
461 spin_lock(&c->erase_completion_lock); in jffs2_mark_erased_block()
463 c->erasing_size -= c->sector_size; in jffs2_mark_erased_block()
464 c->free_size += c->sector_size; in jffs2_mark_erased_block()
467 if (c->cleanmarker_size && !jffs2_cleanmarker_oob(c)) in jffs2_mark_erased_block()
468 jffs2_link_node_ref(c, jeb, jeb->offset | REF_NORMAL, c->cleanmarker_size, NULL); in jffs2_mark_erased_block()
470 list_move_tail(&jeb->list, &c->free_list); in jffs2_mark_erased_block()
471 c->nr_erasing_blocks--; in jffs2_mark_erased_block()
472 c->nr_free_blocks++; in jffs2_mark_erased_block()
474 jffs2_dbg_acct_sanity_check_nolock(c, jeb); in jffs2_mark_erased_block()
475 jffs2_dbg_acct_paranoia_check_nolock(c, jeb); in jffs2_mark_erased_block()
477 spin_unlock(&c->erase_completion_lock); in jffs2_mark_erased_block()
478 mutex_unlock(&c->erase_free_sem); in jffs2_mark_erased_block()
479 wake_up(&c->erase_wait); in jffs2_mark_erased_block()
483 mutex_lock(&c->erase_free_sem); in jffs2_mark_erased_block()
484 spin_lock(&c->erase_completion_lock); in jffs2_mark_erased_block()
487 list_move(&jeb->list, &c->erasing_list); in jffs2_mark_erased_block()
488 spin_unlock(&c->erase_completion_lock); in jffs2_mark_erased_block()
489 mutex_unlock(&c->erase_free_sem); in jffs2_mark_erased_block()
490 jffs2_erase_failed(c, jeb, bad_offset); in jffs2_mark_erased_block()
495 jffs2_erase_pending_trigger(c); in jffs2_mark_erased_block()
496 mutex_lock(&c->erase_free_sem); in jffs2_mark_erased_block()
497 spin_lock(&c->erase_completion_lock); in jffs2_mark_erased_block()
498 list_move(&jeb->list, &c->erase_complete_list); in jffs2_mark_erased_block()
499 spin_unlock(&c->erase_completion_lock); in jffs2_mark_erased_block()
500 mutex_unlock(&c->erase_free_sem); in jffs2_mark_erased_block()