Changeset 9c2c7d2 in mainline for uspace/srv/volsrv/part.c
- Timestamp:
- 2017-07-06T15:52:15Z (8 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 5cd1eb9a
- Parents:
- d858a660
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/volsrv/part.c
rd858a660 r9c2c7d2 143 143 } 144 144 145 static int vol_part_add_locked(service_id_t sid) 146 { 147 vol_part_t *part; 145 static int vol_part_probe(vol_part_t *part) 146 { 148 147 bool empty; 149 148 vfs_fs_probe_info_t info; 150 149 struct fsname_type *fst; 150 char *label; 151 int rc; 152 153 log_msg(LOG_DEFAULT, LVL_NOTE, "Probe partition %s", part->svc_name); 154 155 assert(fibril_mutex_is_locked(&vol_parts_lock)); 156 157 fst = &fstab[0]; 158 while (fst->name != NULL) { 159 rc = vfs_fsprobe(fst->name, part->svc_id, &info); 160 if (rc == EOK) 161 break; 162 ++fst; 163 } 164 165 if (fst->name != NULL) { 166 log_msg(LOG_DEFAULT, LVL_NOTE, "Found %s, label '%s'", 167 fst->name, info.label); 168 label = str_dup(info.label); 169 if (label == NULL) { 170 rc = ENOMEM; 171 goto error; 172 } 173 174 part->pcnt = vpc_fs; 175 part->fstype = fst->fstype; 176 part->label = label; 177 } else { 178 log_msg(LOG_DEFAULT, LVL_NOTE, "Partition does not contain " 179 "a recognized file system."); 180 181 rc = volsrv_part_is_empty(part->svc_id, &empty); 182 if (rc != EOK) { 183 log_msg(LOG_DEFAULT, LVL_ERROR, "Failed determining if " 184 "partition is empty."); 185 rc = EIO; 186 goto error; 187 } 188 189 label = str_dup(""); 190 if (label == NULL) { 191 rc = ENOMEM; 192 goto error; 193 } 194 195 part->pcnt = empty ? vpc_empty : vpc_unknown; 196 part->label = label; 197 } 198 199 return EOK; 200 201 error: 202 return rc; 203 } 204 205 static int vol_part_add_locked(service_id_t sid) 206 { 207 vol_part_t *part; 151 208 int rc; 152 209 … … 171 228 } 172 229 173 log_msg(LOG_DEFAULT, LVL_NOTE, "Probe partition %s", part->svc_name); 174 175 fst = &fstab[0]; 176 while (fst->name != NULL) { 177 rc = vfs_fsprobe(fst->name, sid, &info); 178 if (rc == EOK) 179 break; 180 ++fst; 181 } 182 183 if (fst->name != NULL) { 184 log_msg(LOG_DEFAULT, LVL_NOTE, "Found %s, label '%s'", 185 fst->name, info.label); 186 part->pcnt = vpc_fs; 187 part->fstype = fst->fstype; 188 part->label = str_dup(info.label); 189 if (part->label == NULL) 190 goto error; 191 } else { 192 log_msg(LOG_DEFAULT, LVL_NOTE, "Partition does not contain " 193 "a recognized file system."); 194 195 rc = volsrv_part_is_empty(sid, &empty); 196 if (rc != EOK) { 197 log_msg(LOG_DEFAULT, LVL_ERROR, "Failed determining if " 198 "partition is empty."); 199 goto error; 200 } 201 202 part->pcnt = empty ? vpc_empty : vpc_unknown; 203 part->label = str_dup(""); 204 if (part->label == NULL) 205 goto error; 206 } 230 rc = vol_part_probe(part); 231 if (rc != EOK) 232 goto error; 207 233 208 234 list_append(&part->lparts, &vol_parts); … … 311 337 } 312 338 313 int vol_part_mkfs_part(vol_part_t *part, vol_fstype_t fstype) 339 int vol_part_mkfs_part(vol_part_t *part, vol_fstype_t fstype, 340 const char *label) 314 341 { 315 342 int rc; … … 317 344 log_msg(LOG_DEFAULT, LVL_DEBUG, "vol_part_mkfs_part()"); 318 345 319 rc = volsrv_part_mkfs(part->svc_id, fstype); 346 fibril_mutex_lock(&vol_parts_lock); 347 348 rc = volsrv_part_mkfs(part->svc_id, fstype, label); 320 349 if (rc != EOK) { 321 350 log_msg(LOG_DEFAULT, LVL_DEBUG, "vol_part_mkfs_part() - failed %d", 322 351 rc); 352 fibril_mutex_unlock(&vol_parts_lock); 323 353 return rc; 324 354 } 325 355 326 part->pcnt = vpc_fs; 327 part->fstype = fstype; 356 /* 357 * Re-probe the partition to update information. This is needed since 358 * the FS can make conversions of the volume label (e.g. make it 359 * uppercase). 360 */ 361 rc = vol_part_probe(part); 362 if (rc != EOK) { 363 fibril_mutex_unlock(&vol_parts_lock); 364 return rc; 365 } 366 367 fibril_mutex_unlock(&vol_parts_lock); 328 368 return EOK; 329 369 }
Note:
See TracChangeset
for help on using the changeset viewer.