[Yaffs] loosing space on rename with existing target

Top Page
Attachments:
Message as email
+ (text/plain)
Delete this message
Reply to this message
Author: Pawel Jasinski
Date:  
To: yaffs
Subject: [Yaffs] loosing space on rename with existing target
hi,

I have a linux 2.6.36 with yaffs and patches from openwrt.
The yaffs is mounted as upper in overlayfs.
So far so good.
Things appear ok as long as I simply remove files with rm (unlink).
Once I try to move (rename) the file where there is already an
existing file, the space occupied by existing file is not reclaimed.

    get some content into test1
    $ cp test1 test2
    $ mv test2 test1


I put kprintf all over the place and enabled yaffs log (+os). As far
as I can tell, the yaffs_rename is called and it does the job in terms
of yaffs. However the yaffs_evict_inode is not called after, so the
chunks are never deleted.
Rebooting brings the lost blocks back. I assume things get cleaned up
during mount.

Perhaps someone recalls this issue from 2.6 days and can give me a hint.
At the moment I am looking at d_move_locked which is most likely not
interacting well with yaffs_rename.

So far I tried:
1. flushing the directory cache with:
echo 2 > /proc/sys/vm/drop_caches
which calls evict_inode on a lot of entries but not the one in question.

2. Check that the kernel calls evict_inode when I do the same operation on FAT.

3. Look at git log of yaffs for a hint of a fix.


cheers,
--pawel