Messages in this thread Patch in this message | | | From | steve@digidesc ... | Subject | [PATCH] FAT: optimize FSINFO writeback | Date | Tue, 30 Jun 2009 15:02:10 -0500 |
| |
Only write the FSINFO block back to disk when its contents change. This optimization can be important when the underlying physical media can wear out, i.e. Flash.
Signed-off-by: Steven J. Magnani <steve@digidescorp.com> --- diff -uprN a/fs/fat/misc.c b/fs/fat/misc.c --- a/fs/fat/misc.c 2009-06-29 11:12:40.000000000 -0500 +++ b/fs/fat/misc.c 2009-06-29 11:46:45.000000000 -0500 @@ -61,11 +61,25 @@ void fat_clusters_flush(struct super_blo le32_to_cpu(fsinfo->signature2), sbi->fsinfo_sector); } else { - if (sbi->free_clusters != -1) - fsinfo->free_clusters = cpu_to_le32(sbi->free_clusters); - if (sbi->prev_free != -1) - fsinfo->next_cluster = cpu_to_le32(sbi->prev_free); - mark_buffer_dirty(bh); + char write_needed = 0; + __le32 le_value; + + if (sbi->free_clusters != -1) { + le_value = cpu_to_le32(sbi->free_clusters); + if (fsinfo->free_clusters != le_value) { + fsinfo->free_clusters = le_value; + write_needed = 1; + } + } + if (sbi->prev_free != -1) { + le_value = cpu_to_le32(sbi->prev_free); + if (fsinfo->next_cluster != le_value) { + fsinfo->next_cluster = le_value; + write_needed = 1; + } + } + if (write_needed) + mark_buffer_dirty(bh); } brelse(bh); }
| |