Skip to content

Safer FAT cache commit ordering and mirror handling#2

Open
morgenman wants to merge 1 commit into
masterfrom
fat32-changes
Open

Safer FAT cache commit ordering and mirror handling#2
morgenman wants to merge 1 commit into
masterfrom
fat32-changes

Conversation

@morgenman

Copy link
Copy Markdown
Owner

Add dc_commit_range() to flush dirty cache entries within a sector range, and use it in cache_commit() to flush data/directory sectors before FAT sectors so a crash mid-flush leaves only lost clusters rather than cross-linked chains.

In dc_writeback_callback(), write the FAT2 mirror before FAT1 (so FAT1 remains the last-known-good copy on power loss) and retry failed sector writes up to 3 times before panicking. In cache_sector(), fall back to reading FAT2 if FAT1 is unreadable.

Add dc_commit_range() to flush dirty cache entries within a sector
range, and use it in cache_commit() to flush data/directory sectors
before FAT sectors so a crash mid-flush leaves only lost clusters
rather than cross-linked chains.

In dc_writeback_callback(), write the FAT2 mirror before FAT1 (so FAT1
remains the last-known-good copy on power loss) and retry failed
sector writes up to 3 times before panicking. In cache_sector(), fall
back to reading FAT2 if FAT1 is unreadable.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant