mirror of
https://github.com/lkl/linux.git
synced 2025-12-19 16:13:19 +09:00
hpfs: support hotfixes
When the OS/2 driver hits a disk write error, it writes the sector to another location and adds the sector mapping to the hotfix map. This patch makes the hpfs driver understand the hotfix map and remap accesses accoring to it. Signed-off-by: Mikulas Patocka <mikulas@twibright.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
committed by
Linus Torvalds
parent
64291f7db5
commit
a64eefaac1
@@ -130,6 +130,32 @@ __le32 *hpfs_load_bitmap_directory(struct super_block *s, secno bmp)
|
||||
return b;
|
||||
}
|
||||
|
||||
void hpfs_load_hotfix_map(struct super_block *s, struct hpfs_spare_block *spareblock)
|
||||
{
|
||||
struct quad_buffer_head qbh;
|
||||
u32 *directory;
|
||||
u32 n_hotfixes, n_used_hotfixes;
|
||||
unsigned i;
|
||||
|
||||
n_hotfixes = le32_to_cpu(spareblock->n_spares);
|
||||
n_used_hotfixes = le32_to_cpu(spareblock->n_spares_used);
|
||||
|
||||
if (n_hotfixes > 256 || n_used_hotfixes > n_hotfixes) {
|
||||
hpfs_error(s, "invalid number of hotfixes: %u, used: %u", n_hotfixes, n_used_hotfixes);
|
||||
return;
|
||||
}
|
||||
if (!(directory = hpfs_map_4sectors(s, le32_to_cpu(spareblock->hotfix_map), &qbh, 0))) {
|
||||
hpfs_error(s, "can't load hotfix map");
|
||||
return;
|
||||
}
|
||||
for (i = 0; i < n_used_hotfixes; i++) {
|
||||
hpfs_sb(s)->hotfix_from[i] = le32_to_cpu(directory[i]);
|
||||
hpfs_sb(s)->hotfix_to[i] = le32_to_cpu(directory[n_hotfixes + i]);
|
||||
}
|
||||
hpfs_sb(s)->n_hotfixes = n_used_hotfixes;
|
||||
hpfs_brelse4(&qbh);
|
||||
}
|
||||
|
||||
/*
|
||||
* Load fnode to memory
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user