diff --git a/drivers/misc/rwbuffer.c b/drivers/misc/rwbuffer.c index c168aa4acd..009756c1a0 100644 --- a/drivers/misc/rwbuffer.c +++ b/drivers/misc/rwbuffer.c @@ -144,6 +144,16 @@ static void rwb_wrflush(FAR struct rwbuffer_s *rwb) finfo("Flushing: blockstart=0x%08lx nblocks=%d from buffer=%p\n", (long)rwb->wrblockstart, rwb->wrnblocks, rwb->wrbuffer); + padblocks = rwb->wrblockstart % rwb->wralignblocks; + if (padblocks) + { + memmove(rwb->wrbuffer + padblocks * rwb->blocksize, + rwb->wrbuffer, rwb->wrnblocks * rwb->blocksize); + rwb->wrblockstart -= padblocks; + rwb->wrnblocks += padblocks; + rwb_read_(rwb, rwb->wrblockstart, padblocks, rwb->wrbuffer); + } + padblocks = rwb->wrnblocks % rwb->wralignblocks; if (padblocks) {