summaryrefslogtreecommitdiff
path: root/fs/fat
diff options
context:
space:
mode:
Diffstat (limited to 'fs/fat')
-rw-r--r--fs/fat/fat_write.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/fs/fat/fat_write.c b/fs/fat/fat_write.c
index 3542b0bcbd4..3bfc1c4b32b 100644
--- a/fs/fat/fat_write.c
+++ b/fs/fat/fat_write.c
@@ -112,6 +112,7 @@ static void set_name(dir_entry *dirent, const char *filename)
debug("ext : %s\n", dirent->ext);
}
+static __u8 num_of_fats;
/*
* Write fat buffer into block device
*/
@@ -134,6 +135,15 @@ static int flush_fat_buffer(fsdata *mydata)
return -1;
}
+ if (num_of_fats == 2) {
+ /* Update corresponding second FAT blocks */
+ startblock += mydata->fatlength;
+ if (disk_write(startblock, getsize, bufptr) < 0) {
+ debug("error: writing second FAT blocks\n");
+ return -1;
+ }
+ }
+
return 0;
}
@@ -950,6 +960,7 @@ static int do_fat_write(const char *filename, void *buffer,
cursect = mydata->rootdir_sect
= mydata->fat_sect + mydata->fatlength * bs.fats;
+ num_of_fats = bs.fats;
mydata->sect_size = (bs.sector_size[1] << 8) + bs.sector_size[0];
mydata->clust_size = bs.cluster_size;