aboutsummaryrefslogtreecommitdiffstats
path: root/fs/jffs2/wbuf.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/jffs2/wbuf.c')
-rw-r--r--fs/jffs2/wbuf.c23
1 files changed, 8 insertions, 15 deletions
diff --git a/fs/jffs2/wbuf.c b/fs/jffs2/wbuf.c
index 4e583bfecf6e..b43aac7496ae 100644
--- a/fs/jffs2/wbuf.c
+++ b/fs/jffs2/wbuf.c
@@ -9,7 +9,7 @@
9 * 9 *
10 * For licensing information, see the file 'LICENCE' in this directory. 10 * For licensing information, see the file 'LICENCE' in this directory.
11 * 11 *
12 * $Id: wbuf.c,v 1.83 2005/01/24 21:24:15 hammache Exp $ 12 * $Id: wbuf.c,v 1.84 2005/01/25 20:11:11 hammache Exp $
13 * 13 *
14 */ 14 */
15 15
@@ -147,8 +147,7 @@ static void jffs2_block_refile(struct jffs2_sb_info *c, struct jffs2_eraseblock
147 D1(printk("Refiling block at %08x to bad_used_list\n", jeb->offset)); 147 D1(printk("Refiling block at %08x to bad_used_list\n", jeb->offset));
148 list_add(&jeb->list, &c->bad_used_list); 148 list_add(&jeb->list, &c->bad_used_list);
149 } else { 149 } else {
150 if (allow_empty == REFILE_NOTEMPTY) 150 BUG_ON(allow_empty == REFILE_NOTEMPTY);
151 BUG();
152 /* It has to have had some nodes or we couldn't be here */ 151 /* It has to have had some nodes or we couldn't be here */
153 D1(printk("Refiling block at %08x to erase_pending_list\n", jeb->offset)); 152 D1(printk("Refiling block at %08x to erase_pending_list\n", jeb->offset));
154 list_add(&jeb->list, &c->erase_pending_list); 153 list_add(&jeb->list, &c->erase_pending_list);
@@ -268,16 +267,15 @@ static void jffs2_wbuf_recover(struct jffs2_sb_info *c)
268 ret = jffs2_reserve_space_gc(c, end-start, &ofs, &len); 267 ret = jffs2_reserve_space_gc(c, end-start, &ofs, &len);
269 if (ret) { 268 if (ret) {
270 printk(KERN_WARNING "Failed to allocate space for wbuf recovery. Data loss ensues.\n"); 269 printk(KERN_WARNING "Failed to allocate space for wbuf recovery. Data loss ensues.\n");
271 if (buf) 270 kfree(buf);
272 kfree(buf);
273 return; 271 return;
274 } 272 }
275 if (end-start >= c->wbuf_pagesize) { 273 if (end-start >= c->wbuf_pagesize) {
276 /* Need to do another write immediately, but it's possible 274 /* Need to do another write immediately, but it's possible
277 that this is just because the wbuf itself is completely 275 that this is just because the wbuf itself is completely
278 full, and there's nothing earlier read back from the 276 full, and there's nothing earlier read back from the
279 flash. Hence 'buf' isn't necessarily what we're writing 277 flash. Hence 'buf' isn't necessarily what we're writing
280 from. */ 278 from. */
281 unsigned char *rewrite_buf = buf?:c->wbuf; 279 unsigned char *rewrite_buf = buf?:c->wbuf;
282 uint32_t towrite = (end-start) - ((end-start)%c->wbuf_pagesize); 280 uint32_t towrite = (end-start) - ((end-start)%c->wbuf_pagesize);
283 281
@@ -303,8 +301,7 @@ static void jffs2_wbuf_recover(struct jffs2_sb_info *c)
303 if (ret || retlen != towrite) { 301 if (ret || retlen != towrite) {
304 /* Argh. We tried. Really we did. */ 302 /* Argh. We tried. Really we did. */
305 printk(KERN_CRIT "Recovery of wbuf failed due to a second write error\n"); 303 printk(KERN_CRIT "Recovery of wbuf failed due to a second write error\n");
306 if (buf) 304 kfree(buf);
307 kfree(buf);
308 305
309 if (retlen) { 306 if (retlen) {
310 struct jffs2_raw_node_ref *raw2; 307 struct jffs2_raw_node_ref *raw2;
@@ -555,9 +552,7 @@ int jffs2_flush_wbuf_gc(struct jffs2_sb_info *c, uint32_t ino)
555 /* retry flushing wbuf in case jffs2_wbuf_recover 552 /* retry flushing wbuf in case jffs2_wbuf_recover
556 left some data in the wbuf */ 553 left some data in the wbuf */
557 if (ret) 554 if (ret)
558 {
559 ret = __jffs2_flush_wbuf(c, PAD_ACCOUNTING); 555 ret = __jffs2_flush_wbuf(c, PAD_ACCOUNTING);
560 }
561 up_write(&c->wbuf_sem); 556 up_write(&c->wbuf_sem);
562 } else while (old_wbuf_len && 557 } else while (old_wbuf_len &&
563 old_wbuf_ofs == c->wbuf_ofs) { 558 old_wbuf_ofs == c->wbuf_ofs) {
@@ -575,9 +570,7 @@ int jffs2_flush_wbuf_gc(struct jffs2_sb_info *c, uint32_t ino)
575 /* retry flushing wbuf in case jffs2_wbuf_recover 570 /* retry flushing wbuf in case jffs2_wbuf_recover
576 left some data in the wbuf */ 571 left some data in the wbuf */
577 if (ret) 572 if (ret)
578 {
579 ret = __jffs2_flush_wbuf(c, PAD_ACCOUNTING); 573 ret = __jffs2_flush_wbuf(c, PAD_ACCOUNTING);
580 }
581 up_write(&c->wbuf_sem); 574 up_write(&c->wbuf_sem);
582 break; 575 break;
583 } 576 }