From: David Woodhouse Date: Sat, 5 May 2007 08:52:49 +0000 (+0100) Subject: [JFFS2] Don't advance c->wbuf_ofs to next eraseblock after wbuf flush X-Git-Tag: v2.6.22-rc1~142^2~11 X-Git-Url: https://openfabrics.org/gitweb/?a=commitdiff_plain;h=3fddb6c985e3823c991399840d2d5ef5940e1b60;p=~emulex%2Finfiniband.git [JFFS2] Don't advance c->wbuf_ofs to next eraseblock after wbuf flush After flushing the last page of an eraseblock, don't leave the wbuf 'offset' field pointing at the start of the next physical eraseblock. This was causing a BUG() on NOR-ECC (Sibley) flash, where we start writing a little further in, after the cleanmarker. Debugged by Alexander Belyakov Signed-off-by: David Woodhouse --- diff --git a/fs/jffs2/wbuf.c b/fs/jffs2/wbuf.c index c556e85a565..91d1d0f1c66 100644 --- a/fs/jffs2/wbuf.c +++ b/fs/jffs2/wbuf.c @@ -637,7 +637,10 @@ static int __jffs2_flush_wbuf(struct jffs2_sb_info *c, int pad) memset(c->wbuf,0xff,c->wbuf_pagesize); /* adjust write buffer offset, else we get a non contiguous write bug */ - c->wbuf_ofs += c->wbuf_pagesize; + if (SECTOR_ADDR(c->wbuf_ofs) == SECTOR_ADDR(c->wbuf_ofs+c->wbuf_pagesize)) + c->wbuf_ofs += c->wbuf_pagesize; + else + c->wbuf_ofs = 0xffffffff; c->wbuf_len = 0; return 0; }