|
@@ -212,20 +212,25 @@ out:
|
|
|
int jffs2_reserve_space_gc(struct jffs2_sb_info *c, uint32_t minsize,
|
|
|
uint32_t *len, uint32_t sumsize)
|
|
|
{
|
|
|
- int ret = -EAGAIN;
|
|
|
+ int ret;
|
|
|
minsize = PAD(minsize);
|
|
|
|
|
|
jffs2_dbg(1, "%s(): Requested 0x%x bytes\n", __func__, minsize);
|
|
|
|
|
|
- spin_lock(&c->erase_completion_lock);
|
|
|
- while(ret == -EAGAIN) {
|
|
|
+ while (true) {
|
|
|
+ spin_lock(&c->erase_completion_lock);
|
|
|
ret = jffs2_do_reserve_space(c, minsize, len, sumsize);
|
|
|
if (ret) {
|
|
|
jffs2_dbg(1, "%s(): looping, ret is %d\n",
|
|
|
__func__, ret);
|
|
|
}
|
|
|
+ spin_unlock(&c->erase_completion_lock);
|
|
|
+
|
|
|
+ if (ret == -EAGAIN)
|
|
|
+ cond_resched();
|
|
|
+ else
|
|
|
+ break;
|
|
|
}
|
|
|
- spin_unlock(&c->erase_completion_lock);
|
|
|
if (!ret)
|
|
|
ret = jffs2_prealloc_raw_node_refs(c, c->nextblock, 1);
|
|
|
|