[Yaffs] power cycle during rm

Top Page
Attachments:
Message as email
+ (text/plain)
Delete this message
Reply to this message
Author: Babrian Viktor
Date:  
To: yaffs
Subject: [Yaffs] power cycle during rm
Hi all,

I experience a strange phenomenon if I do a power cycle during performing
a file removal. It is easily reproduceable (at least using my setup).
I am using a fairly new (on week old or so) version of yaffs2, kernel
version 2.6.26, yaffs_guts.c version: 1.82.
(however I also got the very same results with a somewhat older version)
(note: all other functionality seems to be OK)

Here is what I do briefly:
- flash_eraseall /dev/mtd13
- mount as yaffs2
- creating 2 files (dd if=/dev/zero of=/mnt/file bs=1M count=100)
- removing the second one (interrupted by power cycle)
- reboot, mount
- df, ls show things correctly
- now I re-create the second file
- ls is correct
- df shows much less free space than expected (the usable space is
limited; free space is 'lost')


here is what I do exactly:
(flash_erase, mount not included, started from creating the second file)
/ $ ls -l /mnt
-rw-r--r--    1 root     root    104857600 Jan  1 00:04 file
drw-rw-rw-    1 root     root         2048 Jan  1 00:00 lost+found
/ $ df
Filesystem           1k-blocks      Used Available Use% Mounted on
/dev/mtdblock5           32768     18184     14584  55% /
tmpfs                    63956         0     63956   0% /var/tmp
/dev/mtdblock13        2097152    106372   1990780   5% /mnt
/ $ dd if=/dev/zero of=/mnt/file1 bs=1M count=100
100+0 records in
100+0 records out
/ $ ls -l /mnt
-rw-r--r--    1 root     root    104857600 Jan  1 00:04 file
-rw-r--r--    1 root     root    104857600 Jan  1 00:05 file1
drw-rw-rw-    1 root     root         2048 Jan  1 00:00 lost+found
/ $ df
Filesystem           1k-blocks      Used Available Use% Mounted on
/dev/mtdblock5           32768     18184     14584  55% /
tmpfs                    63956         0     63956   0% /var/tmp
/dev/mtdblock13        2097152    208900   1888252  10% /mnt
/ $
/ $ rm /mnt/file1


!!!!!!!! interrupted by power cycle

//after reboot, mount: (still normal)
/ $ ls -l /mnt/
-rw-r--r--    1 root     root    104857600 Jan  1 00:04 file
drw-rw-rw-    1 root     root         2048 Jan  1 00:00 lost+found
/ $ df
Filesystem           1k-blocks      Used Available Use% Mounted on
/dev/mtdblock5           32768     18120     14648  55% /
tmpfs                    63956         0     63956   0% /var/tmp
/dev/mtdblock13        2097152    106372   1990780   5% /mnt
/ $


// and the strange part:

/ $ dd if=/dev/zero of=/mnt/file1 bs=1M count=100
ls -l /mnt
df
100+0 records in
100+0 records out
/ $ ls -l /mnt
-rw-r--r--    1 root     root    104857600 Jan  1 00:05 file
-rw-r--r--    1 root     root    104857600 Jan  1 00:01 file1
drw-rw-rw-    1 root     root         2048 Jan  1 00:00 lost+found
/ $ df
Filesystem           1k-blocks      Used Available Use% Mounted on
/dev/mtdblock5           32768     18124     14644  55% /
tmpfs                    63956         0     63956   0% /var/tmp
/dev/mtdblock13        2097152    742624   1354528  35% /mnt
/ $


It can be seen that the number of used blocks is very high (without
reason).

/ $ cat /proc/yaffs
YAFFS built:May 19 2009 05:24:47
$Id: yaffs_fs.c,v 1.79 2009/03/17 01:12:00 wookey Exp $
$Id: yaffs_guts.c,v 1.82 2009/03/09 04:24:17 charles Exp $

Device 0 "MAP"
startBlock......... 0
endBlock........... 16383
totalBytesPerChunk. 2048
nDataBytesPerChunk. 2048
chunkGroupBits..... 0
chunkGroupSize..... 1
nErasedBlocks...... 14764
nReservedBlocks.... 5
blocksInCheckpoint. 0
nTnodesCreated..... 7400
nFreeTnodes........ 77
nObjectsCreated.... 200
nFreeObjects....... 93
nFreeChunks........ 678095
nPageWrites........ 0
nPageReads......... 0
nBlockErasures..... 695
nGCCopies.......... 2
garbageCollections. 4865
passiveGCs......... 4865
nRetriedWrites..... 0
nShortOpCaches..... 10
nRetireBlocks...... 0
eccFixed........... 0
eccUnfixed......... 0
tagsEccFixed....... 0
tagsEccUnfixed..... 0
cacheHits.......... 0
nDeletedFiles...... 1
nUnlinkedFiles..... 1
nBackgroudDeletions 0
useNANDECC......... 1
isYaffs2........... 1
inbandTags......... 0
/ $

Note: the same happens with any number of files (including 1)


I have searched the net for similar cases but the ones I found are 4 years
old and seemingly solved.
Is the problem familiar to anyone here?
What logs/traces should I make to find the lost blocks?

Any help is appreciated,
Viktor Babrian