From 61dc36aa9fe6086e7ed3f37e8e4953a1ed5cf1a5 Mon Sep 17 00:00:00 2001 From: batt Date: Thu, 7 Feb 2008 21:27:28 +0000 Subject: [PATCH] Insert invalid blocks at free blocks beginning. git-svn-id: https://src.develer.com/svnoss/bertos/trunk@1096 38d2e660-2303-0410-9eaa-f027e97ec537 --- fs/battfs.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/fs/battfs.c b/fs/battfs.c index 422ce9e6..9923cc27 100644 --- a/fs/battfs.c +++ b/fs/battfs.c @@ -199,14 +199,14 @@ 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 * \a free_number to compute position. */ -static void insertFreePage(struct BattFsSuper *disk, pgoff_t *filelen_table, mark_t mark, pgcnt_t page) +static void insertFreePage(struct BattFsSuper *disk, mark_t mark, pgcnt_t page) { - ASSERT(mark >= disk->free_start); - ASSERT(mark < disk->free_next); + ASSERT(mark - disk->free_start < disk->free_next - disk->free_start); - pgcnt_t free_pos = countPages(filelen_table, BATTFS_MAX_FILES - 1); - free_pos += mark - disk->free_start; - TRACEMSG("mark:%d, page:%d, free_start:%d, free_next:%d, free_pos:%d\n", + pgcnt_t free_pos = disk->page_count - disk->free_next + mark; + ASSERT(free_pos < disk->page_count); + + TRACEMSG("mark:%u, page:%u, free_start:%u, free_next:%u, free_pos:%u\n", mark, page, disk->free_start, disk->free_next, free_pos); ASSERT(disk->page_array[free_pos] == PAGE_UNSET_SENTINEL); @@ -452,17 +452,17 @@ bool battfs_init(struct BattFsSuper *disk) if (!battfs_markFree(disk, &hdr, old_page)) return false; - insertFreePage(disk, filelen_table, hdr.mark, old_page); + insertFreePage(disk, hdr.mark, old_page); } } else { /* Check if page is free */ if (hdr.fcs_free != computeFcsFree(&hdr)) - /* Page is not a valid marked page, insert at the end of list */ - hdr.mark = disk->free_next++; + /* Page is not a valid marked page, insert at list beginning */ + hdr.mark = --disk->free_start; - insertFreePage(disk, filelen_table, hdr.mark, page); + insertFreePage(disk, hdr.mark, page); } } -- 2.25.1