fs/spiffs: Fix yet another interface with NuttX MTD. This time, the calculation of the number of whole blocks.
This commit is contained in:
parent
5cc68ad3b8
commit
7a2f70495a
@ -118,6 +118,9 @@ ssize_t spiffs_mtd_write(FAR struct spiffs_s *fs, off_t offset, size_t len,
|
|||||||
blkstart = offset / blksize;
|
blkstart = offset / blksize;
|
||||||
blkend = (offset + len - 1) / blksize;
|
blkend = (offset + len - 1) / blksize;
|
||||||
|
|
||||||
|
finfo("blkoffset=%lu blkstart=%ld blkend=%ld\n",
|
||||||
|
blkoffset, blkstart, blkend);
|
||||||
|
|
||||||
/* Check if we have to do a read-modify-write on the first block. We
|
/* Check if we have to do a read-modify-write on the first block. We
|
||||||
* need to do this if the blkoffset is not zero. In that case we need
|
* need to do this if the blkoffset is not zero. In that case we need
|
||||||
* write only the data at the end of the block.
|
* write only the data at the end of the block.
|
||||||
@ -163,8 +166,19 @@ ssize_t spiffs_mtd_write(FAR struct spiffs_s *fs, off_t offset, size_t len,
|
|||||||
|
|
||||||
/* Write all intervening complete blocks... all at once */
|
/* Write all intervening complete blocks... all at once */
|
||||||
|
|
||||||
nblocks = blkend - blkstart + 1;
|
nblocks = blkend - blkstart;
|
||||||
if (nblocks > 0 && remaining >= blksize)
|
if (remaining > 0 && (remaining & blkmask) == 0)
|
||||||
|
{
|
||||||
|
/* The final block is a complete transfer */
|
||||||
|
|
||||||
|
nblocks++;
|
||||||
|
}
|
||||||
|
|
||||||
|
finfo("Whole blocks=%d blkstart=%lu remaining=%lu\n",
|
||||||
|
nblocks, (unsigned long)blkstart,
|
||||||
|
(unsigned long)remaining);
|
||||||
|
|
||||||
|
if (nblocks > 0)
|
||||||
{
|
{
|
||||||
ret = MTD_BWRITE(fs->mtd, blkstart, nblocks, src);
|
ret = MTD_BWRITE(fs->mtd, blkstart, nblocks, src);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
@ -271,6 +285,9 @@ ssize_t spiffs_mtd_read(FAR struct spiffs_s *fs, off_t offset, size_t len,
|
|||||||
blkstart = offset / blksize;
|
blkstart = offset / blksize;
|
||||||
blkend = (offset + len - 1) / blksize;
|
blkend = (offset + len - 1) / blksize;
|
||||||
|
|
||||||
|
finfo("blkoffset=%lu blkstart=%ld blkend=%ld\n",
|
||||||
|
blkoffset, blkstart, blkend);
|
||||||
|
|
||||||
/* Check if we have to do a partial read on the first block. We
|
/* Check if we have to do a partial read on the first block. We
|
||||||
* need to do this if the blkoffset is not zero. In that case we need
|
* need to do this if the blkoffset is not zero. In that case we need
|
||||||
* read only the data at the end of the block.
|
* read only the data at the end of the block.
|
||||||
@ -307,8 +324,19 @@ ssize_t spiffs_mtd_read(FAR struct spiffs_s *fs, off_t offset, size_t len,
|
|||||||
|
|
||||||
/* Read all intervening complete blocks... all at once */
|
/* Read all intervening complete blocks... all at once */
|
||||||
|
|
||||||
nblocks = blkend - blkstart + 1;
|
nblocks = blkend - blkstart;
|
||||||
if (nblocks > 0 && remaining >= blksize)
|
if (remaining > 0 && (remaining & blkmask) == 0)
|
||||||
|
{
|
||||||
|
/* The final block is a complete transfer */
|
||||||
|
|
||||||
|
nblocks++;
|
||||||
|
}
|
||||||
|
|
||||||
|
finfo("Whole blocks=%d blkstart=%lu remaining=%lu\n",
|
||||||
|
nblocks, (unsigned long)blkstart,
|
||||||
|
(unsigned long)remaining);
|
||||||
|
|
||||||
|
if (nblocks > 0)
|
||||||
{
|
{
|
||||||
ret = MTD_BREAD(fs->mtd, blkstart, nblocks, dest);
|
ret = MTD_BREAD(fs->mtd, blkstart, nblocks, dest);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
|
Loading…
Reference in New Issue
Block a user