]> git.kernelconcepts.de Git - karo-tx-uboot.git/commitdiff
FAT: update the second FAT when writing a file
authorDonggeun Kim <dg77.kim@samsung.com>
Tue, 20 Dec 2011 18:34:27 +0000 (18:34 +0000)
committerWolfgang Denk <wd@denx.de>
Thu, 5 Jan 2012 19:10:38 +0000 (20:10 +0100)
After susccessful write to the FAT partition,
fsck program may print warning message due to different FAT,
provided that the filesystem supports two FATs.

This patch makes the second FAT to be same with the first one
when writing a file.

Signed-off-by: Donggeun Kim <dg77.kim@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
fs/fat/fat_write.c

index 3542b0bcbd469ea0fe1edab300608d194d6918a6..3bfc1c4b32be78a7256580801ea67601768c6814 100644 (file)
@@ -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;