|
@@ -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;
|