aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mtd/mtdchar.c
diff options
context:
space:
mode:
authorThomas Gleixner <tglx@cruncher.tec.linutronix.de>2006-06-20 14:05:05 -0400
committerDavid Woodhouse <dwmw2@infradead.org>2006-06-20 15:31:24 -0400
commit7bc3312bef4d6f220812500c0de7868fb7625a41 (patch)
tree9ad49e850cdfe9868a19a37681bbf4d403e47ed3 /drivers/mtd/mtdchar.c
parent7e4178f90eec862affc97469118d5008bd1b5bda (diff)
[MTD] NAND: Fix breakage all over the place
Following problems are addressed: - wrong status caused early break out of nand_wait() - removed the bogus status check in nand_wait() which is a relict of the abandoned support for interrupted erase. - status check moved to the correct place in read_oob - oob support for syndrom based ecc with strange layouts - use given offset in the AUTOOOB based oob operations Partially based on a patch from Vitaly Vool <vwool@ru.mvista.com> Thanks to Savin Zlobec <savin@epico.si> for tracking down the status problem. Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'drivers/mtd/mtdchar.c')
-rw-r--r--drivers/mtd/mtdchar.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/drivers/mtd/mtdchar.c b/drivers/mtd/mtdchar.c
index 5dd0b8d72c8b..aa18d45b264b 100644
--- a/drivers/mtd/mtdchar.c
+++ b/drivers/mtd/mtdchar.c
@@ -504,12 +504,12 @@ static int mtd_ioctl(struct inode *inode, struct file *file,
504 return ret; 504 return ret;
505 505
506 ops.len = buf.length; 506 ops.len = buf.length;
507 ops.ooblen = mtd->oobsize; 507 ops.ooblen = buf.length;
508 ops.ooboffs = buf.start & (mtd->oobsize - 1); 508 ops.ooboffs = buf.start & (mtd->oobsize - 1);
509 ops.datbuf = NULL; 509 ops.datbuf = NULL;
510 ops.mode = MTD_OOB_PLACE; 510 ops.mode = MTD_OOB_PLACE;
511 511
512 if (ops.ooboffs && ops.len > (ops.ooblen - ops.ooboffs)) 512 if (ops.ooboffs && ops.len > (mtd->oobsize - ops.ooboffs))
513 return -EINVAL; 513 return -EINVAL;
514 514
515 ops.oobbuf = kmalloc(buf.length, GFP_KERNEL); 515 ops.oobbuf = kmalloc(buf.length, GFP_KERNEL);
@@ -553,12 +553,12 @@ static int mtd_ioctl(struct inode *inode, struct file *file,
553 return ret; 553 return ret;
554 554
555 ops.len = buf.length; 555 ops.len = buf.length;
556 ops.ooblen = mtd->oobsize; 556 ops.ooblen = buf.length;
557 ops.ooboffs = buf.start & (mtd->oobsize - 1); 557 ops.ooboffs = buf.start & (mtd->oobsize - 1);
558 ops.datbuf = NULL; 558 ops.datbuf = NULL;
559 ops.mode = MTD_OOB_PLACE; 559 ops.mode = MTD_OOB_PLACE;
560 560
561 if (ops.ooboffs && ops.len > (ops.ooblen - ops.ooboffs)) 561 if (ops.ooboffs && ops.len > (mtd->oobsize - ops.ooboffs))
562 return -EINVAL; 562 return -EINVAL;
563 563
564 ops.oobbuf = kmalloc(buf.length, GFP_KERNEL); 564 ops.oobbuf = kmalloc(buf.length, GFP_KERNEL);