/**
* Insert \a page into page allocation array of \a disk, using \a filelen_table and
- * \a free_number to compure position.
+ * \a free_number to compute position.
*/
static void insertFreePage(struct BattFsSuper *disk, pgoff_t *filelen_table, mark_t free_number, pgcnt_t page)
{
- ASSERT(mark >= disk->min_free);
- ASSERT(mark <= disk->max_free);
+ ASSERT(free_number >= disk->min_free);
+ ASSERT(free_number <= disk->max_free);
pgcnt_t free_pos = countPages(filelen_table, BATTFS_MAX_FILES - 1);
free_pos += free_number - disk->min_free;
/* Increase free space */
disk->free_bytes += disk->page_size - sizeof(BattFsPageHeader);
- /* Check if putting mark to MARK_PAGE_VALID makes fcs correct */
+ /* Check if setting mark to MARK_PAGE_VALID makes fcs correct */
mark_t old_mark = hdr.mark;
hdr.mark = MARK_PAGE_VALID;
rotating_init(&cks);
pgcnt_t new_page, old_page;
fill_t old_fill;
- #warning fix seq wraparound!
- if (hdr.seq > hdr_old.seq)
+ /* Fancy check to handle seq wraparound */
+ #define HALF_SEQ (1 << ((sizeof(seq_t) * CPU_BITS_PER_CHAR) - 1))
+ if ((hdr.seq - hdr_old.seq) < HALF_SEQ)
{
/* Actual header is newer than the previuos one */
old_page = disk->page_array[array_pos];
}
else
{
- /* Check if putting mark to MARK_PAGE_VALID makes fcs correct */
+ /* Check if setting mark to MARK_PAGE_VALID makes fcs correct */
mark_t mark = hdr.mark;
hdr.mark = MARK_PAGE_VALID;
rotating_init(&cks);