X-Git-Url: http://git.openwrt.org/?a=blobdiff_plain;f=target%2Flinux%2Fgeneric-2.6%2Ffiles%2Ffs%2Fyaffs2%2Fyaffs_packedtags2.c;h=e420f95da1918ae0738568ec263a731c9e8f9eee;hb=306910e5d18ea19b4c10df06defaa494733def60;hp=957ed8bf0e5b19ee73fb36a72beda062a36175d9;hpb=c9d9f8045c5aebdfeb96d7f9833927751d854bc1;p=openwrt%2Fopenwrt.git diff --git a/target/linux/generic-2.6/files/fs/yaffs2/yaffs_packedtags2.c b/target/linux/generic-2.6/files/fs/yaffs2/yaffs_packedtags2.c index 957ed8bf0e..e420f95da1 100644 --- a/target/linux/generic-2.6/files/fs/yaffs2/yaffs_packedtags2.c +++ b/target/linux/generic-2.6/files/fs/yaffs2/yaffs_packedtags2.c @@ -37,70 +37,60 @@ #define EXTRA_OBJECT_TYPE_SHIFT (28) #define EXTRA_OBJECT_TYPE_MASK ((0x0F) << EXTRA_OBJECT_TYPE_SHIFT) - -static void yaffs_DumpPackedTags2TagsPart(const yaffs_PackedTags2TagsPart * ptt) +static void yaffs_DumpPackedTags2(const yaffs_PackedTags2 * pt) { T(YAFFS_TRACE_MTD, (TSTR("packed tags obj %d chunk %d byte %d seq %d" TENDSTR), - ptt->objectId, ptt->chunkId, ptt->byteCount, - ptt->sequenceNumber)); -} -static void yaffs_DumpPackedTags2(const yaffs_PackedTags2 * pt) -{ - yaffs_DumpPackedTags2TagsPart(&pt->t); + pt->t.objectId, pt->t.chunkId, pt->t.byteCount, + pt->t.sequenceNumber)); } static void yaffs_DumpTags2(const yaffs_ExtendedTags * t) { T(YAFFS_TRACE_MTD, (TSTR - ("ext.tags eccres %d blkbad %d chused %d obj %d chunk%d byte %d del %d ser %d seq %d" + ("ext.tags eccres %d blkbad %d chused %d obj %d chunk%d byte " + "%d del %d ser %d seq %d" TENDSTR), t->eccResult, t->blockBad, t->chunkUsed, t->objectId, t->chunkId, t->byteCount, t->chunkDeleted, t->serialNumber, t->sequenceNumber)); } -void yaffs_PackTags2TagsPart(yaffs_PackedTags2TagsPart * ptt, const yaffs_ExtendedTags * t) +void yaffs_PackTags2(yaffs_PackedTags2 * pt, const yaffs_ExtendedTags * t) { - ptt->chunkId = t->chunkId; - ptt->sequenceNumber = t->sequenceNumber; - ptt->byteCount = t->byteCount; - ptt->objectId = t->objectId; + pt->t.chunkId = t->chunkId; + pt->t.sequenceNumber = t->sequenceNumber; + pt->t.byteCount = t->byteCount; + pt->t.objectId = t->objectId; if (t->chunkId == 0 && t->extraHeaderInfoAvailable) { /* Store the extra header info instead */ /* We save the parent object in the chunkId */ - ptt->chunkId = EXTRA_HEADER_INFO_FLAG + pt->t.chunkId = EXTRA_HEADER_INFO_FLAG | t->extraParentObjectId; if (t->extraIsShrinkHeader) { - ptt->chunkId |= EXTRA_SHRINK_FLAG; + pt->t.chunkId |= EXTRA_SHRINK_FLAG; } if (t->extraShadows) { - ptt->chunkId |= EXTRA_SHADOWS_FLAG; + pt->t.chunkId |= EXTRA_SHADOWS_FLAG; } - ptt->objectId &= ~EXTRA_OBJECT_TYPE_MASK; - ptt->objectId |= + pt->t.objectId &= ~EXTRA_OBJECT_TYPE_MASK; + pt->t.objectId |= (t->extraObjectType << EXTRA_OBJECT_TYPE_SHIFT); if (t->extraObjectType == YAFFS_OBJECT_TYPE_HARDLINK) { - ptt->byteCount = t->extraEquivalentObjectId; + pt->t.byteCount = t->extraEquivalentObjectId; } else if (t->extraObjectType == YAFFS_OBJECT_TYPE_FILE) { - ptt->byteCount = t->extraFileLength; + pt->t.byteCount = t->extraFileLength; } else { - ptt->byteCount = 0; + pt->t.byteCount = 0; } } - yaffs_DumpPackedTags2TagsPart(ptt); + yaffs_DumpPackedTags2(pt); yaffs_DumpTags2(t); -} - - -void yaffs_PackTags2(yaffs_PackedTags2 * pt, const yaffs_ExtendedTags * t) -{ - yaffs_PackTags2TagsPart(&pt->t,t); #ifndef YAFFS_IGNORE_TAGS_ECC { @@ -111,60 +101,13 @@ void yaffs_PackTags2(yaffs_PackedTags2 * pt, const yaffs_ExtendedTags * t) #endif } - -void yaffs_UnpackTags2TagsPart(yaffs_ExtendedTags * t, yaffs_PackedTags2TagsPart * ptt) +void yaffs_UnpackTags2(yaffs_ExtendedTags * t, yaffs_PackedTags2 * pt) { memset(t, 0, sizeof(yaffs_ExtendedTags)); yaffs_InitialiseTags(t); - if (ptt->sequenceNumber != 0xFFFFFFFF) { - t->blockBad = 0; - t->chunkUsed = 1; - t->objectId = ptt->objectId; - t->chunkId = ptt->chunkId; - t->byteCount = ptt->byteCount; - t->chunkDeleted = 0; - t->serialNumber = 0; - t->sequenceNumber = ptt->sequenceNumber; - - /* Do extra header info stuff */ - - if (ptt->chunkId & EXTRA_HEADER_INFO_FLAG) { - t->chunkId = 0; - t->byteCount = 0; - - t->extraHeaderInfoAvailable = 1; - t->extraParentObjectId = - ptt->chunkId & (~(ALL_EXTRA_FLAGS)); - t->extraIsShrinkHeader = - (ptt->chunkId & EXTRA_SHRINK_FLAG) ? 1 : 0; - t->extraShadows = - (ptt->chunkId & EXTRA_SHADOWS_FLAG) ? 1 : 0; - t->extraObjectType = - ptt->objectId >> EXTRA_OBJECT_TYPE_SHIFT; - t->objectId &= ~EXTRA_OBJECT_TYPE_MASK; - - if (t->extraObjectType == YAFFS_OBJECT_TYPE_HARDLINK) { - t->extraEquivalentObjectId = ptt->byteCount; - } else { - t->extraFileLength = ptt->byteCount; - } - } - } - - yaffs_DumpPackedTags2TagsPart(ptt); - yaffs_DumpTags2(t); - -} - - -void yaffs_UnpackTags2(yaffs_ExtendedTags * t, yaffs_PackedTags2 * pt) -{ - - yaffs_UnpackTags2TagsPart(t,&pt->t); - if (pt->t.sequenceNumber != 0xFFFFFFFF) { /* Page is in use */ #ifdef YAFFS_IGNORE_TAGS_ECC @@ -199,10 +142,41 @@ void yaffs_UnpackTags2(yaffs_ExtendedTags * t, yaffs_PackedTags2 * pt) } } #endif + t->blockBad = 0; + t->chunkUsed = 1; + t->objectId = pt->t.objectId; + t->chunkId = pt->t.chunkId; + t->byteCount = pt->t.byteCount; + t->chunkDeleted = 0; + t->serialNumber = 0; + t->sequenceNumber = pt->t.sequenceNumber; + + /* Do extra header info stuff */ + + if (pt->t.chunkId & EXTRA_HEADER_INFO_FLAG) { + t->chunkId = 0; + t->byteCount = 0; + + t->extraHeaderInfoAvailable = 1; + t->extraParentObjectId = + pt->t.chunkId & (~(ALL_EXTRA_FLAGS)); + t->extraIsShrinkHeader = + (pt->t.chunkId & EXTRA_SHRINK_FLAG) ? 1 : 0; + t->extraShadows = + (pt->t.chunkId & EXTRA_SHADOWS_FLAG) ? 1 : 0; + t->extraObjectType = + pt->t.objectId >> EXTRA_OBJECT_TYPE_SHIFT; + t->objectId &= ~EXTRA_OBJECT_TYPE_MASK; + + if (t->extraObjectType == YAFFS_OBJECT_TYPE_HARDLINK) { + t->extraEquivalentObjectId = pt->t.byteCount; + } else { + t->extraFileLength = pt->t.byteCount; + } + } } yaffs_DumpPackedTags2(pt); yaffs_DumpTags2(t); } -