[JFFS2] Introduce jffs2_link_node_ref() function to reduce code duplication
The same sequence of code was repeated in many places, to add a new
struct jffs2_raw_node_ref to an eraseblock and adjust the space accounting
accordingly. Move it out-of-line.
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
diff --git a/fs/jffs2/nodelist.c b/fs/jffs2/nodelist.c
index 4973cd6..1fc8aed 100644
--- a/fs/jffs2/nodelist.c
+++ b/fs/jffs2/nodelist.c
@@ -1046,3 +1046,37 @@
cond_resched();
}
}
+
+void jffs2_link_node_ref(struct jffs2_sb_info *c, struct jffs2_eraseblock *jeb,
+ struct jffs2_raw_node_ref *ref, uint32_t len)
+{
+ if (!jeb->first_node)
+ jeb->first_node = ref;
+ if (jeb->last_node)
+ jeb->last_node->next_phys = ref;
+ jeb->last_node = ref;
+
+ switch(ref_flags(ref)) {
+ case REF_UNCHECKED:
+ c->unchecked_size += len;
+ jeb->unchecked_size += len;
+ break;
+
+ case REF_NORMAL:
+ case REF_PRISTINE:
+ c->used_size += len;
+ jeb->used_size += len;
+ break;
+
+ case REF_OBSOLETE:
+ c->dirty_size += len;
+ jeb->used_size += len;
+ break;
+ }
+ c->free_size -= len;
+ jeb->free_size -= len;
+
+ /* Set __totlen field... for now */
+ ref->__totlen = len;
+ ref->next_phys = NULL;
+}