aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/jffs2/gc.c6
-rw-r--r--fs/jffs2/nodelist.h2
-rw-r--r--fs/jffs2/nodemgmt.c6
-rw-r--r--fs/jffs2/wbuf.c4
-rw-r--r--fs/jffs2/write.c12
-rw-r--r--fs/jffs2/xattr.c14
6 files changed, 15 insertions, 29 deletions
diff --git a/fs/jffs2/gc.c b/fs/jffs2/gc.c
index b0a5c407b476..4773ba24304f 100644
--- a/fs/jffs2/gc.c
+++ b/fs/jffs2/gc.c
@@ -627,8 +627,6 @@ static int jffs2_garbage_collect_pristine(struct jffs2_sb_info *c,
627 /* OK, all the CRCs are good; this node can just be copied as-is. */ 627 /* OK, all the CRCs are good; this node can just be copied as-is. */
628 retry: 628 retry:
629 nraw->flash_offset = phys_ofs; 629 nraw->flash_offset = phys_ofs;
630 nraw->__totlen = rawlen;
631 nraw->next_phys = NULL;
632 630
633 ret = jffs2_flash_write(c, phys_ofs, rawlen, &retlen, (char *)node); 631 ret = jffs2_flash_write(c, phys_ofs, rawlen, &retlen, (char *)node);
634 632
@@ -640,7 +638,7 @@ static int jffs2_garbage_collect_pristine(struct jffs2_sb_info *c,
640 nraw->next_in_ino = NULL; 638 nraw->next_in_ino = NULL;
641 639
642 nraw->flash_offset |= REF_OBSOLETE; 640 nraw->flash_offset |= REF_OBSOLETE;
643 jffs2_add_physical_node_ref(c, nraw); 641 jffs2_add_physical_node_ref(c, nraw, rawlen);
644 jffs2_mark_node_obsolete(c, nraw); 642 jffs2_mark_node_obsolete(c, nraw);
645 } else { 643 } else {
646 printk(KERN_NOTICE "Not marking the space at 0x%08x as dirty because the flash driver returned retlen zero\n", nraw->flash_offset); 644 printk(KERN_NOTICE "Not marking the space at 0x%08x as dirty because the flash driver returned retlen zero\n", nraw->flash_offset);
@@ -680,7 +678,7 @@ static int jffs2_garbage_collect_pristine(struct jffs2_sb_info *c,
680 goto out_node; 678 goto out_node;
681 } 679 }
682 nraw->flash_offset |= REF_PRISTINE; 680 nraw->flash_offset |= REF_PRISTINE;
683 jffs2_add_physical_node_ref(c, nraw); 681 jffs2_add_physical_node_ref(c, nraw, rawlen);
684 682
685 if (ic) { 683 if (ic) {
686 /* Link into per-inode list. This is safe because of the ic 684 /* Link into per-inode list. This is safe because of the ic
diff --git a/fs/jffs2/nodelist.h b/fs/jffs2/nodelist.h
index ca15b3c731cf..94ef88787347 100644
--- a/fs/jffs2/nodelist.h
+++ b/fs/jffs2/nodelist.h
@@ -362,7 +362,7 @@ int jffs2_reserve_space(struct jffs2_sb_info *c, uint32_t minsize, uint32_t *ofs
362 uint32_t *len, int prio, uint32_t sumsize); 362 uint32_t *len, int prio, uint32_t sumsize);
363int jffs2_reserve_space_gc(struct jffs2_sb_info *c, uint32_t minsize, uint32_t *ofs, 363int jffs2_reserve_space_gc(struct jffs2_sb_info *c, uint32_t minsize, uint32_t *ofs,
364 uint32_t *len, uint32_t sumsize); 364 uint32_t *len, uint32_t sumsize);
365int jffs2_add_physical_node_ref(struct jffs2_sb_info *c, struct jffs2_raw_node_ref *new); 365int jffs2_add_physical_node_ref(struct jffs2_sb_info *c, struct jffs2_raw_node_ref *new, uint32_t len);
366void jffs2_complete_reservation(struct jffs2_sb_info *c); 366void jffs2_complete_reservation(struct jffs2_sb_info *c);
367void jffs2_mark_node_obsolete(struct jffs2_sb_info *c, struct jffs2_raw_node_ref *raw); 367void jffs2_mark_node_obsolete(struct jffs2_sb_info *c, struct jffs2_raw_node_ref *raw);
368 368
diff --git a/fs/jffs2/nodemgmt.c b/fs/jffs2/nodemgmt.c
index d6eab1b7ad53..4701556be49d 100644
--- a/fs/jffs2/nodemgmt.c
+++ b/fs/jffs2/nodemgmt.c
@@ -374,7 +374,6 @@ static int jffs2_do_reserve_space(struct jffs2_sb_info *c, uint32_t minsize, uin
374 * @c: superblock info 374 * @c: superblock info
375 * @new: new node reference to add 375 * @new: new node reference to add
376 * @len: length of this physical node 376 * @len: length of this physical node
377 * @dirty: dirty flag for new node
378 * 377 *
379 * Should only be used to report nodes for which space has been allocated 378 * Should only be used to report nodes for which space has been allocated
380 * by jffs2_reserve_space. 379 * by jffs2_reserve_space.
@@ -382,13 +381,12 @@ static int jffs2_do_reserve_space(struct jffs2_sb_info *c, uint32_t minsize, uin
382 * Must be called with the alloc_sem held. 381 * Must be called with the alloc_sem held.
383 */ 382 */
384 383
385int jffs2_add_physical_node_ref(struct jffs2_sb_info *c, struct jffs2_raw_node_ref *new) 384int jffs2_add_physical_node_ref(struct jffs2_sb_info *c, struct jffs2_raw_node_ref *new, uint32_t len)
386{ 385{
387 struct jffs2_eraseblock *jeb; 386 struct jffs2_eraseblock *jeb;
388 uint32_t len;
389 387
390 jeb = &c->blocks[new->flash_offset / c->sector_size]; 388 jeb = &c->blocks[new->flash_offset / c->sector_size];
391 len = ref_totlen(c, jeb, new); 389 new->__totlen = len;
392 390
393 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)); 391 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));
394#if 1 392#if 1
diff --git a/fs/jffs2/wbuf.c b/fs/jffs2/wbuf.c
index 4cebf0e57c46..676b83410f8c 100644
--- a/fs/jffs2/wbuf.c
+++ b/fs/jffs2/wbuf.c
@@ -312,11 +312,9 @@ static void jffs2_wbuf_recover(struct jffs2_sb_info *c)
312 return; 312 return;
313 313
314 raw2->flash_offset = ofs | REF_OBSOLETE; 314 raw2->flash_offset = ofs | REF_OBSOLETE;
315 raw2->__totlen = ref_totlen(c, jeb, *first_raw);
316 raw2->next_phys = NULL;
317 raw2->next_in_ino = NULL; 315 raw2->next_in_ino = NULL;
318 316
319 jffs2_add_physical_node_ref(c, raw2); 317 jffs2_add_physical_node_ref(c, raw2, ref_totlen(c, jeb, *first_raw));
320 } 318 }
321 return; 319 return;
322 } 320 }
diff --git a/fs/jffs2/write.c b/fs/jffs2/write.c
index ff2b00b604ec..4462541d11f8 100644
--- a/fs/jffs2/write.c
+++ b/fs/jffs2/write.c
@@ -103,8 +103,6 @@ struct jffs2_full_dnode *jffs2_write_dnode(struct jffs2_sb_info *c, struct jffs2
103 fn->raw = raw; 103 fn->raw = raw;
104 104
105 raw->flash_offset = flash_ofs; 105 raw->flash_offset = flash_ofs;
106 raw->__totlen = PAD(sizeof(*ri)+datalen);
107 raw->next_phys = NULL;
108 106
109 if ((alloc_mode!=ALLOC_GC) && (je32_to_cpu(ri->version) < f->highest_version)) { 107 if ((alloc_mode!=ALLOC_GC) && (je32_to_cpu(ri->version) < f->highest_version)) {
110 BUG_ON(!retried); 108 BUG_ON(!retried);
@@ -133,7 +131,7 @@ struct jffs2_full_dnode *jffs2_write_dnode(struct jffs2_sb_info *c, struct jffs2
133 any node we write before the original intended end of 131 any node we write before the original intended end of
134 this node */ 132 this node */
135 raw->flash_offset |= REF_OBSOLETE; 133 raw->flash_offset |= REF_OBSOLETE;
136 jffs2_add_physical_node_ref(c, raw); 134 jffs2_add_physical_node_ref(c, raw, PAD(sizeof(*ri)+datalen));
137 jffs2_mark_node_obsolete(c, raw); 135 jffs2_mark_node_obsolete(c, raw);
138 } else { 136 } else {
139 printk(KERN_NOTICE "Not marking the space at 0x%08x as dirty because the flash driver returned retlen zero\n", raw->flash_offset); 137 printk(KERN_NOTICE "Not marking the space at 0x%08x as dirty because the flash driver returned retlen zero\n", raw->flash_offset);
@@ -191,7 +189,7 @@ struct jffs2_full_dnode *jffs2_write_dnode(struct jffs2_sb_info *c, struct jffs2
191 } else { 189 } else {
192 raw->flash_offset |= REF_NORMAL; 190 raw->flash_offset |= REF_NORMAL;
193 } 191 }
194 jffs2_add_physical_node_ref(c, raw); 192 jffs2_add_physical_node_ref(c, raw, PAD(sizeof(*ri)+datalen));
195 193
196 /* Link into per-inode list */ 194 /* Link into per-inode list */
197 spin_lock(&c->erase_completion_lock); 195 spin_lock(&c->erase_completion_lock);
@@ -259,8 +257,6 @@ struct jffs2_full_dirent *jffs2_write_dirent(struct jffs2_sb_info *c, struct jff
259 fd->raw = raw; 257 fd->raw = raw;
260 258
261 raw->flash_offset = flash_ofs; 259 raw->flash_offset = flash_ofs;
262 raw->__totlen = PAD(sizeof(*rd)+namelen);
263 raw->next_phys = NULL;
264 260
265 if ((alloc_mode!=ALLOC_GC) && (je32_to_cpu(rd->version) < f->highest_version)) { 261 if ((alloc_mode!=ALLOC_GC) && (je32_to_cpu(rd->version) < f->highest_version)) {
266 BUG_ON(!retried); 262 BUG_ON(!retried);
@@ -281,7 +277,7 @@ struct jffs2_full_dirent *jffs2_write_dirent(struct jffs2_sb_info *c, struct jff
281 if (retlen) { 277 if (retlen) {
282 raw->next_in_ino = NULL; 278 raw->next_in_ino = NULL;
283 raw->flash_offset |= REF_OBSOLETE; 279 raw->flash_offset |= REF_OBSOLETE;
284 jffs2_add_physical_node_ref(c, raw); 280 jffs2_add_physical_node_ref(c, raw, PAD(sizeof(*rd)+namelen));
285 jffs2_mark_node_obsolete(c, raw); 281 jffs2_mark_node_obsolete(c, raw);
286 } else { 282 } else {
287 printk(KERN_NOTICE "Not marking the space at 0x%08x as dirty because the flash driver returned retlen zero\n", raw->flash_offset); 283 printk(KERN_NOTICE "Not marking the space at 0x%08x as dirty because the flash driver returned retlen zero\n", raw->flash_offset);
@@ -327,7 +323,7 @@ struct jffs2_full_dirent *jffs2_write_dirent(struct jffs2_sb_info *c, struct jff
327 } 323 }
328 /* Mark the space used */ 324 /* Mark the space used */
329 raw->flash_offset |= REF_PRISTINE; 325 raw->flash_offset |= REF_PRISTINE;
330 jffs2_add_physical_node_ref(c, raw); 326 jffs2_add_physical_node_ref(c, raw, PAD(sizeof(*rd)+namelen));
331 327
332 spin_lock(&c->erase_completion_lock); 328 spin_lock(&c->erase_completion_lock);
333 raw->next_in_ino = f->inocache->nodes; 329 raw->next_in_ino = f->inocache->nodes;
diff --git a/fs/jffs2/xattr.c b/fs/jffs2/xattr.c
index 057bd4dcf665..e16f8460ff04 100644
--- a/fs/jffs2/xattr.c
+++ b/fs/jffs2/xattr.c
@@ -322,8 +322,6 @@ static int save_xattr_datum(struct jffs2_sb_info *c, struct jffs2_xattr_datum *x
322 if (!raw) 322 if (!raw)
323 return -ENOMEM; 323 return -ENOMEM;
324 raw->flash_offset = phys_ofs; 324 raw->flash_offset = phys_ofs;
325 raw->__totlen = PAD(totlen);
326 raw->next_phys = NULL;
327 raw->next_in_ino = (void *)xd; 325 raw->next_in_ino = (void *)xd;
328 326
329 /* Setup raw-xattr */ 327 /* Setup raw-xattr */
@@ -348,17 +346,17 @@ static int save_xattr_datum(struct jffs2_sb_info *c, struct jffs2_xattr_datum *x
348 if (length) { 346 if (length) {
349 raw->flash_offset |= REF_OBSOLETE; 347 raw->flash_offset |= REF_OBSOLETE;
350 raw->next_in_ino = NULL; 348 raw->next_in_ino = NULL;
351 jffs2_add_physical_node_ref(c, raw); 349 jffs2_add_physical_node_ref(c, raw, PAD(totlen));
352 jffs2_mark_node_obsolete(c, raw); 350 jffs2_mark_node_obsolete(c, raw);
353 } else { 351 } else {
354 jffs2_free_raw_node_ref(raw); 352 jffs2_free_raw_node_ref(raw);
355 } 353 }
356 return rc; 354 return rc;
357 } 355 }
358 BUG_ON(raw->__totlen < sizeof(struct jffs2_raw_xattr)); 356
359 /* success */ 357 /* success */
360 raw->flash_offset |= REF_PRISTINE; 358 raw->flash_offset |= REF_PRISTINE;
361 jffs2_add_physical_node_ref(c, raw); 359 jffs2_add_physical_node_ref(c, raw, PAD(totlen));
362 if (xd->node) 360 if (xd->node)
363 delete_xattr_datum_node(c, xd); 361 delete_xattr_datum_node(c, xd);
364 xd->node = raw; 362 xd->node = raw;
@@ -568,8 +566,6 @@ static int save_xattr_ref(struct jffs2_sb_info *c, struct jffs2_xattr_ref *ref,
568 if (!raw) 566 if (!raw)
569 return -ENOMEM; 567 return -ENOMEM;
570 raw->flash_offset = phys_ofs; 568 raw->flash_offset = phys_ofs;
571 raw->__totlen = PAD(sizeof(rr));
572 raw->next_phys = NULL;
573 raw->next_in_ino = (void *)ref; 569 raw->next_in_ino = (void *)ref;
574 570
575 rr.magic = cpu_to_je16(JFFS2_MAGIC_BITMASK); 571 rr.magic = cpu_to_je16(JFFS2_MAGIC_BITMASK);
@@ -589,7 +585,7 @@ static int save_xattr_ref(struct jffs2_sb_info *c, struct jffs2_xattr_ref *ref,
589 if (length) { 585 if (length) {
590 raw->flash_offset |= REF_OBSOLETE; 586 raw->flash_offset |= REF_OBSOLETE;
591 raw->next_in_ino = NULL; 587 raw->next_in_ino = NULL;
592 jffs2_add_physical_node_ref(c, raw); 588 jffs2_add_physical_node_ref(c, raw, PAD(sizeof(rr)));
593 jffs2_mark_node_obsolete(c, raw); 589 jffs2_mark_node_obsolete(c, raw);
594 } else { 590 } else {
595 jffs2_free_raw_node_ref(raw); 591 jffs2_free_raw_node_ref(raw);
@@ -598,7 +594,7 @@ static int save_xattr_ref(struct jffs2_sb_info *c, struct jffs2_xattr_ref *ref,
598 } 594 }
599 raw->flash_offset |= REF_PRISTINE; 595 raw->flash_offset |= REF_PRISTINE;
600 596
601 jffs2_add_physical_node_ref(c, raw); 597 jffs2_add_physical_node_ref(c, raw, PAD(sizeof(rr)));
602 if (ref->node) 598 if (ref->node)
603 delete_xattr_ref_node(c, ref); 599 delete_xattr_ref_node(c, ref);
604 ref->node = raw; 600 ref->node = raw;