I have test this patch, the problem is gone( rmdir ) , but a YBUG come : create a reguar file test.bin , then create a hardlink : ln test.bin foo.bin , then delete the test.bin, NOW: ==>> yaffs bug: fs/yaffs2/yaffs_guts.c 6862 The work flow is yaffs_DoGenericObjectDeletion-->yaffs_ChangeObjectName--->yaffs_AddObjectToDirectory, it seems that ylist_empty(&obj->siblings) ; BTW , I have test the yaffs2 in nandsim , but the yaffs_delete_inode page fault not come , why ? 2009/3/5 Charles Manning > I have done some check ins which should have fixed this issue and the YBUG > issues. > > I would really appreciate it if people could pick up those changes and give > some feedback. > > What was happening was that the unlink was destroying the object, but this > should have been defered until the delete_object happened. Regular files > were > being handled correctly (to handle the case where an unlinked file can > still > be live) but other object types were not being handled correctly. > > The problem was apparently benign until the extra checking was added. > > -- CHarles > > > On Thursday 05 March 2009 02:15:04 fs p wrote: > > My kenel is 2.6.19 , yaffs is 09-2-24 from cvs > > > > If I delete a dir named "oop ", use rmdir cmd , found that: > > > > 1. yaffs_DoGenericObjectDeletion is called (frist time) , > > the oop is move to yaffs's deletedDir, now oop's > > parnet is deletedDir , then yaffs_RemoveObjectFromDirectory ( yaffs_gus.c > > :5201 )is called , so the oop 's parnet is NULL; ( > > > > 2. Then in the do_rmdir function, after the vfs_rmdir , will call : > > > > dput ----->yaffs_delete_inode( from inode get the yaffs_object , but > the > > obj's parnet is NULL ) > > --->yaffs_DeleteFile--->yaffs_DoGenericObjectDeletion( second time) , > from > > here yaffs complain: > > > > ==>> yaffs bug: fs/yaffs2/yaffs_guts.c 6836 > > ==>> yaffs bug: fs/yaffs2/yaffs_guts.c 6763 > > > > The problem is oop->parent=NULL , so run in yaffs_VerifyDirectory , > > page fault come. > > > > Any Tips? I want change the yaffs_delete_inode like this: > > > > yaffs_Object *obj = yaffs_InodeToObject(inode); > > > > if( obj && obj->parent){ > > dev = obj->myDev; > > yaffs_GrossLock(dev); > > yaffs_DeleteFile(obj); > > yaffs_GrossUnlock(dev); > > > > } > > >