[PATCH] fs: fat: Refactor dirty flag handling

Daniel Palmer daniel at thingy.jp
Tue Mar 10 23:06:18 CET 2026


Refactor the dirty flag handling a little bit so an inline
function is called instead of directly stuffing a value into
the variable.

This allows variable that holds the flag to be completely removed
if its not used i.e. CONFIG_FAT_WIRTE=n

Signed-off-by: Daniel Palmer <daniel at thingy.jp>
---
 fs/fat/fat.c       |  2 +-
 fs/fat/fat_write.c |  9 ++++-----
 include/fat.h      | 26 ++++++++++++++++++++++++++
 3 files changed, 31 insertions(+), 6 deletions(-)

diff --git a/fs/fat/fat.c b/fs/fat/fat.c
index 9ce5df59f9ba..1f05533a3781 100644
--- a/fs/fat/fat.c
+++ b/fs/fat/fat.c
@@ -690,7 +690,7 @@ static int get_fs_info(fsdata *mydata)
 	}
 
 	mydata->fatbufnum = -1;
-	mydata->fat_dirty = 0;
+	fat_mark_clean(mydata);
 	mydata->fatbuf = malloc_cache_aligned(FATBUFSIZE);
 	if (mydata->fatbuf == NULL) {
 		debug("Error: allocating memory\n");
diff --git a/fs/fat/fat_write.c b/fs/fat/fat_write.c
index 0b924541187c..e1b5b32bfcbf 100644
--- a/fs/fat/fat_write.c
+++ b/fs/fat/fat_write.c
@@ -223,9 +223,9 @@ static int flush_dirty_fat_buffer(fsdata *mydata)
 	__u32 startblock = mydata->fatbufnum * FATBUFBLOCKS;
 
 	debug("debug: evicting %d, dirty: %d\n", mydata->fatbufnum,
-	      (int)mydata->fat_dirty);
+	      (int)fat_is_dirty(mydata));
 
-	if ((!mydata->fat_dirty) || (mydata->fatbufnum == -1))
+	if (!fat_is_dirty(mydata) || (mydata->fatbufnum == -1))
 		return 0;
 
 	/* Cap length if fatlength is not a multiple of FATBUFBLOCKS */
@@ -248,7 +248,7 @@ static int flush_dirty_fat_buffer(fsdata *mydata)
 			return -1;
 		}
 	}
-	mydata->fat_dirty = 0;
+	fat_mark_clean(mydata);
 
 	return 0;
 }
@@ -484,8 +484,7 @@ static int set_fatent_value(fsdata *mydata, __u32 entry, __u32 entry_value)
 		mydata->fatbufnum = bufnum;
 	}
 
-	/* Mark as dirty */
-	mydata->fat_dirty = 1;
+	fat_mark_dirty(mydata);
 
 	/* Set the actual entry */
 	switch (mydata->fatsize) {
diff --git a/include/fat.h b/include/fat.h
index bdf430f70675..40da0370a444 100644
--- a/include/fat.h
+++ b/include/fat.h
@@ -165,7 +165,9 @@ typedef struct {
 	int	fatsize;	/* Size of FAT in bits */
 	__u32	fatlength;	/* Length of FAT in sectors */
 	__u16	fat_sect;	/* Starting sector of the FAT */
+#ifdef CONFIG_FAT_WRITE
 	__u8	fat_dirty;      /* Set if fatbuf has been modified */
+#endif
 	__u32	rootdir_sect;	/* Start sector of root directory */
 	__u16	sect_size;	/* Size of sectors in bytes */
 	__u16	clust_size;	/* Size of clusters in sectors */
@@ -190,6 +192,30 @@ static inline u32 sect_to_clust(fsdata *fsdata, int sect)
 	return (sect - fsdata->data_begin) / fsdata->clust_size;
 }
 
+static inline void fat_mark_clean(fsdata *fsdata)
+{
+#ifdef CONFIG_FAT_WRITE
+	fsdata->fat_dirty = 0;
+#endif
+}
+
+static inline void fat_mark_dirty(fsdata *fsdata)
+{
+#ifdef CONFIG_FAT_WRITE
+	fsdata->fat_dirty = 1;
+#endif
+}
+
+static inline bool fat_is_dirty(fsdata *fsdata)
+{
+#ifdef CONFIG_FAT_WRITE
+	if (fsdata->fat_dirty)
+		return true;
+#endif
+
+	return false;
+}
+
 int file_fat_detectfs(void);
 int fat_exists(const char *filename);
 int fat_size(const char *filename, loff_t *size);
-- 
2.51.0



More information about the U-Boot mailing list