Mercurial > yaffs-ecoscentric
changeset 310:a097a8d2aa15
Merge upstream up to Thu Oct 08 02:57:59 2009 +0100
| author | Ross Younger <wry@ecoscentric.com> |
|---|---|
| date | Tue, 03 Nov 2009 15:33:54 +0000 |
| parents | ed45fbf83981 (current diff) b21bd2a64496 (diff) |
| children | 16de60f90faa |
| files | packages/fs/yaffs/current/src/yaffs_checkptrw.c packages/fs/yaffs/current/src/yaffs_guts.c packages/fs/yaffs/current/src/yaffs_guts.h packages/fs/yaffs/current/src/yaffs_nand.c packages/fs/yaffs/current/src/yaffs_tagscompat.c packages/fs/yaffs/current/src/yportenv.h |
| diffstat | 6 files changed, 40 insertions(+), 20 deletions(-) [+] |
line wrap: on
line diff
--- a/packages/fs/yaffs/current/src/yaffs_checkptrw.c +++ b/packages/fs/yaffs/current/src/yaffs_checkptrw.c @@ -43,6 +43,9 @@ static int yaffs_CheckpointErase(yaffs_D yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev, i); if (bi->blockState == YAFFS_BLOCK_STATE_CHECKPOINT) { T(YAFFS_TRACE_CHECKPOINT, (TSTR("erasing checkpt block %d"TENDSTR), i)); + + dev->nBlockErasures++; + if (dev->eraseBlockInNAND(dev, i - dev->blockOffset /* realign */)) { bi->blockState = YAFFS_BLOCK_STATE_EMPTY; dev->nErasedBlocks++; @@ -222,6 +225,8 @@ static int yaffs_CheckpointFlushBuffer(y realignedChunk = chunk - dev->chunkOffset; + dev->nPageWrites++; + dev->writeChunkWithTagsToNAND(dev, realignedChunk, dev->checkpointBuffer, &tags); dev->checkpointByteOffset = 0; @@ -309,6 +314,8 @@ int yaffs_CheckpointRead(yaffs_Device *d dev->checkpointCurrentChunk; realignedChunk = chunk - dev->chunkOffset; + + dev->nPageReads++; /* read in the next chunk */ /* printf("read checkpoint page %d\n",dev->checkpointPage); */
--- a/packages/fs/yaffs/current/src/yaffs_guts.c +++ b/packages/fs/yaffs/current/src/yaffs_guts.c @@ -1549,11 +1549,16 @@ static int yaffs_FindChunkInGroup(yaffs_ for (j = 0; theChunk && j < dev->chunkGroupSize; j++) { if (yaffs_CheckChunkBit(dev, theChunk / dev->nChunksPerBlock, theChunk % dev->nChunksPerBlock)) { - yaffs_ReadChunkWithTagsFromNAND(dev, theChunk, NULL, - tags); - if (yaffs_TagsMatch(tags, objectId, chunkInInode)) { - /* found it; */ + + if(dev->chunkGroupSize == 1) return theChunk; + else { + yaffs_ReadChunkWithTagsFromNAND(dev, theChunk, NULL, + tags); + if (yaffs_TagsMatch(tags, objectId, chunkInInode)) { + /* found it; */ + return theChunk; + } } } theChunk++; @@ -5067,23 +5072,27 @@ loff_t yaffs_GetFileSize(yaffs_Object *o -int yaffs_FlushFile(yaffs_Object *in, int updateTime) +int yaffs_FlushFile(yaffs_Object *in, int updateTime, int dataSync) { int retVal; if (in->dirty) { yaffs_FlushFilesChunkCache(in); - if (updateTime) { + if(dataSync) /* Only sync data */ + retVal=YAFFS_OK; + else { + if (updateTime) { #ifdef CONFIG_YAFFS_WINCE - yfsd_WinFileTimeNow(in->win_mtime); + yfsd_WinFileTimeNow(in->win_mtime); #else - in->yst_mtime = Y_CURRENT_TIME; + in->yst_mtime = Y_CURRENT_TIME; #endif + } + + retVal = (yaffs_UpdateObjectHeader(in, NULL, 0, 0, 0) >= + 0) ? YAFFS_OK : YAFFS_FAIL; } - - retVal = (yaffs_UpdateObjectHeader(in, NULL, 0, 0, 0) >= - 0) ? YAFFS_OK : YAFFS_FAIL; } else { retVal = YAFFS_OK; }
--- a/packages/fs/yaffs/current/src/yaffs_guts.h +++ b/packages/fs/yaffs/current/src/yaffs_guts.h @@ -840,7 +840,8 @@ int yaffs_ResizeFile(yaffs_Object *obj, yaffs_Object *yaffs_MknodFile(yaffs_Object *parent, const YCHAR *name, __u32 mode, __u32 uid, __u32 gid); -int yaffs_FlushFile(yaffs_Object *obj, int updateTime); + +int yaffs_FlushFile(yaffs_Object *obj, int updateTime, int dataSync); /* Flushing and checkpointing */ void yaffs_FlushEntireDeviceCache(yaffs_Device *dev);
--- a/packages/fs/yaffs/current/src/yaffs_nand.c +++ b/packages/fs/yaffs/current/src/yaffs_nand.c @@ -62,6 +62,8 @@ int yaffs_ReadChunkWithTagsFromNAND(yaff int realignedChunkInNAND = chunkInNAND - dev->chunkOffset; + dev->nPageReads++; + /* If there are no tags provided, use local tags to get prioritised gc working */ if (!tags) tags = &localTags; @@ -89,6 +91,9 @@ int yaffs_WriteChunkWithTagsToNAND(yaffs const __u8 *buffer, yaffs_ExtendedTags *tags) { + + dev->nPageWrites++; + chunkInNAND -= dev->chunkOffset; @@ -122,6 +127,7 @@ int yaffs_MarkBlockBad(yaffs_Device *dev { blockNo -= dev->blockOffset; + if (dev->markNANDBlockBad) return dev->markNANDBlockBad(dev, blockNo); else @@ -151,8 +157,8 @@ int yaffs_EraseBlockInNAND(struct yaffs_ blockInNAND -= dev->blockOffset; + dev->nBlockErasures++; - dev->nBlockErasures++; result = dev->eraseBlockInNAND(dev, blockInNAND); return result;
--- a/packages/fs/yaffs/current/src/yaffs_tagscompat.c +++ b/packages/fs/yaffs/current/src/yaffs_tagscompat.c @@ -179,7 +179,6 @@ static int yaffs_WriteChunkToNAND(struct return YAFFS_FAIL; } - dev->nPageWrites++; return dev->writeChunkToNAND(dev, chunkInNAND, data, spare); } @@ -193,8 +192,6 @@ static int yaffs_ReadChunkFromNAND(struc int retVal; yaffs_Spare localSpare; - dev->nPageReads++; - if (!spare && data) { /* If we don't have a real spare, then we use a local one. */ /* Need this for the calculation of the ecc */
--- a/packages/fs/yaffs/current/src/yportenv.h +++ b/packages/fs/yaffs/current/src/yportenv.h @@ -76,8 +76,8 @@ /* KR - added for use in scan so processes aren't blocked indefinitely. */ #define YYIELD() schedule() -#define YAFFS_ROOT_MODE 0666 -#define YAFFS_LOSTNFOUND_MODE 0666 +#define YAFFS_ROOT_MODE 0755 +#define YAFFS_LOSTNFOUND_MODE 0700 #if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0)) #define Y_CURRENT_TIME CURRENT_TIME.tv_sec @@ -148,8 +148,8 @@ #define YAFFS_LOSTNFOUND_PREFIX "obj" /* #define YPRINTF(x) printf x */ -#define YAFFS_ROOT_MODE 0666 -#define YAFFS_LOSTNFOUND_MODE 0666 +#define YAFFS_ROOT_MODE 0755 +#define YAFFS_LOSTNFOUND_MODE 0700 #define yaffs_SumCompare(x, y) ((x) == (y)) #define yaffs_strcmp(a, b) strcmp(a, b)
