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
@@ -83,6 +83,11 @@ static int hpfs_get_block(struct inode *inode, sector_t iblock, struct buffer_he
|
||||
if (s) {
|
||||
if (bh_result->b_size >> 9 < n_secs)
|
||||
n_secs = bh_result->b_size >> 9;
|
||||
n_secs = hpfs_search_hotfix_map_for_range(inode->i_sb, s, n_secs);
|
||||
if (unlikely(!n_secs)) {
|
||||
s = hpfs_search_hotfix_map(inode->i_sb, s);
|
||||
n_secs = 1;
|
||||
}
|
||||
map_bh(bh_result, inode->i_sb, s);
|
||||
bh_result->b_size = n_secs << 9;
|
||||
goto ret_0;
|
||||
@@ -101,7 +106,7 @@ static int hpfs_get_block(struct inode *inode, sector_t iblock, struct buffer_he
|
||||
inode->i_blocks++;
|
||||
hpfs_i(inode)->mmu_private += 512;
|
||||
set_buffer_new(bh_result);
|
||||
map_bh(bh_result, inode->i_sb, s);
|
||||
map_bh(bh_result, inode->i_sb, hpfs_search_hotfix_map(inode->i_sb, s));
|
||||
ret_0:
|
||||
r = 0;
|
||||
ret_r:
|
||||
@@ -181,7 +186,7 @@ static int hpfs_write_end(struct file *file, struct address_space *mapping,
|
||||
|
||||
static sector_t _hpfs_bmap(struct address_space *mapping, sector_t block)
|
||||
{
|
||||
return generic_block_bmap(mapping,block,hpfs_get_block);
|
||||
return generic_block_bmap(mapping, block, hpfs_get_block);
|
||||
}
|
||||
|
||||
const struct address_space_operations hpfs_aops = {
|
||||
|
Reference in New Issue
Block a user