Question regading Cleanmarker.
Hi all,
I am analysing the jffs2 methodology for updating the flash memory. I understand that the jffs2_sb_info maintains three list i.e free_list, clean_list and dirty_list.
the garbage collector acts on the blocks on the dirty_list and on erasing those blocks writes a CLEANMARKER to the first 12 bytes indicating succesful erase and move the block from dirty_list to free_list.
So all the blocks in the free_list are empty with first twelve bytes having a CLEANMARKER. Whenever some node has to be written on the flash, a block from the free_list is picked and written.
whether it will overwrite the CLEANMARKER bytes... if so then it has to perform erase of the whole block again...
else the block is appended after the CLEANMARKER bytes... if so, then after some time when this block moves from clean_list to dirty_list (by some updations on the file data or else) how will the garbage collector identify the block as clean/unclean as the the CLEANMARKER will be present.
whether the garbage collector neglects this CLEANMARKER when is it getting updated or removed? else after some point of time, all the eraseblocks will have a CLEANMARKER which will defeat the basic purpose of having a CLEANMARKER.
there is one more query about delayed write. What is the size of the buffer which gets written on the flash? is it the page size or the erase block size or is it a function of time?
Can you help in clearing my doubt?
Signature · 5 lines
Thanks & Regards Nikhil Shirodkar Project Engineer NISG, CDAC
Quoted 6 lines · Nikhil
Hi all,
I am analysing the jffs2 methodology for updating the flash memory. I understand that the
jffs2_sb_infomaintains three list i.efree_list,clean_listanddirty_list.
And the bad_list.
Quoted 5 lines
the garbage collector acts on the blocks on the
dirty_listand on erasing those blocks writes a CLEANMARKER to the first 12 bytes indicating succesful erase and move the block fromdirty_listtofree_list.
Yep.
Quoted 3 lines
So all the blocks in the
free_listare empty with first twelve bytes having a CLEANMARKER. Whenever some node has to be written on the flash, a block from thefree_listis picked and written.
Yep.
Quoted 3 lines
whether it will overwrite the CLEANMARKER bytes... if so then it has to perform erase of the whole block again...
No, it isn't erased again.
Quoted 6 lines
else the block is appended after the CLEANMARKER bytes... if so, then after some time when this block moves from
clean_listtodirty_list(by some updations on the file data or else) how will the garbage collector identify the block as clean/unclean as the the CLEANMARKER will be present.
The node for the cleanmarker is obsoleted.
Quoted 5 lines
whether the garbage collector neglects this CLEANMARKER when is it getting updated or removed? else after some point of time, all the eraseblocks will have a CLEANMARKER which will defeat the basic purpose of having a CLEANMARKER.
It detects that it's obsoleted. The garbage collector won't GC an obsoleted node since that would be a waste of time.
Quoted 3 lines
there is one more query about delayed write. What is the size of the buffer which gets written on the flash? is it the page size or the erase block size or is it a function of time?
The write buffer is used on NAND, DataFlash, and NOR flash with transparent ECC. For plain NOR flash (minus the new Sibley flashes) the wbuf isn't used. The size of the buffer depends on the chip. For NAND, it is the page size. For NOR+ECC, it is the minimum write size which is quite small. I'm not sure about DataFlash or Sibley.
Quoted 2 lines
Can you help in clearing my doubt?
Hope that helps.
josh