driver/ftl: Read the current eraseblock only
case: The next eraseblock is bad Signed-off-by: wangjianyu3 <wangjianyu3@xiaomi.com>
This commit is contained in:
parent
b2221806cb
commit
c40f9b8d9f
@ -287,6 +287,7 @@ static ssize_t ftl_mtd_bread(FAR struct ftl_struct_s *dev, off_t startblock,
|
||||
{
|
||||
off_t startphysicalblock;
|
||||
off_t starteraseblock;
|
||||
size_t erase;
|
||||
size_t count;
|
||||
|
||||
starteraseblock = startblock / dev->blkper;
|
||||
@ -296,9 +297,14 @@ static ssize_t ftl_mtd_bread(FAR struct ftl_struct_s *dev, off_t startblock,
|
||||
break;
|
||||
}
|
||||
|
||||
count = ftl_get_cblock(dev, starteraseblock,
|
||||
erase = ftl_get_cblock(dev, starteraseblock,
|
||||
(nblocks + mask) / dev->blkper);
|
||||
count = MIN(count * dev->blkper, nblocks);
|
||||
count = MIN(erase * dev->blkper, nblocks);
|
||||
if (erase == 1)
|
||||
{
|
||||
count -= startblock & mask;
|
||||
}
|
||||
|
||||
startphysicalblock = dev->lptable[starteraseblock] *
|
||||
dev->blkper + (startblock & mask);
|
||||
ret = MTD_BREAD(dev->mtd, startphysicalblock, count, buffer);
|
||||
|
Loading…
Reference in New Issue
Block a user