fs: fat: extend get_fs_info() for write use
authorAKASHI Takahiro <takahiro.akashi@linaro.org>
Tue, 11 Sep 2018 06:58:58 +0000 (15:58 +0900)
committerAlexander Graf <agraf@suse.de>
Sun, 23 Sep 2018 19:55:29 +0000 (21:55 +0200)
get_fs_info() was introduced in major re-work of read operation by Rob.
We want to reuse this function in write operation by extending it with
additional members in fsdata structure.

Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org>
Signed-off-by: Alexander Graf <agraf@suse.de>
fs/fat/fat.c
include/fat.h

index 4b722fc5ca3ddf93477b32e1d46be8b0b8a2952e..5f921e81e333dd1f14b00bfa3dfb81d6a13e8c54 100644 (file)
@@ -558,10 +558,17 @@ static int get_fs_info(fsdata *mydata)
 
        if (mydata->fatsize == 32) {
                mydata->fatlength = bs.fat32_length;
+               mydata->total_sect = bs.total_sect;
        } else {
                mydata->fatlength = bs.fat_length;
+               mydata->total_sect = (bs.sectors[1] << 8) + bs.sectors[0];
+               if (!mydata->total_sect)
+                       mydata->total_sect = bs.total_sect;
        }
+       if (!mydata->total_sect) /* unlikely */
+               mydata->total_sect = (u32)cur_part_info.size;
 
+       mydata->fats = bs.fats;
        mydata->fat_sect = bs.reserved;
 
        mydata->rootdir_sect = mydata->fat_sect + mydata->fatlength * bs.fats;
index 09e14236858571c2e6dc4cbe2b2e800e4a03ee03..a236451add591d0665ef45e83ac46da4f06e1d1a 100644 (file)
@@ -173,6 +173,8 @@ typedef struct {
        int     fatbufnum;      /* Used by get_fatent, init to -1 */
        int     rootdir_size;   /* Size of root dir for non-FAT32 */
        __u32   root_cluster;   /* First cluster of root dir for FAT32 */
+       u32     total_sect;     /* Number of sectors */
+       int     fats;           /* Number of FATs */
 } fsdata;
 
 static inline u32 clust_to_sect(fsdata *fsdata, u32 clust)