Mercurial > yaffs-ecoscentric-gpl
changeset 366:2a0c6f4e34ec
Clean up yaffs_FindNiceObject to be thread safe and simpler. Fix code that does a dummy tree insert during write
| author | charles <charles> |
|---|---|
| date | Tue, 02 Mar 2010 02:29:21 +0000 |
| parents | db12031081bc |
| children | 7fb8c1aa623a |
| files | direct/dtest.c yaffs_guts.c yaffs_guts.h |
| diffstat | 3 files changed, 15 insertions(+), 33 deletions(-) [+] |
line wrap: on
line diff
--- a/direct/dtest.c +++ b/direct/dtest.c @@ -2479,7 +2479,7 @@ int main(int argc, char *argv[]) //rename_over_test("//////////////////flash///////////////////yaffs1///////////"); - //fill_empty_files_test("/yaffs2/"); + fill_empty_files_test("/yaffs2/"); //long_name_test("/yaffs2"); //link_test0("/yaffs2"); //link_test1("yaffs2");
--- a/yaffs_guts.c +++ b/yaffs_guts.c @@ -12,7 +12,7 @@ */ const char *yaffs_guts_c_version = - "$Id: yaffs_guts.c,v 1.110 2010-02-25 22:41:46 charles Exp $"; + "$Id: yaffs_guts.c,v 1.111 2010-03-02 02:29:21 charles Exp $"; #include "yportenv.h" #include "yaffs_trace.h" @@ -2129,33 +2129,21 @@ static void yaffs_InitialiseObjects(yaff static int yaffs_FindNiceObjectBucket(yaffs_Device *dev) { - static int x; int i; int l = 999; int lowest = 999999; - /* First let's see if we can find one that's empty. */ - - for (i = 0; i < 10 && lowest > 0; i++) { - x++; - x %= YAFFS_NOBJECT_BUCKETS; - if (dev->objectBucket[x].count < lowest) { - lowest = dev->objectBucket[x].count; - l = x; - } - - } - - /* If we didn't find an empty list, then try - * looking a bit further for a short one + + /* Search for the shortest list or one that + * isn't too long. */ - for (i = 0; i < 10 && lowest > 3; i++) { - x++; - x %= YAFFS_NOBJECT_BUCKETS; - if (dev->objectBucket[x].count < lowest) { - lowest = dev->objectBucket[x].count; - l = x; + for (i = 0; i < 10 && lowest > 4; i++) { + dev->bucketFinder++; + dev->bucketFinder %= YAFFS_NOBJECT_BUCKETS; + if (dev->objectBucket[dev->bucketFinder].count < lowest) { + lowest = dev->objectBucket[dev->bucketFinder].count; + l = dev->bucketFinder; } } @@ -3818,9 +3806,9 @@ static int yaffs_WriteChunkDataToObject( * the tnode now, rather than later when it is harder to clean up. */ prevChunkId = yaffs_FindChunkInFile(in, chunkInInode, &prevTags); - if(prevChunkId <= 0 && - !yaffs_PutChunkIntoFile(in, chunkInInode, 0, 0)){ - } + if(prevChunkId < 1 && + !yaffs_PutChunkIntoFile(in, chunkInInode, 0, 0)) + return 0; /* Set up new tags */ yaffs_InitialiseTags(&newTags); @@ -3837,13 +3825,6 @@ static int yaffs_WriteChunkDataToObject( YBUG(); } - /* - * If there isn't already a chunk there then do a dummy - * insert to make sue we have the desired tnode structure. - */ - if(prevChunkId < 1 && - yaffs_PutChunkIntoFile(in, chunkInInode, 0, 0) != YAFFS_OK) - return -1; newChunkId = yaffs_WriteNewChunkWithTagsToNAND(dev, buffer, &newTags,
