X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs%2F.git;a=blobdiff_plain;f=yaffs_guts.c;h=4757ff6802ceed1571b8fad2c556522010a454b7;hp=5218aeab3391faef20b9d85dbbf0800f29e0332f;hb=3b2905b66368db2b05df750b5abf4b41c6efcfbd;hpb=1ceac6b8722fe56ebe1b29e6e0dfc0664cbdd2c6 diff --git a/yaffs_guts.c b/yaffs_guts.c index 5218aea..4757ff6 100644 --- a/yaffs_guts.c +++ b/yaffs_guts.c @@ -14,7 +14,7 @@ */ //yaffs_guts.c -const char *yaffs_guts_c_version="$Id: yaffs_guts.c,v 1.30 2003-09-16 06:48:38 charles Exp $"; +const char *yaffs_guts_c_version="$Id: yaffs_guts.c,v 1.35 2004-09-21 03:03:12 charles Exp $"; #include "yportenv.h" @@ -1085,7 +1085,7 @@ static int yaffs_DeleteWorker(yaffs_Object *in, yaffs_Tnode *tn, __u32 level, in if(limit) { *limit = *limit-1; - if(limit <= 0) + if(*limit <= 0) { hitLimit = 1; } @@ -1638,7 +1638,8 @@ yaffs_Object *yaffs_CreateNewObject(yaffs_Device *dev,int number,yaffs_ObjectTyp #else -#if defined(CONFIG_KERNEL_2_5) +//#if defined(CONFIG_KERNEL_2_5) +#if defined(__KERNEL__) && (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)) theObject->st_atime = theObject->st_mtime = theObject->st_ctime = CURRENT_TIME.tv_sec; #else theObject->st_atime = theObject->st_mtime = theObject->st_ctime = CURRENT_TIME; @@ -1743,10 +1744,11 @@ yaffs_Object *yaffs_MknodObject( yaffs_ObjectType type, #ifdef CONFIG_YAFFS_WINCE yfsd_WinFileTimeNow(in->win_atime); in->win_ctime[0] = in->win_mtime[0] = in->win_atime[0]; - in->win_ctime[1] = in->win_mtime[1] = in->win_atime[0]; + in->win_ctime[1] = in->win_mtime[1] = in->win_atime[1]; #else -#if defined(CONFIG_KERNEL_2_5) +//#if defined(CONFIG_KERNEL_2_5) +#if defined(__KERNEL__) && (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)) in->st_atime = in->st_mtime = in->st_ctime = CURRENT_TIME.tv_sec; #else in->st_atime = in->st_mtime = in->st_ctime = CURRENT_TIME; @@ -2302,6 +2304,7 @@ static int yaffs_GarbageCollectBlock(yaffs_Device *dev,int block) { // It's a header object->chunkId = newChunk; + object->serial = tags.serialNumber; } else { @@ -2843,6 +2846,7 @@ int yaffs_ReadChunkDataFromObject(yaffs_Object *in,int chunkInInode, __u8 *buffe } else { + memset(buffer,0,YAFFS_BYTES_PER_CHUNK); return 0; } @@ -3668,8 +3672,10 @@ int yaffs_ResizeFile(yaffs_Object *in, int newSize) int lastChunk = 1+ newSize/YAFFS_BYTES_PER_CHUNK; // Got to read and rewrite the last chunk with its new size. + // NB Got to zero pad to nuke old data yaffs_ReadChunkDataFromObject(in,lastChunk,dev->localBuffer); - + memset(dev->localBuffer + sizeOfPartialChunk,0, YAFFS_BYTES_PER_CHUNK - sizeOfPartialChunk); + yaffs_WriteChunkDataToObject(in,lastChunk,dev->localBuffer,sizeOfPartialChunk,1); } @@ -3721,7 +3727,8 @@ int yaffs_FlushFile(yaffs_Object *in, int updateTime) #ifdef CONFIG_YAFFS_WINCE yfsd_WinFileTimeNow(in->win_mtime); #else -#if defined(CONFIG_KERNEL_2_5) +//#if defined(CONFIG_KERNEL_2_5) +#if defined(__KERNEL__) && (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)) in->st_mtime = CURRENT_TIME.tv_sec; #else in->st_mtime = CURRENT_TIME; @@ -4224,8 +4231,9 @@ static int yaffs_Scan(yaffs_Device *dev) { // Hoosterman, another problem.... // We're trying to use a non-directory as a directory - // Todo ... handle - T(YAFFS_TRACE_ERROR, (TSTR("yaffs tragedy: attempting to use non-directory as a directory in scan" TENDSTR))); + + T(YAFFS_TRACE_ERROR, (TSTR("yaffs tragedy: attempting to use non-directory as a directory in scan. Put in lost+found." TENDSTR))); + parent = dev->lostNFoundDir; } @@ -4578,7 +4586,9 @@ int yaffs_SetAttributes(yaffs_Object *obj, struct iattr *attr) if(valid & ATTR_UID) obj->st_uid = attr->ia_uid; if(valid & ATTR_GID) obj->st_gid = attr->ia_gid; -#if defined(CONFIG_KERNEL_2_5) +//#if defined(CONFIG_KERNEL_2_5) +#if defined(__KERNEL__) && (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)) + if(valid & ATTR_ATIME) obj->st_atime = attr->ia_atime.tv_sec; if(valid & ATTR_CTIME) obj->st_ctime = attr->ia_ctime.tv_sec; if(valid & ATTR_MTIME) obj->st_mtime = attr->ia_mtime.tv_sec; @@ -4603,7 +4613,8 @@ int yaffs_GetAttributes(yaffs_Object *obj, struct iattr *attr) attr->ia_uid = obj->st_uid; valid |= ATTR_UID; attr->ia_gid = obj->st_gid; valid |= ATTR_GID; -#if defined(CONFIG_KERNEL_2_5) +//#if defined(CONFIG_KERNEL_2_5) +#if defined(__KERNEL__) && (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)) attr->ia_atime.tv_sec = obj->st_atime; valid |= ATTR_ATIME; attr->ia_ctime.tv_sec = obj->st_ctime; valid |= ATTR_CTIME; attr->ia_mtime.tv_sec = obj->st_mtime; valid |= ATTR_MTIME; @@ -4839,6 +4850,8 @@ void yaffs_Deinitialise(yaffs_Device *dev) yaffs_DeinitialiseBlocks(dev); yaffs_DeinitialiseTnodes(dev); yaffs_DeinitialiseObjects(dev); + if(dev->nShortOpCaches > 0) + YFREE(dev->srCache); YFREE(dev->localBuffer); } @@ -4992,3 +5005,4 @@ void yaffs_GutsTest(yaffs_Device *dev) +