This is the mail archive of the ecos-discuss@sources.redhat.com mailing list for the eCos project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: jffs2 BUG:s in jffs2_garbage_collect_dnode


On Wed, Oct 20, 2004 at 05:49:03PM +0200, Per Hedblom wrote:
> I have found that jffs2 fails to garbage collect the inode that it 
> currently adds data to.
> The result is that jffs2_garbage_collect_dnode ends with a BUG() call.
> I have created a test case that I run on the ecos synt target.
> My test stresses the jffs2 with a near to full file system.
> I add files until I get ENOSPC and the remove an old file to make space for 
> a new one.
> 
> Here is how it goes:
> ----------------------------
> User level code:
> Open file /small_files/127 for append (inode #186)
> Write 12000 bytes to file /small_files/127
> JFFS2:
> jffs2_gc_fetch_inode  #169 link=1
> jffs2_gc_fetch_inode  #167 link=1
> jffs2_gc_fetch_inode  #166 link=1
> jffs2_gc_fetch_inode  #172 link=1
> jffs2_gc_fetch_inode  #172 link=1
> jffs2_gc_fetch_inode  #178 link=1
> jffs2_gc_fetch_inode  #173 link=1
> jffs2_write_inode_range:increasing writtenlen by 204 #186
> jffs2_write_inode_range:increasing writtenlen by 84 #186
> jffs2_gc_fetch_inode  #186 link=1
> BUG() at /home/perhedblom/redhat/ecos/packages/fs/jffs2/current/src/gc.c 
> 1161
> ----------------------------
> 
> The test that fails is BUG_ON(end > JFFS2_F_I_SIZE(f)) in the function 
> jffs2_garbage_collect_dnode in gc.c.
> 
> The problem is that the 288(=204+84) bytes latest written are not added to 
> the inode->i_size yet but already available in the frag tree.
> 
> I guess that this problem is only related to ecos/jffs2.
> I can add code to modify the inode->i_size in the jffs2_write_inode_range 
> after each successful written but I don't think this is correct to the 
> jffs2 architecture and I need to restore the i_size if  write fails later 
> and needs to return an error code.
> 
> I can remove the BUG test in gc.c
> I suppose it is correct of jffs2 to garbage collect the node that is 
> currently added to.

Removing the BUG is not the correct solution. There BUG is there for a
reason. 

I suggest you ask the people of the mtd mailling list. I don't have
enought knownledge of the insides of jffs2 to be able to debug this.

        Andrew

-- 
Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]