diff options
Diffstat (limited to 'drivers/mtd/mtdchar.c')
-rw-r--r-- | drivers/mtd/mtdchar.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/mtd/mtdchar.c b/drivers/mtd/mtdchar.c index 7522fc3a2827..a48210d58b92 100644 --- a/drivers/mtd/mtdchar.c +++ b/drivers/mtd/mtdchar.c | |||
@@ -199,10 +199,13 @@ static ssize_t mtd_read(struct file *file, char __user *buf, size_t count,loff_t | |||
199 | /* Nand returns -EBADMSG on ecc errors, but it returns | 199 | /* Nand returns -EBADMSG on ecc errors, but it returns |
200 | * the data. For our userspace tools it is important | 200 | * the data. For our userspace tools it is important |
201 | * to dump areas with ecc errors ! | 201 | * to dump areas with ecc errors ! |
202 | * For kernel internal usage it also might return -EUCLEAN | ||
203 | * to signal the caller that a bitflip has occured and has | ||
204 | * been corrected by the ECC algorithm. | ||
202 | * Userspace software which accesses NAND this way | 205 | * Userspace software which accesses NAND this way |
203 | * must be aware of the fact that it deals with NAND | 206 | * must be aware of the fact that it deals with NAND |
204 | */ | 207 | */ |
205 | if (!ret || (ret == -EBADMSG)) { | 208 | if (!ret || (ret == -EUCLEAN) || (ret == -EBADMSG)) { |
206 | *ppos += retlen; | 209 | *ppos += retlen; |
207 | if (copy_to_user(buf, kbuf, retlen)) { | 210 | if (copy_to_user(buf, kbuf, retlen)) { |
208 | kfree(kbuf); | 211 | kfree(kbuf); |