#define YAFFS_SMALL_HOLE_THRESHOLD 4
-void yaffs2_VerifyBlock(yaffs_Device *dev, yaffs_BlockInfo *bi, int n)
-{
- if (!dev->param.isYaffs2)
- return;
-
- if((bi->blockState == YAFFS_BLOCK_STATE_ALLOCATING || bi->blockState == YAFFS_BLOCK_STATE_FULL) &&
- (bi->sequenceNumber < YAFFS_LOWEST_SEQUENCE_NUMBER || bi->sequenceNumber > 10000000))
- T(YAFFS_TRACE_VERIFY, (TSTR("Block %d has suspect sequence number of %d"TENDSTR),
- n, bi->sequenceNumber));
-}
/*
* Oldest Dirty Sequence Number handling.
nblocks = dev->internalEndBlock - dev->internalStartBlock + 1 ;
return !dev->param.skipCheckpointWrite &&
+ !dev->readOnly &&
(nblocks >= YAFFS_CHECKPOINT_MIN_BLOCKS);
}
dev->nFreeChunks++;
+ } else if (tags.objectId > YAFFS_MAX_OBJECT_ID ||
+ tags.chunkId > YAFFS_MAX_CHUNK_ID ||
+ (tags.chunkId > 0 && tags.byteCount > dev->nDataBytesPerChunk) ||
+ tags.sequenceNumber != bi->sequenceNumber ) {
+ T(YAFFS_TRACE_SCAN,
+ (TSTR("Chunk (%d:%d) with bad tags:obj = %d, chunkId = %d, byteCount = %d, ignored"TENDSTR),
+ blk, c,tags.objectId, tags.chunkId, tags.byteCount));
+
+ dev->nFreeChunks++;
+
} else if (tags.chunkId > 0) {
/* chunkId > 0 so it is a data chunk... */
unsigned int endpos;
in->valid = 1;
if (oh) {
- in->variantType = oh->type;
in->yst_mode = oh->yst_mode;
#ifdef CONFIG_YAFFS_WINCE
in->yst_ctime = oh->yst_ctime;
in->yst_rdev = oh->yst_rdev;
+ in->lazyLoaded = 0;
+
#endif
- } else {
- in->variantType = tags.extraObjectType;
+ } else
in->lazyLoaded = 1;
- }
in->hdrChunk = chunk;
- yaffs_SetObjectName(in, oh->name);
+ yaffs_SetObjectNameFromOH(in, oh);
parent =
yaffs_FindOrCreateObjectByNumber
(dev, oh->parentObjectId,