[U-Boot] FAT: update the second FAT when writing a file

Submitted by Donggeun Kim on Dec. 21, 2011, 4:34 a.m.

Details

Message ID 1324442067-6448-1-git-send-email-dg77.kim@samsung.com
State Accepted
Commit 627182ea9d0f157f7280aa650dd4c06461b20c3e
Headers show

Commit Message

Donggeun Kim Dec. 21, 2011, 4:34 a.m.
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 |   11 +++++++++++
 1 files changed, 11 insertions(+), 0 deletions(-)

Comments

Wolfgang Denk Jan. 5, 2012, 4:20 p.m.
Dear Donggeun Kim,

In message <1324442067-6448-1-git-send-email-dg77.kim@samsung.com> you wrote:
> 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 |   11 +++++++++++
>  1 files changed, 11 insertions(+), 0 deletions(-)

Applied, thanks.

Best regards,

Wolfgang Denk

Patch hide | download patch | download mbox

diff --git a/fs/fat/fat_write.c b/fs/fat/fat_write.c
index 4f1772f..9e34def 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;
 }
 
@@ -949,6 +959,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;