If __totlen is going away, we need to pass the length in separately.
Also stop callers from needlessly setting ref->next_phys to NULL,
since that's done for them... and since that'll also be going away soon.
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
        /* OK, all the CRCs are good; this node can just be copied as-is. */
  retry:
        nraw->flash_offset = phys_ofs;
-       nraw->__totlen = rawlen;
-       nraw->next_phys = NULL;
 
        ret = jffs2_flash_write(c, phys_ofs, rawlen, &retlen, (char *)node);
 
                        nraw->next_in_ino = NULL;
 
                        nraw->flash_offset |= REF_OBSOLETE;
-                       jffs2_add_physical_node_ref(c, nraw);
+                       jffs2_add_physical_node_ref(c, nraw, rawlen);
                        jffs2_mark_node_obsolete(c, nraw);
                } else {
                        printk(KERN_NOTICE "Not marking the space at 0x%08x as dirty because the flash driver returned retlen zero\n", nraw->flash_offset);
                goto out_node;
        }
        nraw->flash_offset |= REF_PRISTINE;
-       jffs2_add_physical_node_ref(c, nraw);
+       jffs2_add_physical_node_ref(c, nraw, rawlen);
 
        if (ic) {
                /* Link into per-inode list. This is safe because of the ic
 
                        uint32_t *len, int prio, uint32_t sumsize);
 int jffs2_reserve_space_gc(struct jffs2_sb_info *c, uint32_t minsize, uint32_t *ofs,
                        uint32_t *len, uint32_t sumsize);
-int jffs2_add_physical_node_ref(struct jffs2_sb_info *c, struct jffs2_raw_node_ref *new);
+int jffs2_add_physical_node_ref(struct jffs2_sb_info *c, struct jffs2_raw_node_ref *new, uint32_t len);
 void jffs2_complete_reservation(struct jffs2_sb_info *c);
 void jffs2_mark_node_obsolete(struct jffs2_sb_info *c, struct jffs2_raw_node_ref *raw);
 
 
  *     @c: superblock info
  *     @new: new node reference to add
  *     @len: length of this physical node
- *     @dirty: dirty flag for new node
  *
  *     Should only be used to report nodes for which space has been allocated
  *     by jffs2_reserve_space.
  *     Must be called with the alloc_sem held.
  */
 
-int jffs2_add_physical_node_ref(struct jffs2_sb_info *c, struct jffs2_raw_node_ref *new)
+int jffs2_add_physical_node_ref(struct jffs2_sb_info *c, struct jffs2_raw_node_ref *new, uint32_t len)
 {
        struct jffs2_eraseblock *jeb;
-       uint32_t len;
 
        jeb = &c->blocks[new->flash_offset / c->sector_size];
-       len = ref_totlen(c, jeb, new);
+       new->__totlen = len;
 
        D1(printk(KERN_DEBUG "jffs2_add_physical_node_ref(): Node at 0x%x(%d), size 0x%x\n", ref_offset(new), ref_flags(new), len));
 #if 1
 
                                        return;
 
                                raw2->flash_offset = ofs | REF_OBSOLETE;
-                               raw2->__totlen = ref_totlen(c, jeb, *first_raw);
-                               raw2->next_phys = NULL;
                                raw2->next_in_ino = NULL;
 
-                               jffs2_add_physical_node_ref(c, raw2);
+                               jffs2_add_physical_node_ref(c, raw2, ref_totlen(c, jeb, *first_raw));
                        }
                        return;
                }
 
        fn->raw = raw;
 
        raw->flash_offset = flash_ofs;
-       raw->__totlen = PAD(sizeof(*ri)+datalen);
-       raw->next_phys = NULL;
 
        if ((alloc_mode!=ALLOC_GC) && (je32_to_cpu(ri->version) < f->highest_version)) {
                BUG_ON(!retried);
                           any node we write before the original intended end of
                           this node */
                        raw->flash_offset |= REF_OBSOLETE;
-                       jffs2_add_physical_node_ref(c, raw);
+                       jffs2_add_physical_node_ref(c, raw, PAD(sizeof(*ri)+datalen));
                        jffs2_mark_node_obsolete(c, raw);
                } else {
                        printk(KERN_NOTICE "Not marking the space at 0x%08x as dirty because the flash driver returned retlen zero\n", raw->flash_offset);
        } else {
                raw->flash_offset |= REF_NORMAL;
        }
