Hi,
I'm having problems deleting symbolic links on a YAFFS1 file system using
the latest YAFFS code. This is with a 2.6.36-rc5 kernel but we've seen
the same problem on 2.6.31.
localhost test # ls -l
localhost test # echo hello > x
localhost test # ln -s x y
localhost test # ls -l
-rw-r--r-- 1 root root 6 Oct 4 08:44 x
lrwxrwxrwx 1 root root 1 Oct 4 08:44 y -> x
localhost test # rm y
rm: cannot remove 'y': Directory not empty
localhost test #
These are legacy systems in the field and we can't upgrade the file system.
I guess not many people are trying to use YAFFS1 with recent kernels.
Anyway the following patch fixes the problem for me but that TODO comment
suggests that someone with a better knowledge of the system should look at
it. I don't understand why YAFFS_OBJECT_TYPE_FILE was singled out for
special processing under YAFFS1 ?
diff --git a/yaffs2/yaffs_guts.c b/yaffs2/yaffs_guts.c
index 5db3da6..119dc3e 100644
--- a/yaffs2/yaffs_guts.c
+++ b/yaffs2/yaffs_guts.c
@@ -1708,12 +1708,7 @@ static int yaffs_ChangeObjectName(yaffs_Object *obj, yaffs_Object *newDir,
YBUG();
}
- /* TODO: Do we need this different handling for YAFFS2 and YAFFS1?? */
- if (obj->myDev->param.isYaffs2)
- unlinkOp = (newDir == obj->myDev->unlinkedDir);
- else
- unlinkOp = (newDir == obj->myDev->unlinkedDir
- && obj->variantType == YAFFS_OBJECT_TYPE_FILE);
+ unlinkOp = (newDir == obj->myDev->unlinkedDir);
deleteOp = (newDir == obj->myDev->deletedDir);
--
Bob Dunlop
Guralp Systems Limited
http://www.guralp.com