projects
/
bertos.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
For at91sam7 family.
[bertos.git]
/
fs
/
battfs.c
diff --git
a/fs/battfs.c
b/fs/battfs.c
index 8d02d94f5fcbfacf38ef9fafdaa17e64107c442a..9a4275d672628869a9344ed73ba7ca9d3c215688 100644
(file)
--- a/
fs/battfs.c
+++ b/
fs/battfs.c
@@
-174,12
+174,12
@@
static void movePages(struct BattFsSuper *disk, pgcnt_t src, int offset)
/**
* Insert \a page into page allocation array of \a disk, using \a filelen_table and
/**
* Insert \a page into page allocation array of \a disk, using \a filelen_table and
- * \a free_number to compu
r
e position.
+ * \a free_number to compu
t
e position.
*/
static void insertFreePage(struct BattFsSuper *disk, pgoff_t *filelen_table, mark_t free_number, pgcnt_t page)
{
*/
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;
pgcnt_t free_pos = countPages(filelen_table, BATTFS_MAX_FILES - 1);
free_pos += free_number - disk->min_free;
@@
-269,7
+269,7
@@
bool battfs_init(struct BattFsSuper *disk)
/* Increase free space */
disk->free_bytes += disk->page_size - sizeof(BattFsPageHeader);
/* Increase free space */
disk->free_bytes += disk->page_size - sizeof(BattFsPageHeader);
- /* Check if
pu
tting mark to MARK_PAGE_VALID makes fcs correct */
+ /* Check if
se
tting mark to MARK_PAGE_VALID makes fcs correct */
mark_t old_mark = hdr.mark;
hdr.mark = MARK_PAGE_VALID;
rotating_init(&cks);
mark_t old_mark = hdr.mark;
hdr.mark = MARK_PAGE_VALID;
rotating_init(&cks);
@@
-339,8
+339,9
@@
bool battfs_init(struct BattFsSuper *disk)
pgcnt_t new_page, old_page;
fill_t old_fill;
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];
{
/* Actual header is newer than the previuos one */
old_page = disk->page_array[array_pos];
@@
-378,17
+379,16
@@
bool battfs_init(struct BattFsSuper *disk)
}
else
{
}
else
{
- /* Check if
pu
tting mark to MARK_PAGE_VALID makes fcs correct */
- mark_t
old_
mark = hdr.mark;
+ /* Check if
se
tting mark to MARK_PAGE_VALID makes fcs correct */
+ mark_t mark = hdr.mark;
hdr.mark = MARK_PAGE_VALID;
rotating_init(&cks);
rotating_update(&hdr, sizeof(BattFsPageHeader) - sizeof(rotating_t), &cks);
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 */
/* 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);
}
}
}
}