mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-26 10:49:33 +00:00
Merge git://git.infradead.org/~dwmw2/mtd-2.6.31
* git://git.infradead.org/~dwmw2/mtd-2.6.31: JFFS2: add missing verify buffer allocation/deallocation mtd: nftl: fix offset alignments mtd: nftl: write support is broken mtd: m25p80: fix null pointer dereference bug
This commit is contained in:
commit
5136a6c0fd
3 changed files with 20 additions and 7 deletions
|
@ -736,7 +736,7 @@ static int __devinit m25p_probe(struct spi_device *spi)
|
|||
flash->partitioned = 1;
|
||||
return add_mtd_partitions(&flash->mtd, parts, nr_parts);
|
||||
}
|
||||
} else if (data->nr_parts)
|
||||
} else if (data && data->nr_parts)
|
||||
dev_warn(&spi->dev, "ignoring %d default partitions on %s\n",
|
||||
data->nr_parts, data->name);
|
||||
|
||||
|
|
|
@ -135,16 +135,17 @@ static void nftl_remove_dev(struct mtd_blktrans_dev *dev)
|
|||
int nftl_read_oob(struct mtd_info *mtd, loff_t offs, size_t len,
|
||||
size_t *retlen, uint8_t *buf)
|
||||
{
|
||||
loff_t mask = mtd->writesize - 1;
|
||||
struct mtd_oob_ops ops;
|
||||
int res;
|
||||
|
||||
ops.mode = MTD_OOB_PLACE;
|
||||
ops.ooboffs = offs & (mtd->writesize - 1);
|
||||
ops.ooboffs = offs & mask;
|
||||
ops.ooblen = len;
|
||||
ops.oobbuf = buf;
|
||||
ops.datbuf = NULL;
|
||||
|
||||
res = mtd->read_oob(mtd, offs & ~(mtd->writesize - 1), &ops);
|
||||
res = mtd->read_oob(mtd, offs & ~mask, &ops);
|
||||
*retlen = ops.oobretlen;
|
||||
return res;
|
||||
}
|
||||
|
@ -155,16 +156,17 @@ int nftl_read_oob(struct mtd_info *mtd, loff_t offs, size_t len,
|
|||
int nftl_write_oob(struct mtd_info *mtd, loff_t offs, size_t len,
|
||||
size_t *retlen, uint8_t *buf)
|
||||
{
|
||||
loff_t mask = mtd->writesize - 1;
|
||||
struct mtd_oob_ops ops;
|
||||
int res;
|
||||
|
||||
ops.mode = MTD_OOB_PLACE;
|
||||
ops.ooboffs = offs & (mtd->writesize - 1);
|
||||
ops.ooboffs = offs & mask;
|
||||
ops.ooblen = len;
|
||||
ops.oobbuf = buf;
|
||||
ops.datbuf = NULL;
|
||||
|
||||
res = mtd->write_oob(mtd, offs & ~(mtd->writesize - 1), &ops);
|
||||
res = mtd->write_oob(mtd, offs & ~mask, &ops);
|
||||
*retlen = ops.oobretlen;
|
||||
return res;
|
||||
}
|
||||
|
@ -177,17 +179,18 @@ int nftl_write_oob(struct mtd_info *mtd, loff_t offs, size_t len,
|
|||
static int nftl_write(struct mtd_info *mtd, loff_t offs, size_t len,
|
||||
size_t *retlen, uint8_t *buf, uint8_t *oob)
|
||||
{
|
||||
loff_t mask = mtd->writesize - 1;
|
||||
struct mtd_oob_ops ops;
|
||||
int res;
|
||||
|
||||
ops.mode = MTD_OOB_PLACE;
|
||||
ops.ooboffs = offs;
|
||||
ops.ooboffs = offs & mask;
|
||||
ops.ooblen = mtd->oobsize;
|
||||
ops.oobbuf = oob;
|
||||
ops.datbuf = buf;
|
||||
ops.len = len;
|
||||
|
||||
res = mtd->write_oob(mtd, offs & ~(mtd->writesize - 1), &ops);
|
||||
res = mtd->write_oob(mtd, offs & ~mask, &ops);
|
||||
*retlen = ops.retlen;
|
||||
return res;
|
||||
}
|
||||
|
|
|
@ -1268,10 +1268,20 @@ int jffs2_nor_wbuf_flash_setup(struct jffs2_sb_info *c) {
|
|||
if (!c->wbuf)
|
||||
return -ENOMEM;
|
||||
|
||||
#ifdef CONFIG_JFFS2_FS_WBUF_VERIFY
|
||||
c->wbuf_verify = kmalloc(c->wbuf_pagesize, GFP_KERNEL);
|
||||
if (!c->wbuf_verify) {
|
||||
kfree(c->wbuf);
|
||||
return -ENOMEM;
|
||||
}
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
void jffs2_nor_wbuf_flash_cleanup(struct jffs2_sb_info *c) {
|
||||
#ifdef CONFIG_JFFS2_FS_WBUF_VERIFY
|
||||
kfree(c->wbuf_verify);
|
||||
#endif
|
||||
kfree(c->wbuf);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue