mtd/fs/jffs2 nodemgmt.c,1.92,1.93
gleixner at infradead.org
gleixner at infradead.org
Tue Feb 18 13:37:44 EST 2003
Update of /home/cvs/mtd/fs/jffs2
In directory phoenix.infradead.org:/tmp/cvs-serv20570
Modified Files:
nodemgmt.c
Log Message:
fix possibilty, that a fresh dirtied block will stay on clean-list
Index: nodemgmt.c
===================================================================
RCS file: /home/cvs/mtd/fs/jffs2/nodemgmt.c,v
retrieving revision 1.92
retrieving revision 1.93
diff -u -r1.92 -r1.93
--- nodemgmt.c 22 Jan 2003 14:40:26 -0000 1.92
+++ nodemgmt.c 18 Feb 2003 18:37:41 -0000 1.93
@@ -344,7 +344,7 @@
struct jffs2_eraseblock *jeb;
int blocknr;
struct jffs2_unknown_node n;
- int ret;
+ int ret, addedsize;
size_t retlen;
if(!ref) {
@@ -384,14 +384,17 @@
c->used_size -= ref->totlen;
}
+ // Take care, that wasted size is taken into concern
if ((jeb->dirty_size || ISDIRTY(jeb->wasted_size + ref->totlen)) && jeb != c->nextblock) {
D1(printk("Dirtying\n"));
- jeb->dirty_size += ref->totlen + jeb->wasted_size;
- c->dirty_size += ref->totlen + jeb->wasted_size;
+ addedsize = ref->totlen + jeb->wasted_size;
+ jeb->dirty_size += addedsize;
+ c->dirty_size += addedsize;
c->wasted_size -= jeb->wasted_size;
jeb->wasted_size = 0;
} else {
D1(printk("Wasting\n"));
+ addedsize = 0;
jeb->wasted_size += ref->totlen;
c->wasted_size += ref->totlen;
}
@@ -466,7 +469,7 @@
D1(printk(KERN_DEBUG "Done OK\n"));
} else if (jeb == c->gcblock) {
D2(printk(KERN_DEBUG "Not moving gcblock 0x%08x to dirty_list\n", jeb->offset));
- } else if (ISDIRTY(jeb->dirty_size) && !ISDIRTY(jeb->dirty_size - ref->totlen)) {
+ } else if (ISDIRTY(jeb->dirty_size) && !ISDIRTY(jeb->dirty_size - addedsize)) {
D1(printk(KERN_DEBUG "Eraseblock at 0x%08x is freshly dirtied. Removing from clean list...\n", jeb->offset));
list_del(&jeb->list);
D1(printk(KERN_DEBUG "...and adding to dirty_list\n"));
More information about the linux-mtd-cvs
mailing list