Add missing page erase.
[bertos.git] / bertos / fs / battfs.c
index a817d0beba5eea0154c53e134b06d61b9ad25d91..9c72f74928c024bf331df8bde3d5118ba3d81482 100644 (file)
@@ -44,7 +44,7 @@
 #include <cfg/macros.h> /* MIN, MAX */
 #include <cpu/byteorder.h> /* cpu_to_xx */
 
-#define LOG_LEVEL       LOG_LVL_WARNING
+#define LOG_LEVEL       LOG_LVL_INFO
 #define LOG_FORMAT      LOG_FMT_VERBOSE
 #include <cfg/log.h>
 
@@ -351,7 +351,10 @@ static bool battfs_flushBuffer(struct BattFsSuper *disk)
 {
        if (disk->cache_dirty)
        {
-               TRACE;
+               LOG_INFO("Flushing to disk page %d\n", disk->curr_page);
+               if (!disk->erase(disk, disk->curr_page))
+                       return false;
+
                if (!disk->save(disk, disk->curr_page))
                        return false;
                disk->cache_dirty = false;
@@ -367,14 +370,16 @@ static bool battfs_flushBuffer(struct BattFsSuper *disk)
  */
 static bool battfs_loadPage(struct BattFsSuper *disk, pgcnt_t new_page)
 {
+       LOG_INFO("Loading page %d\n", new_page);
        if (disk->curr_page == new_page)
                return true;
 
-       if (battfs_flushBuffer(disk))
+       if (!battfs_flushBuffer(disk))
                return false;
 
        if (!disk->load(disk, new_page))
-                       return false;
+               return false;
+
        disk->curr_page = new_page;
        return true;
 }
@@ -586,10 +591,10 @@ static size_t battfs_read(struct KFile *fd, void *_buf, size_t size)
 static pgcnt_t *findFile(BattFsSuper *disk, inode_t inode)
 {
        BattFsPageHeader hdr;
-       pgcnt_t first = 0, page, last = disk->page_count -1;
+       pgcnt_t first = 0, page, last = disk->free_page_start;
        fcs_t fcs;
 
-       while (first <= last)
+       while (first < last)
        {
                page = (first + last) / 2;