Optimize.
[bertos.git] / fs / battfs.c
index a2a0326e02a8a3a18597c925f3243815477a9b85..752ec3c61981a582e581b0ea8a7ecdd1ab33bcb0 100644 (file)
@@ -319,7 +319,7 @@ bool battfs_init(struct BattFsSuper *disk)
                        {
                                BattFsPageHeader hdr_old;
                                
-                               if (!battfs_readHeader(disk, page, &hdr_old))
+                               if (!battfs_readHeader(disk, disk->page_array[array_pos], &hdr_old))
                                        return false;
 
                                #ifdef _DEBUG
@@ -339,6 +339,7 @@ bool battfs_init(struct BattFsSuper *disk)
                                pgcnt_t new_page, old_page;
                                fill_t old_fill;
 
+                               #warning fix seq wraparound!
                                if (hdr.seq > hdr_old.seq)
                                {
                                        /* Actual header is newer than the previuos one */
@@ -358,7 +359,7 @@ bool battfs_init(struct BattFsSuper *disk)
                                disk->page_array[array_pos] = new_page;
 
                                /* Add free space */
-                               disk->free_bytes -= disk->page_size - sizeof(BattFsPageHeader) - old_fill;
+                               disk->free_bytes += old_fill;
 
                                /* Shift all array one position to the left, overwriting duplicate page */
                                array_pos -= hdr.pgoff;
@@ -378,16 +379,15 @@ bool battfs_init(struct BattFsSuper *disk)
                else
                {
                        /* Check if putting mark to MARK_PAGE_VALID makes fcs correct */
-                       mark_t old_mark = hdr.mark;
+                       mark_t mark = hdr.mark;
                        hdr.mark = MARK_PAGE_VALID;
                        rotating_init(&cks);
                        rotating_update(&hdr, sizeof(BattFsPageHeader) - sizeof(rotating_t), &cks);
-                       if (cks == hdr.fcs)
-                               /* Page is a valid marked page, insert in free list in correct order */
-                               insertFreePage(disk, filelen_table, old_mark, page);
-                       else
+                       if (cks != hdr.fcs)
                                /* Page is not a valid marked page, insert at the end of list */
-                               insertFreePage(disk, filelen_table, ++disk->max_free, page);
+                               mark = ++disk->max_free;
+
+                       insertFreePage(disk, filelen_table, mark, page);
                }
        }