Fix bad-block status during query.
authorimcd <imcd>
Mon, 1 Oct 2007 19:40:33 +0000 (19:40 +0000)
committerimcd <imcd>
Mon, 1 Oct 2007 19:40:33 +0000 (19:40 +0000)
Mtd read does not indicate bad-block status (reported by list
subscriber "thisway.diy").

yaffs_mtdif1.c

index 7493f9b..c3c2436 100644 (file)
@@ -36,7 +36,7 @@
 /* Don't compile this module if we don't have MTD's mtd_oob_ops interface */
 #if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
 
-const char *yaffs_mtdif1_c_version = "$Id: yaffs_mtdif1.c,v 1.2 2007-07-23 19:14:04 imcd Exp $";
+const char *yaffs_mtdif1_c_version = "$Id: yaffs_mtdif1.c,v 1.3 2007-10-01 19:40:33 imcd Exp $";
 
 #ifndef CONFIG_YAFFS_9BYTE_TAGS
 # define YTAG1_SIZE 8
@@ -327,6 +327,7 @@ int nandmtd1_QueryNANDBlock(struct yaffs_DeviceStruct *dev, int blockNo,
 {
        struct mtd_info * mtd = dev->genericDevice;
        int chunkNo = blockNo * dev->nChunksPerBlock;
+       loff_t addr = (loff_t)chunkNo * dev->nDataBytesPerChunk;
        yaffs_ExtendedTags etags;
        int state = YAFFS_BLOCK_STATE_DEAD;
        int seqnum = 0;
@@ -340,6 +341,7 @@ int nandmtd1_QueryNANDBlock(struct yaffs_DeviceStruct *dev, int blockNo,
        }
 
        retval = nandmtd1_ReadChunkWithTagsFromNAND(dev, chunkNo, NULL, &etags);
+       etags.blockBad = (mtd->block_isbad)(mtd, addr);
        if (etags.blockBad) {
                yaffs_trace(YAFFS_TRACE_BAD_BLOCKS,
                        "block %d is marked bad", blockNo);