Thank you for your testing.
The test is bogus for the link removal case you outline below so I have just
removed the test.
Please try cvs now.
Thank you.
-- Charles
On Thursday 05 March 2009 21:49:38 fs p wrote:
> 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_AddObjectTo
>Directory, 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 <manningc2@actrix.gen.nz>
>
> > 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);
> > >
> > > }