fat: Fix fat_ent_update_ptr() for FAT12
This fixes the missing update for bhs/nr_bhs in case the caller accessed from block boundary to first block of boundary. Signed-off-by: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
d3dfa8228f
commit
5e35dd4651
1 changed files with 14 additions and 4 deletions
|
@ -317,10 +317,20 @@ static inline int fat_ent_update_ptr(struct super_block *sb,
|
|||
/* Is this fatent's blocks including this entry? */
|
||||
if (!fatent->nr_bhs || bhs[0]->b_blocknr != blocknr)
|
||||
return 0;
|
||||
/* Does this entry need the next block? */
|
||||
if (sbi->fat_bits == 12 && (offset + 1) >= sb->s_blocksize) {
|
||||
if (fatent->nr_bhs != 2 || bhs[1]->b_blocknr != (blocknr + 1))
|
||||
return 0;
|
||||
if (sbi->fat_bits == 12) {
|
||||
if ((offset + 1) < sb->s_blocksize) {
|
||||
/* This entry is on bhs[0]. */
|
||||
if (fatent->nr_bhs == 2) {
|
||||
brelse(bhs[1]);
|
||||
fatent->nr_bhs = 1;
|
||||
}
|
||||
} else {
|
||||
/* This entry needs the next block. */
|
||||
if (fatent->nr_bhs != 2)
|
||||
return 0;
|
||||
if (bhs[1]->b_blocknr != (blocknr + 1))
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
ops->ent_set_ptr(fatent, offset);
|
||||
return 1;
|
||||
|
|
Loading…
Reference in a new issue