diff options
Diffstat (limited to 'fs/ubifs/orphan.c')
-rw-r--r-- | fs/ubifs/orphan.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/fs/ubifs/orphan.c b/fs/ubifs/orphan.c index 8534d9c6492f..ba32da3fe08a 100644 --- a/fs/ubifs/orphan.c +++ b/fs/ubifs/orphan.c | |||
@@ -126,13 +126,14 @@ void ubifs_delete_orphan(struct ubifs_info *c, ino_t inum) | |||
126 | else if (inum > o->inum) | 126 | else if (inum > o->inum) |
127 | p = p->rb_right; | 127 | p = p->rb_right; |
128 | else { | 128 | else { |
129 | if (o->dnext) { | 129 | if (o->del) { |
130 | spin_unlock(&c->orphan_lock); | 130 | spin_unlock(&c->orphan_lock); |
131 | dbg_gen("deleted twice ino %lu", | 131 | dbg_gen("deleted twice ino %lu", |
132 | (unsigned long)inum); | 132 | (unsigned long)inum); |
133 | return; | 133 | return; |
134 | } | 134 | } |
135 | if (o->cmt) { | 135 | if (o->cmt) { |
136 | o->del = 1; | ||
136 | o->dnext = c->orph_dnext; | 137 | o->dnext = c->orph_dnext; |
137 | c->orph_dnext = o; | 138 | c->orph_dnext = o; |
138 | spin_unlock(&c->orphan_lock); | 139 | spin_unlock(&c->orphan_lock); |
@@ -447,6 +448,7 @@ static void erase_deleted(struct ubifs_info *c) | |||
447 | orphan = dnext; | 448 | orphan = dnext; |
448 | dnext = orphan->dnext; | 449 | dnext = orphan->dnext; |
449 | ubifs_assert(!orphan->new); | 450 | ubifs_assert(!orphan->new); |
451 | ubifs_assert(orphan->del); | ||
450 | rb_erase(&orphan->rb, &c->orph_tree); | 452 | rb_erase(&orphan->rb, &c->orph_tree); |
451 | list_del(&orphan->list); | 453 | list_del(&orphan->list); |
452 | c->tot_orphans -= 1; | 454 | c->tot_orphans -= 1; |
@@ -536,6 +538,7 @@ static int insert_dead_orphan(struct ubifs_info *c, ino_t inum) | |||
536 | rb_link_node(&orphan->rb, parent, p); | 538 | rb_link_node(&orphan->rb, parent, p); |
537 | rb_insert_color(&orphan->rb, &c->orph_tree); | 539 | rb_insert_color(&orphan->rb, &c->orph_tree); |
538 | list_add_tail(&orphan->list, &c->orph_list); | 540 | list_add_tail(&orphan->list, &c->orph_list); |
541 | orphan->del = 1; | ||
539 | orphan->dnext = c->orph_dnext; | 542 | orphan->dnext = c->orph_dnext; |
540 | c->orph_dnext = orphan; | 543 | c->orph_dnext = orphan; |
541 | dbg_mnt("ino %lu, new %d, tot %d", (unsigned long)inum, | 544 | dbg_mnt("ino %lu, new %d, tot %d", (unsigned long)inum, |