-       jffs2_add_physical_node_ref(c, raw);
+       jffs2_add_physical_node_ref(c, raw, PAD(sizeof(*ri)+datalen));
 
        /* Link into per-inode list */
        spin_lock(&c->erase_completion_lock);
        fd->raw = raw;
 
        raw->flash_offset = flash_ofs;
-       raw->__totlen = PAD(sizeof(*rd)+namelen);
-       raw->next_phys = NULL;
 
        if ((alloc_mode!=ALLOC_GC) && (je32_to_cpu(rd->version) < f->highest_version)) {
                BUG_ON(!retried);
                if (retlen) {
                        raw->next_in_ino = NULL;
                        raw->flash_offset |= REF_OBSOLETE;
-                       jffs2_add_physical_node_ref(c, raw);
+                       jffs2_add_physical_node_ref(c, raw, PAD(sizeof(*rd)+namelen));
                        jffs2_mark_node_obsolete(c, raw);
                } else {
                        printk(KERN_NOTICE "Not marking the space at 0x%08x as dirty because the flash driver returned retlen zero\n", raw->flash_offset);
        }
        /* Mark the space used */
        raw->flash_offset |= REF_PRISTINE;
-       jffs2_add_physical_node_ref(c, raw);
+       jffs2_add_physical_node_ref(c, raw, PAD(sizeof(*rd)+namelen));
 
        spin_lock(&c->erase_completion_lock);
        raw->next_in_ino = f->inocache->nodes;
 
        if (!raw)
                return -ENOMEM;
        raw->flash_offset = phys_ofs;
-       raw->__totlen = PAD(totlen);
-       raw->next_phys = NULL;
        raw->next_in_ino = (void *)xd;
 
        /* Setup raw-xattr */
                if (length) {
                        raw->flash_offset |= REF_OBSOLETE;
                        raw->next_in_ino = NULL;
-                       jffs2_add_physical_node_ref(c, raw);
+                       jffs2_add_physical_node_ref(c, raw, PAD(totlen));
                        jffs2_mark_node_obsolete(c, raw);
                } else {
                        jffs2_free_raw_node_ref(raw);
                }
                return rc;
        }
-       BUG_ON(raw->__totlen < sizeof(struct jffs2_raw_xattr));
+
        /* success */
        raw->flash_offset |= REF_PRISTINE;
-       jffs2_add_physical_node_ref(c, raw);
+       jffs2_add_physical_node_ref(c, raw, PAD(totlen));
        if (xd->node)
                delete_xattr_datum_node(c, xd);
        xd->node = raw;
        if (!raw)
                return -ENOMEM;
        raw->flash_offset = phys_ofs;
-       raw->__totlen = PAD(sizeof(rr));
-       raw->next_phys = NULL;
        raw->next_in_ino = (void *)ref;
 
        rr.magic = cpu_to_je16(JFFS2_MAGIC_BITMASK);
                if (length) {
                        raw->flash_offset |= REF_OBSOLETE;
                        raw->next_in_ino = NULL;
-                       jffs2_add_physical_node_ref(c, raw);
+                       jffs2_add_physical_node_ref(c, raw, PAD(sizeof(rr)));
                        jffs2_mark_node_obsolete(c, raw);
                } else {
                        jffs2_free_raw_node_ref(raw);
        }
        raw->flash_offset |= REF_PRISTINE;
 
-       jffs2_add_physical_node_ref(c, raw);
+       jffs2_add_physical_node_ref(c, raw, PAD(sizeof(rr)));
        if (ref->node)
                delete_xattr_ref_node(c, ref);
        ref->node = raw;