summaryrefslogtreecommitdiffstats
path: root/fs/jffs2/nodelist.c
diff options
context:
space:
mode:
authorDavid Woodhouse <dwmw2@infradead.org>2006-05-20 19:45:26 +0100
committerDavid Woodhouse <dwmw2@infradead.org>2006-05-20 19:45:26 +0100
commitf1f9671bd8f7d2ac6a918bad806ab5bdc0daaf4e (patch)
treef1fb5992fbd299375c911eb4c36d7fc8774f9208 /fs/jffs2/nodelist.c
parent0cfc7da3ff4b39a3aac261ab3f6b1329e2485653 (diff)
[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>
Diffstat (limited to 'fs/jffs2/nodelist.c')
-rw-r--r--fs/jffs2/nodelist.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/fs/jffs2/nodelist.c b/fs/jffs2/nodelist.c
index 4973cd648ba..1fc8aedb56f 100644
--- a/fs/jffs2/nodelist.c
+++ b/fs/jffs2/nodelist.c
@@ -1046,3 +1046,37 @@ void jffs2_kill_fragtree(struct rb_root *root, struct jffs2_sb_info *c)
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;
+}