X-Git-Url: https://yaffs.net/gitweb/?a=blobdiff_plain;f=yaffs_nand.c;h=38989851ed7f24f4267f74a7fccd6af8a1e8327d;hb=457fb8efdcd9b61c657b8b03b942f048eaa5168c;hp=8c4f639a481e0d929c021af1db5bd0dbfba52e0a;hpb=e434bac0480bf62ea4d66519ff40dad3d2e3e410;p=yaffs2.git diff --git a/yaffs_nand.c b/yaffs_nand.c index 8c4f639..3898985 100644 --- a/yaffs_nand.c +++ b/yaffs_nand.c @@ -1,7 +1,7 @@ /* - * YAFFS: Yet another FFS. A NAND-flash specific file system. + * YAFFS: Yet Another Flash File System. A NAND-flash specific file system. * - * Copyright (C) 2002 Aleph One Ltd. + * Copyright (C) 2002-2007 Aleph One Ltd. * for Toby Churchill Ltd and Brightstar Engineering * * Created by Charles Manning @@ -9,11 +9,10 @@ * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. - * */ - + const char *yaffs_nand_c_version = - "$Id: yaffs_nand.c,v 1.4 2006-10-13 08:52:49 charles Exp $"; + "$Id: yaffs_nand.c,v 1.8 2007-12-13 15:35:18 wookey Exp $"; #include "yaffs_nand.h" #include "yaffs_tagscompat.h" @@ -26,9 +25,9 @@ int yaffs_ReadChunkWithTagsFromNAND(yaffs_Device * dev, int chunkInNAND, { int result; yaffs_ExtendedTags localTags; - + int realignedChunkInNAND = chunkInNAND - dev->chunkOffset; - + /* If there are no tags provided, use local tags to get prioritised gc working */ if(!tags) tags = &localTags; @@ -40,14 +39,14 @@ int yaffs_ReadChunkWithTagsFromNAND(yaffs_Device * dev, int chunkInNAND, result = yaffs_TagsCompatabilityReadChunkWithTagsFromNAND(dev, realignedChunkInNAND, buffer, - tags); - if(tags && + tags); + if(tags && tags->eccResult > YAFFS_ECC_RESULT_NO_ERROR){ - + yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev, chunkInNAND/dev->nChunksPerBlock); yaffs_HandleChunkError(dev,bi); } - + return result; } @@ -58,7 +57,7 @@ int yaffs_WriteChunkWithTagsToNAND(yaffs_Device * dev, { chunkInNAND -= dev->chunkOffset; - + if (tags) { tags->sequenceNumber = dev->sequenceNumber; tags->chunkUsed = 1; @@ -123,9 +122,6 @@ int yaffs_EraseBlockInNAND(struct yaffs_DeviceStruct *dev, dev->nBlockErasures++; result = dev->eraseBlockInNAND(dev, blockInNAND); - /* If at first we don't succeed, try again *once*.*/ - if (!result) - result = dev->eraseBlockInNAND(dev, blockInNAND); return result; } @@ -135,4 +131,4 @@ int yaffs_InitialiseNAND(struct yaffs_DeviceStruct *dev) } - +