Commit 5c5d4e8e authored by Linus Torvalds's avatar Linus Torvalds

Merge git://git.infradead.org/mtd-2.6

* git://git.infradead.org/mtd-2.6:
  mtd: nand: fix build failure and incorrect return from omap_wait()
  mtd: Use BLOCK_NIL consistently in NFTL/INFTL
  mtd: m25p80 timeout too short for worst-case m25p16 devices
  mtd: atmel_nand: Fix typo s/parititions/partitions/
  mtd: cmdlineparts: Use 64-bit format when printing a debug message.
  mtd: maps: Remove BUS_ID_SIZE from integrator_flash
  jffs2: fix another potential leak on error path in scan.c
parents fa172f40 c276aca4
...@@ -194,7 +194,7 @@ static struct mtd_partition * newpart(char *s, ...@@ -194,7 +194,7 @@ static struct mtd_partition * newpart(char *s,
parts[this_part].name = extra_mem; parts[this_part].name = extra_mem;
extra_mem += name_len + 1; extra_mem += name_len + 1;
dbg(("partition %d: name <%s>, offset %x, size %x, mask flags %x\n", dbg(("partition %d: name <%s>, offset %llx, size %llx, mask flags %x\n",
this_part, this_part,
parts[this_part].name, parts[this_part].name,
parts[this_part].offset, parts[this_part].offset,
......
...@@ -54,7 +54,7 @@ ...@@ -54,7 +54,7 @@
#define SR_SRWD 0x80 /* SR write protect */ #define SR_SRWD 0x80 /* SR write protect */
/* Define max times to check status register before we give up. */ /* Define max times to check status register before we give up. */
#define MAX_READY_WAIT_JIFFIES (10 * HZ) /* eg. M25P128 specs 6s max sector erase */ #define MAX_READY_WAIT_JIFFIES (40 * HZ) /* M25P16 specs 40s max chip erase */
#define CMD_SIZE 4 #define CMD_SIZE 4
#ifdef CONFIG_M25PXX_USE_FAST_READ #ifdef CONFIG_M25PXX_USE_FAST_READ
......
...@@ -226,7 +226,7 @@ static u16 INFTL_findfreeblock(struct INFTLrecord *inftl, int desperate) ...@@ -226,7 +226,7 @@ static u16 INFTL_findfreeblock(struct INFTLrecord *inftl, int desperate)
if (!desperate && inftl->numfreeEUNs < 2) { if (!desperate && inftl->numfreeEUNs < 2) {
DEBUG(MTD_DEBUG_LEVEL1, "INFTL: there are too few free " DEBUG(MTD_DEBUG_LEVEL1, "INFTL: there are too few free "
"EUNs (%d)\n", inftl->numfreeEUNs); "EUNs (%d)\n", inftl->numfreeEUNs);
return 0xffff; return BLOCK_NIL;
} }
/* Scan for a free block */ /* Scan for a free block */
...@@ -281,7 +281,8 @@ static u16 INFTL_foldchain(struct INFTLrecord *inftl, unsigned thisVUC, unsigned ...@@ -281,7 +281,8 @@ static u16 INFTL_foldchain(struct INFTLrecord *inftl, unsigned thisVUC, unsigned
silly = MAX_LOOPS; silly = MAX_LOOPS;
while (thisEUN < inftl->nb_blocks) { while (thisEUN < inftl->nb_blocks) {
for (block = 0; block < inftl->EraseSize/SECTORSIZE; block ++) { for (block = 0; block < inftl->EraseSize/SECTORSIZE; block ++) {
if ((BlockMap[block] != 0xffff) || BlockDeleted[block]) if ((BlockMap[block] != BLOCK_NIL) ||
BlockDeleted[block])
continue; continue;
if (inftl_read_oob(mtd, (thisEUN * inftl->EraseSize) if (inftl_read_oob(mtd, (thisEUN * inftl->EraseSize)
...@@ -525,7 +526,7 @@ static inline u16 INFTL_findwriteunit(struct INFTLrecord *inftl, unsigned block) ...@@ -525,7 +526,7 @@ static inline u16 INFTL_findwriteunit(struct INFTLrecord *inftl, unsigned block)
if (!silly--) { if (!silly--) {
printk(KERN_WARNING "INFTL: infinite loop in " printk(KERN_WARNING "INFTL: infinite loop in "
"Virtual Unit Chain 0x%x\n", thisVUC); "Virtual Unit Chain 0x%x\n", thisVUC);
return 0xffff; return BLOCK_NIL;
} }
/* Skip to next block in chain */ /* Skip to next block in chain */
...@@ -549,7 +550,7 @@ static inline u16 INFTL_findwriteunit(struct INFTLrecord *inftl, unsigned block) ...@@ -549,7 +550,7 @@ static inline u16 INFTL_findwriteunit(struct INFTLrecord *inftl, unsigned block)
* waiting to be picked up. We're going to have to fold * waiting to be picked up. We're going to have to fold
* a chain to make room. * a chain to make room.
*/ */
thisEUN = INFTL_makefreeblock(inftl, 0xffff); thisEUN = INFTL_makefreeblock(inftl, BLOCK_NIL);
/* /*
* Hopefully we free something, lets try again. * Hopefully we free something, lets try again.
...@@ -631,7 +632,7 @@ static inline u16 INFTL_findwriteunit(struct INFTLrecord *inftl, unsigned block) ...@@ -631,7 +632,7 @@ static inline u16 INFTL_findwriteunit(struct INFTLrecord *inftl, unsigned block)
printk(KERN_WARNING "INFTL: error folding to make room for Virtual " printk(KERN_WARNING "INFTL: error folding to make room for Virtual "
"Unit Chain 0x%x\n", thisVUC); "Unit Chain 0x%x\n", thisVUC);
return 0xffff; return BLOCK_NIL;
} }
/* /*
......
...@@ -42,10 +42,8 @@ ...@@ -42,10 +42,8 @@
#include <mach/hardware.h> #include <mach/hardware.h>
#include <asm/system.h> #include <asm/system.h>
#define SUBDEV_NAME_SIZE (BUS_ID_SIZE + 2)
struct armflash_subdev_info { struct armflash_subdev_info {
char name[SUBDEV_NAME_SIZE]; char *name;
struct mtd_info *mtd; struct mtd_info *mtd;
struct map_info map; struct map_info map;
struct flash_platform_data *plat; struct flash_platform_data *plat;
...@@ -134,6 +132,8 @@ static void armflash_subdev_remove(struct armflash_subdev_info *subdev) ...@@ -134,6 +132,8 @@ static void armflash_subdev_remove(struct armflash_subdev_info *subdev)
map_destroy(subdev->mtd); map_destroy(subdev->mtd);
if (subdev->map.virt) if (subdev->map.virt)
iounmap(subdev->map.virt); iounmap(subdev->map.virt);
kfree(subdev->name);
subdev->name = NULL;
release_mem_region(subdev->map.phys, subdev->map.size); release_mem_region(subdev->map.phys, subdev->map.size);
} }
...@@ -177,16 +177,22 @@ static int armflash_probe(struct platform_device *dev) ...@@ -177,16 +177,22 @@ static int armflash_probe(struct platform_device *dev)
if (nr == 1) if (nr == 1)
/* No MTD concatenation, just use the default name */ /* No MTD concatenation, just use the default name */
snprintf(subdev->name, SUBDEV_NAME_SIZE, "%s", subdev->name = kstrdup(dev_name(&dev->dev), GFP_KERNEL);
dev_name(&dev->dev));
else else
snprintf(subdev->name, SUBDEV_NAME_SIZE, "%s-%d", subdev->name = kasprintf(GFP_KERNEL, "%s-%d",
dev_name(&dev->dev), i); dev_name(&dev->dev), i);
if (!subdev->name) {
err = -ENOMEM;
break;
}
subdev->plat = plat; subdev->plat = plat;
err = armflash_subdev_probe(subdev, res); err = armflash_subdev_probe(subdev, res);
if (err) if (err) {
kfree(subdev->name);
subdev->name = NULL;
break; break;
}
} }
info->nr_subdev = i; info->nr_subdev = i;
......
...@@ -534,7 +534,7 @@ static int __init atmel_nand_probe(struct platform_device *pdev) ...@@ -534,7 +534,7 @@ static int __init atmel_nand_probe(struct platform_device *pdev)
&num_partitions); &num_partitions);
if ((!partitions) || (num_partitions == 0)) { if ((!partitions) || (num_partitions == 0)) {
printk(KERN_ERR "atmel_nand: No parititions defined, or unsupported device.\n"); printk(KERN_ERR "atmel_nand: No partitions defined, or unsupported device.\n");
res = ENXIO; res = ENXIO;
goto err_no_partitions; goto err_no_partitions;
} }
......
...@@ -11,6 +11,8 @@ ...@@ -11,6 +11,8 @@
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/dma-mapping.h> #include <linux/dma-mapping.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/jiffies.h>
#include <linux/sched.h>
#include <linux/mtd/mtd.h> #include <linux/mtd/mtd.h>
#include <linux/mtd/nand.h> #include <linux/mtd/nand.h>
#include <linux/mtd/partitions.h> #include <linux/mtd/partitions.h>
...@@ -541,7 +543,7 @@ static int omap_wait(struct mtd_info *mtd, struct nand_chip *chip) ...@@ -541,7 +543,7 @@ static int omap_wait(struct mtd_info *mtd, struct nand_chip *chip)
struct omap_nand_info *info = container_of(mtd, struct omap_nand_info, struct omap_nand_info *info = container_of(mtd, struct omap_nand_info,
mtd); mtd);
unsigned long timeo = jiffies; unsigned long timeo = jiffies;
int status, state = this->state; int status = NAND_STATUS_FAIL, state = this->state;
if (state == FL_ERASING) if (state == FL_ERASING)
timeo += (HZ * 400) / 1000; timeo += (HZ * 400) / 1000;
...@@ -556,8 +558,9 @@ static int omap_wait(struct mtd_info *mtd, struct nand_chip *chip) ...@@ -556,8 +558,9 @@ static int omap_wait(struct mtd_info *mtd, struct nand_chip *chip)
while (time_before(jiffies, timeo)) { while (time_before(jiffies, timeo)) {
status = __raw_readb(this->IO_ADDR_R); status = __raw_readb(this->IO_ADDR_R);
if (!(status & 0x40)) if (status & NAND_STATUS_READY)
break; break;
cond_resched();
} }
return status; return status;
} }
......
...@@ -208,7 +208,7 @@ static u16 NFTL_findfreeblock(struct NFTLrecord *nftl, int desperate ) ...@@ -208,7 +208,7 @@ static u16 NFTL_findfreeblock(struct NFTLrecord *nftl, int desperate )
/* Normally, we force a fold to happen before we run out of free blocks completely */ /* Normally, we force a fold to happen before we run out of free blocks completely */
if (!desperate && nftl->numfreeEUNs < 2) { if (!desperate && nftl->numfreeEUNs < 2) {
DEBUG(MTD_DEBUG_LEVEL1, "NFTL_findfreeblock: there are too few free EUNs\n"); DEBUG(MTD_DEBUG_LEVEL1, "NFTL_findfreeblock: there are too few free EUNs\n");
return 0xffff; return BLOCK_NIL;
} }
/* Scan for a free block */ /* Scan for a free block */
...@@ -230,11 +230,11 @@ static u16 NFTL_findfreeblock(struct NFTLrecord *nftl, int desperate ) ...@@ -230,11 +230,11 @@ static u16 NFTL_findfreeblock(struct NFTLrecord *nftl, int desperate )
printk("Argh! No free blocks found! LastFreeEUN = %d, " printk("Argh! No free blocks found! LastFreeEUN = %d, "
"FirstEUN = %d\n", nftl->LastFreeEUN, "FirstEUN = %d\n", nftl->LastFreeEUN,
le16_to_cpu(nftl->MediaHdr.FirstPhysicalEUN)); le16_to_cpu(nftl->MediaHdr.FirstPhysicalEUN));
return 0xffff; return BLOCK_NIL;
} }
} while (pot != nftl->LastFreeEUN); } while (pot != nftl->LastFreeEUN);
return 0xffff; return BLOCK_NIL;
} }
static u16 NFTL_foldchain (struct NFTLrecord *nftl, unsigned thisVUC, unsigned pendingblock ) static u16 NFTL_foldchain (struct NFTLrecord *nftl, unsigned thisVUC, unsigned pendingblock )
...@@ -431,7 +431,7 @@ static u16 NFTL_foldchain (struct NFTLrecord *nftl, unsigned thisVUC, unsigned p ...@@ -431,7 +431,7 @@ static u16 NFTL_foldchain (struct NFTLrecord *nftl, unsigned thisVUC, unsigned p
/* add the header so that it is now a valid chain */ /* add the header so that it is now a valid chain */
oob.u.a.VirtUnitNum = oob.u.a.SpareVirtUnitNum = cpu_to_le16(thisVUC); oob.u.a.VirtUnitNum = oob.u.a.SpareVirtUnitNum = cpu_to_le16(thisVUC);
oob.u.a.ReplUnitNum = oob.u.a.SpareReplUnitNum = 0xffff; oob.u.a.ReplUnitNum = oob.u.a.SpareReplUnitNum = BLOCK_NIL;
nftl_write_oob(mtd, (nftl->EraseSize * targetEUN) + 8, nftl_write_oob(mtd, (nftl->EraseSize * targetEUN) + 8,
8, &retlen, (char *)&oob.u); 8, &retlen, (char *)&oob.u);
...@@ -515,7 +515,7 @@ static u16 NFTL_makefreeblock( struct NFTLrecord *nftl , unsigned pendingblock) ...@@ -515,7 +515,7 @@ static u16 NFTL_makefreeblock( struct NFTLrecord *nftl , unsigned pendingblock)
if (ChainLength < 2) { if (ChainLength < 2) {
printk(KERN_WARNING "No Virtual Unit Chains available for folding. " printk(KERN_WARNING "No Virtual Unit Chains available for folding. "
"Failing request\n"); "Failing request\n");
return 0xffff; return BLOCK_NIL;
} }
return NFTL_foldchain (nftl, LongestChain, pendingblock); return NFTL_foldchain (nftl, LongestChain, pendingblock);
...@@ -578,7 +578,7 @@ static inline u16 NFTL_findwriteunit(struct NFTLrecord *nftl, unsigned block) ...@@ -578,7 +578,7 @@ static inline u16 NFTL_findwriteunit(struct NFTLrecord *nftl, unsigned block)
printk(KERN_WARNING printk(KERN_WARNING
"Infinite loop in Virtual Unit Chain 0x%x\n", "Infinite loop in Virtual Unit Chain 0x%x\n",
thisVUC); thisVUC);
return 0xffff; return BLOCK_NIL;
} }
/* Skip to next block in chain */ /* Skip to next block in chain */
...@@ -601,7 +601,7 @@ static inline u16 NFTL_findwriteunit(struct NFTLrecord *nftl, unsigned block) ...@@ -601,7 +601,7 @@ static inline u16 NFTL_findwriteunit(struct NFTLrecord *nftl, unsigned block)
//u16 startEUN = nftl->EUNtable[thisVUC]; //u16 startEUN = nftl->EUNtable[thisVUC];
//printk("Write to VirtualUnitChain %d, calling makefreeblock()\n", thisVUC); //printk("Write to VirtualUnitChain %d, calling makefreeblock()\n", thisVUC);
writeEUN = NFTL_makefreeblock(nftl, 0xffff); writeEUN = NFTL_makefreeblock(nftl, BLOCK_NIL);
if (writeEUN == BLOCK_NIL) { if (writeEUN == BLOCK_NIL) {
/* OK, we accept that the above comment is /* OK, we accept that the above comment is
...@@ -673,7 +673,7 @@ static inline u16 NFTL_findwriteunit(struct NFTLrecord *nftl, unsigned block) ...@@ -673,7 +673,7 @@ static inline u16 NFTL_findwriteunit(struct NFTLrecord *nftl, unsigned block)
printk(KERN_WARNING "Error folding to make room for Virtual Unit Chain 0x%x\n", printk(KERN_WARNING "Error folding to make room for Virtual Unit Chain 0x%x\n",
thisVUC); thisVUC);
return 0xffff; return BLOCK_NIL;
} }
static int nftl_writeblock(struct mtd_blktrans_dev *mbd, unsigned long block, static int nftl_writeblock(struct mtd_blktrans_dev *mbd, unsigned long block,
......
...@@ -130,9 +130,9 @@ int jffs2_scan_medium(struct jffs2_sb_info *c) ...@@ -130,9 +130,9 @@ int jffs2_scan_medium(struct jffs2_sb_info *c)
if (jffs2_sum_active()) { if (jffs2_sum_active()) {
s = kzalloc(sizeof(struct jffs2_summary), GFP_KERNEL); s = kzalloc(sizeof(struct jffs2_summary), GFP_KERNEL);
if (!s) { if (!s) {
kfree(flashbuf);
JFFS2_WARNING("Can't allocate memory for summary\n"); JFFS2_WARNING("Can't allocate memory for summary\n");
return -ENOMEM; ret = -ENOMEM;
goto out;
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment