123
124 if (!--count) {
125 D1(printk(KERN_DEBUG "Count reached. jffs2_erase_pending_blocks leaving\n"));
126 goto done;
127 }
128
129 } else if (!list_empty(&c->erase_pending_list)) {
130 jeb = list_entry(c->erase_pending_list.next, struct jffs2_eraseblock, list);
131 D1(printk(KERN_DEBUG "Starting erase of pending block 0x%08x\n", jeb->offset));
132 list_del(&jeb->list);
133 c->erasing_size += c->sector_size;
134 c->wasted_size -= jeb->wasted_size;
135 c->free_size -= jeb->free_size;
136 c->used_size -= jeb->used_size;
137 c->dirty_size -= jeb->dirty_size;
138 jeb->wasted_size = jeb->used_size = jeb->dirty_size = jeb->free_size = 0;
139 jffs2_free_jeb_node_refs(c, jeb);
140 list_add(&jeb->list, &c->erasing_list);
141 spin_unlock(&c->erase_completion_lock);
142 mutex_unlock(&c->erase_free_sem);
143
144 jffs2_erase_block(c, jeb);
145
146 } else {
147 BUG();
148 }
149
150
151 yield();
152 mutex_lock(&c->erase_free_sem);
153 spin_lock(&c->erase_completion_lock);
154 }
155
156 spin_unlock(&c->erase_completion_lock);
157 mutex_unlock(&c->erase_free_sem);
158 done:
159 D1(printk(KERN_DEBUG "jffs2_erase_pending_blocks completed\n"));
160}
161
162static void jffs2_erase_succeeded(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb)
163{