Alexander Kuleshov <[email protected]> writes: Those are not EOF, those are mask. For example, EOF_FAT12 can be 0xff8 (some old drivers did this really).
And 0xf0000000 means ~0x0fffffff, not free cluster (because FAT32 is 28bits actually). > Signed-off-by: Alexander Kuleshov <[email protected]> > --- > fs/fat/fatent.c | 8 ++++---- > include/uapi/linux/msdos_fs.h | 3 +++ > 2 files changed, 7 insertions(+), 4 deletions(-) > > diff --git a/fs/fat/fatent.c b/fs/fat/fatent.c > index 260705c..3def7bd 100644 > --- a/fs/fat/fatent.c > +++ b/fs/fat/fatent.c > @@ -129,7 +129,7 @@ static int fat12_ent_get(struct fat_entry *fatent) > next = (*ent12_p[1] << 8) | *ent12_p[0]; > spin_unlock(&fat12_entry_lock); > > - next &= 0x0fff; > + next &= EOF_FAT12; > if (next >= BAD_FAT12) > next = FAT_ENT_EOF; > return next; > @@ -146,7 +146,7 @@ static int fat16_ent_get(struct fat_entry *fatent) > > static int fat32_ent_get(struct fat_entry *fatent) > { > - int next = le32_to_cpu(*fatent->u.ent32_p) & 0x0fffffff; > + int next = le32_to_cpu(*fatent->u.ent32_p) & EOF_FAT32; > WARN_ON((unsigned long)fatent->u.ent32_p & (4 - 1)); > if (next >= BAD_FAT32) > next = FAT_ENT_EOF; > @@ -186,8 +186,8 @@ static void fat16_ent_put(struct fat_entry *fatent, int > new) > > static void fat32_ent_put(struct fat_entry *fatent, int new) > { > - WARN_ON(new & 0xf0000000); > - new |= le32_to_cpu(*fatent->u.ent32_p) & ~0x0fffffff; > + WARN_ON(new & FAT_FREE_CLUSTER); > + new |= le32_to_cpu(*fatent->u.ent32_p) & ~EOF_FAT32; > *fatent->u.ent32_p = cpu_to_le32(new); > mark_buffer_dirty_inode(fatent->bhs[0], fatent->fat_inode); > } > diff --git a/include/uapi/linux/msdos_fs.h b/include/uapi/linux/msdos_fs.h > index e956704..6d085bf 100644 > --- a/include/uapi/linux/msdos_fs.h > +++ b/include/uapi/linux/msdos_fs.h > @@ -58,6 +58,9 @@ > #define FAT_FIRST_ENT(s, x) ((MSDOS_SB(s)->fat_bits == 32 ? 0x0FFFFF00 : \ > MSDOS_SB(s)->fat_bits == 16 ? 0xFF00 : 0xF00) | (x)) > > +/* indicates that a cluster is free */ > +#define FAT_FREE_CLUSTER 0xf0000000 > + > /* start of data cluster's entry (number of reserved clusters) */ > #define FAT_START_ENT 2 -- OGAWA Hirofumi <[email protected]> -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/

