aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/fat/fatent.c18
1 files changed, 14 insertions, 4 deletions
diff --git a/fs/fat/fatent.c b/fs/fat/fatent.c
index 5b5f49061b7c..13513992da3c 100644
--- a/fs/fat/fatent.c
+++ b/fs/fat/fatent.c
@@ -317,10 +317,20 @@ static inline int fat_ent_update_ptr(struct super_block *sb,
317 /* Is this fatent's blocks including this entry? */ 317 /* Is this fatent's blocks including this entry? */
318 if (!fatent->nr_bhs || bhs[0]->b_blocknr != blocknr) 318 if (!fatent->nr_bhs || bhs[0]->b_blocknr != blocknr)
319 return 0; 319 return 0;
320 /* Does this entry need the next block? */ 320 if (sbi->fat_bits == 12) {
321 if (sbi->fat_bits == 12 && (offset + 1) >= sb->s_blocksize) { 321 if ((offset + 1) < sb->s_blocksize) {
322 if (fatent->nr_bhs != 2 || bhs[1]->b_blocknr != (blocknr + 1)) 322 /* This entry is on bhs[0]. */
323 return 0; 323 if (fatent->nr_bhs == 2) {
324 brelse(bhs[1]);
325 fatent->nr_bhs = 1;
326 }
327 } else {
328 /* This entry needs the next block. */
329 if (fatent->nr_bhs != 2)
330 return 0;
331 if (bhs[1]->b_blocknr != (blocknr + 1))
332 return 0;
333 }
324 } 334 }
325 ops->ent_set_ptr(fatent, offset); 335 ops->ent_set_ptr(fatent, offset);
326 return 1; 336 return 1;