Re: [Yaffs] df problem on yaffs2

Top Page
Attachments:
Message as email
+ (text/plain)
Delete this message
Reply to this message
Author: Charles Manning
Date:  
To: yaffs
Subject: Re: [Yaffs] df problem on yaffs2
On Saturday 19 December 2009 04:59:46 Peter Barada wrote:
> On Fri, 2009-12-18 at 18:03 +0800, JiSheng Zhang wrote:
> > Hi Charles,
> >
> > 2009/12/16 Charles Manning <>:
> > > On Wednesday 16 December 2009 16:36:02 JiSheng Zhang wrote:
> > >> 2009/12/16 JiSheng Zhang <>:
> > >> > Hi list,
> > >> >
> > >> > First mount an empty partition, then cp some files to the mnt dir
> > >> > then run "df", and then delete all the files, then run "df" again.
> > >> > df report this time is wrong. It seems that the chunks occupied by
> > >> > unlinked files aren't recycled until needed.
> > >> >
> > >> > Is this a bug or characteristic?
> > >
> > > I don't see that problem.
> > >
> > > root@linux-dual-head:/opt/y/cvs/yaffs2# mount -t yaffs2 /dev/mtdblock0
> > > /mnt root@linux-dual-head:/opt/y/cvs/yaffs2# df
> > > Filesystem           1K-blocks      Used Available Use% Mounted on
> > > /dev/mtdblock0           65536      1152     64384   2% /mnt

> >
> > Here used blocks is 1152.
> >
> > > root@linux-dual-head:/opt/y/cvs/yaffs2# cp * /mnt
> > > root@linux-dual-head:/opt/y/cvs/yaffs2# df
> > > Filesystem           1K-blocks      Used Available Use% Mounted on
> > > /dev/mtdblock0           65536      5860     59676   9% /mnt
> > > root@linux-dual-head:/opt/y/cvs/yaffs2# rm /mnt/*
> > > root@linux-dual-head:/opt/y/cvs/yaffs2# df
> > > Filesystem           1K-blocks      Used Available Use% Mounted on
> > > /dev/mtdblock0           65536      1156     64380   2% /mnt

> >
> > Here used blocks is 1156. So there are 4 blocks lost.
>
> Would that be the root directory?

Yes that is one chunk which has been used by the root directory.

> I wonder if:
>
> mount -t yaffs2 /dev/mtdblock0 /mnt
> df
> ls -ld /mnt
> cp * /mnt
> df
> ls -ld /mnt
> rm /mnt/*
> df
> ls -ld /mnt
>
> would show that the root directory uses the 4 blocks to hold the
> directory entries for the files copied in.


Not quite

A directory object does not hold its contents. Instead each object's details
are stored in an object header.
However, writing a file in a directory causes the object header for the
directory to be updated too (since the directories mtime and ctime must be
updated). If there was no previous object header for root then one will be
written.
>
> Is there code to garbage collect directories when the entries are
> deleted?


This is not needed.

For a better understanding, read
http://users.actrix.co.nz/manningc/yaffs/HowYaffsWorks.pdf

This is certainly not a "leak". The only "lost" chunk is that root directory
and that is expected.

I just ran the following script with no change in the free chunks.

#! /bin/bash
for ((i=0; i < 100; i++))
do
echo start $i
cat /proc/yaffs | grep nFreeChunks
for ((j=0; j < 1000; j++)) ; do touch aa$j; done
echo created $i
cat /proc/yaffs | grep nFreeChunks
for ((j=0; j < 1000; j++)) ; do rm aa$j; done
echo rm done $i
cat /proc/yaffs | grep nFreeChunks
done


start 0
nFreeChunks........ 32767
created 0
nFreeChunks........ 31767
rm done 0
nFreeChunks........ 32767
start 1
nFreeChunks........ 32767
created 1
nFreeChunks........ 31767
rm done 1
nFreeChunks........ 32767
.....
rm done 98
nFreeChunks........ 32767
start 99
nFreeChunks........ 32767
created 99
nFreeChunks........ 31767
rm done 99
nFreeChunks........ 32767


Charles