You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by xi...@apache.org on 2024/09/15 02:21:54 UTC

(nuttx) 03/03: driver/ftl: Read the consecutive eraseblocks

This is an automated email from the ASF dual-hosted git repository.

xiaoxiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git

commit 1af4cdf50078852fade0a44f031e19951b243259
Author: wangjianyu3 <wa...@xiaomi.com>
AuthorDate: Wed Feb 7 15:39:10 2024 +0800

    driver/ftl: Read the consecutive eraseblocks
    
    Signed-off-by: wangjianyu3 <wa...@xiaomi.com>
---
 drivers/mtd/ftl.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/drivers/mtd/ftl.c b/drivers/mtd/ftl.c
index 5ec0a68462..86d33c20ad 100644
--- a/drivers/mtd/ftl.c
+++ b/drivers/mtd/ftl.c
@@ -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;
+      off_t offset;
       size_t count;
 
       starteraseblock = startblock / dev->blkper;
@@ -296,11 +297,12 @@ static ssize_t ftl_mtd_bread(FAR struct ftl_struct_s *dev, off_t startblock,
           break;
         }
 
+      offset = startblock & mask;
       count = ftl_get_cblock(dev, starteraseblock,
-                             (nblocks + mask) / dev->blkper);
-      count = MIN(count * dev->blkper, nblocks);
+                             (offset + nblocks + mask) / dev->blkper);
+      count = MIN(count * dev->blkper - offset, nblocks);
       startphysicalblock = dev->lptable[starteraseblock] *
-                           dev->blkper + (startblock & mask);
+                           dev->blkper + offset;
       ret = MTD_BREAD(dev->mtd, startphysicalblock, count, buffer);
       if (ret == count || ret == -EUCLEAN)
         {