|
@@ -537,7 +537,7 @@ static int fat_statfs(struct dentry *dentry, struct kstatfs *buf)
|
|
|
struct msdos_sb_info *sbi = MSDOS_SB(dentry->d_sb);
|
|
|
|
|
|
/* If the count of free cluster is still unknown, counts it here. */
|
|
|
- if (sbi->free_clusters == -1) {
|
|
|
+ if (sbi->free_clusters == -1 || !sbi->free_clus_valid) {
|
|
|
int err = fat_count_free_clusters(dentry->d_sb);
|
|
|
if (err)
|
|
|
return err;
|
|
@@ -1274,6 +1274,7 @@ int fat_fill_super(struct super_block *sb, void *data, int silent,
|
|
|
sbi->fat_length = le16_to_cpu(b->fat_length);
|
|
|
sbi->root_cluster = 0;
|
|
|
sbi->free_clusters = -1; /* Don't know yet */
|
|
|
+ sbi->free_clus_valid = 0;
|
|
|
sbi->prev_free = FAT_START_ENT;
|
|
|
|
|
|
if (!sbi->fat_length && b->fat32_length) {
|
|
@@ -1309,8 +1310,8 @@ int fat_fill_super(struct super_block *sb, void *data, int silent,
|
|
|
sbi->fsinfo_sector);
|
|
|
} else {
|
|
|
if (sbi->options.usefree)
|
|
|
- sbi->free_clusters =
|
|
|
- le32_to_cpu(fsinfo->free_clusters);
|
|
|
+ sbi->free_clus_valid = 1;
|
|
|
+ sbi->free_clusters = le32_to_cpu(fsinfo->free_clusters);
|
|
|
sbi->prev_free = le32_to_cpu(fsinfo->next_cluster);
|
|
|
}
|
|
|
|