Changes in / [0f3744d:e231d26] in mainline
- Location:
- uspace/srv/fs/fat
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/fs/fat/fat.h
r0f3744d re231d26 141 141 } __attribute__ ((packed)) fat_bs_t; 142 142 143 #define FAT32_FSINFO_SIG1 "RRaA"144 #define FAT32_FSINFO_SIG2 "rrAa"145 #define FAT32_FSINFO_SIG3 "\x00\x00\x55\xaa"146 147 typedef struct {148 uint8_t sig1[4];149 uint8_t res1[480];150 uint8_t sig2[4];151 uint32_t free_clusters;152 uint32_t last_allocated_cluster;153 uint8_t res2[12];154 uint8_t sig3[4];155 } __attribute__ ((packed)) fat32_fsinfo_t;156 157 143 typedef enum { 158 144 FAT_INVALID, -
uspace/srv/fs/fat/fat_ops.c
r0f3744d re231d26 1025 1025 } 1026 1026 1027 static int fat_update_fat32_fsinfo(service_id_t service_id)1028 {1029 fat_bs_t *bs;1030 fat32_fsinfo_t *info;1031 block_t *b;1032 int rc;1033 1034 bs = block_bb_get(service_id);1035 assert(FAT_IS_FAT32(bs));1036 1037 rc = block_get(&b, service_id, uint16_t_le2host(bs->fat32.fsinfo_sec),1038 BLOCK_FLAGS_NONE);1039 if (rc != EOK)1040 return rc;1041 1042 info = (fat32_fsinfo_t *) b->data;1043 1044 if (bcmp(info->sig1, FAT32_FSINFO_SIG1, sizeof(info->sig1)) ||1045 bcmp(info->sig2, FAT32_FSINFO_SIG2, sizeof(info->sig2)) ||1046 bcmp(info->sig3, FAT32_FSINFO_SIG3, sizeof(info->sig3))) {1047 (void) block_put(b);1048 return EINVAL;1049 }1050 1051 /* For now, invalidate the counter. */1052 info->free_clusters = host2uint16_t_le(-1);1053 1054 b->dirty = true;1055 return block_put(b);1056 }1057 1058 1027 static int fat_unmounted(service_id_t service_id) 1059 1028 { 1060 1029 fs_node_t *fn; 1061 1030 fat_node_t *nodep; 1062 fat_bs_t *bs; 1063 int rc; 1064 1065 bs = block_bb_get(service_id); 1031 int rc; 1066 1032 1067 1033 rc = fat_root_get(&fn, service_id); … … 1077 1043 (void) fat_node_put(fn); 1078 1044 return EBUSY; 1079 }1080 1081 if (FAT_IS_FAT32(bs)) {1082 /*1083 * Attempt to update the FAT32 FS info.1084 */1085 (void) fat_update_fat32_fsinfo(service_id);1086 1045 } 1087 1046
Note:
See TracChangeset
for help on using the changeset viewer.