Changeset d30e067 in mainline for uspace/srv
- Timestamp:
- 2025-03-02T20:02:33Z (10 months ago)
- Children:
- 8cdf360
- Parents:
- 7debda3 (diff), 4285f384 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)links above to see all the changes relative to each parent. - Location:
- uspace/srv
- Files:
-
- 17 edited
-
bd/vbd/disk.c (modified) (5 diffs)
-
devman/dev.c (modified) (3 diffs)
-
devman/dev.h (modified) (2 diffs)
-
devman/devman.h (modified) (3 diffs)
-
devman/devtree.c (modified) (2 diffs)
-
devman/devtree.h (modified) (2 diffs)
-
devman/driver.c (modified) (5 diffs)
-
devman/drv_conn.c (modified) (3 diffs)
-
devman/main.c (modified) (2 diffs)
-
loader/main.c (modified) (1 diff)
-
logger/logs.c (modified) (2 diffs)
-
system/system.c (modified) (3 diffs)
-
vfs/vfs_register.c (modified) (1 diff)
-
volsrv/meson.build (modified) (2 diffs)
-
volsrv/part.c (modified) (5 diffs)
-
volsrv/part.h (modified) (2 diffs)
-
volsrv/volsrv.c (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/bd/vbd/disk.c
r7debda3 rd30e067 1 1 /* 2 * Copyright (c) 202 4Jiri Svoboda2 * Copyright (c) 2025 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 35 35 36 36 #include <adt/list.h> 37 #include <bd.h> 37 38 #include <bd_srv.h> 38 39 #include <block.h> … … 71 72 static errno_t vbds_bd_get_block_size(bd_srv_t *, size_t *); 72 73 static errno_t vbds_bd_get_num_blocks(bd_srv_t *, aoff64_t *); 74 static errno_t vbds_bd_eject(bd_srv_t *); 73 75 74 76 static errno_t vbds_bsa_translate(vbds_part_t *, aoff64_t, size_t, aoff64_t *); … … 93 95 .write_blocks = vbds_bd_write_blocks, 94 96 .get_block_size = vbds_bd_get_block_size, 95 .get_num_blocks = vbds_bd_get_num_blocks 97 .get_num_blocks = vbds_bd_get_num_blocks, 98 .eject = vbds_bd_eject 96 99 }; 97 100 … … 1070 1073 1071 1074 return EOK; 1075 } 1076 1077 static errno_t vbds_bd_eject(bd_srv_t *bd) 1078 { 1079 vbds_part_t *part = bd_srv_part(bd); 1080 async_sess_t *sess; 1081 bd_t *bdc; 1082 errno_t rc; 1083 1084 log_msg(LOG_DEFAULT, LVL_DEBUG, "vbds_bd_eject()"); 1085 1086 fibril_rwlock_read_lock(&part->lock); 1087 1088 sess = loc_service_connect(part->disk->svc_id, INTERFACE_BLOCK, 0); 1089 if (sess == NULL) { 1090 log_msg(LOG_DEFAULT, LVL_WARN, 1091 "vbds_bd_eject() - failed connect"); 1092 fibril_rwlock_read_unlock(&part->lock); 1093 return EIO; 1094 } 1095 1096 rc = bd_open(sess, &bdc); 1097 if (rc != EOK) { 1098 log_msg(LOG_DEFAULT, LVL_WARN, 1099 "vbds_bd_eject() - failed open"); 1100 async_hangup(sess); 1101 fibril_rwlock_read_unlock(&part->lock); 1102 return EIO; 1103 } 1104 1105 rc = bd_eject(bdc); 1106 1107 bd_close(bdc); 1108 async_hangup(sess); 1109 1110 fibril_rwlock_read_unlock(&part->lock); 1111 return rc; 1072 1112 } 1073 1113 -
uspace/srv/devman/dev.c
r7debda3 rd30e067 1 1 /* 2 * Copyright (c) 2025 Jiri Svoboda 2 3 * Copyright (c) 2010 Lenka Trochtova 3 4 * All rights reserved. … … 50 51 refcount_init(&dev->refcnt); 51 52 list_initialize(&dev->functions); 53 fibril_mutex_initialize(&dev->state_lock); 54 fibril_condvar_initialize(&dev->state_cv); 52 55 link_initialize(&dev->driver_devices); 53 56 … … 87 90 if (refcount_down(&dev->refcnt)) 88 91 delete_dev_node(dev); 92 } 93 94 /** Wait until the device node enters stable state. 95 * 96 * @param dev Device node 97 */ 98 void dev_wait_stable(dev_node_t *dev) 99 { 100 fibril_mutex_lock(&dev->state_lock); 101 while (dev->state == DEVICE_ATTACHING) 102 fibril_condvar_wait(&dev->state_cv, &dev->state_lock); 103 fibril_mutex_unlock(&dev->state_lock); 89 104 } 90 105 -
uspace/srv/devman/dev.h
r7debda3 rd30e067 1 1 /* 2 * Copyright (c) 2025 Jiri Svoboda 2 3 * Copyright (c) 2010 Lenka Trochtova 3 * Copyright (c) 2013 Jiri Svoboda4 4 * All rights reserved. 5 5 * … … 41 41 extern void dev_add_ref(dev_node_t *); 42 42 extern void dev_del_ref(dev_node_t *); 43 extern void dev_wait_stable(dev_node_t *); 43 44 44 45 extern dev_node_t *find_dev_node_no_lock(dev_tree_t *tree, -
uspace/srv/devman/devman.h
r7debda3 rd30e067 1 1 /* 2 * Copyright (c) 2025 Jiri Svoboda 2 3 * Copyright (c) 2010 Lenka Trochtova 3 * Copyright (c) 2011 Jiri Svoboda4 4 * All rights reserved. 5 5 * … … 105 105 typedef enum { 106 106 DEVICE_NOT_INITIALIZED = 0, 107 DEVICE_ATTACHING, 107 108 DEVICE_USABLE, 108 109 DEVICE_NOT_PRESENT, … … 129 130 /** The state of the device. */ 130 131 device_state_t state; 132 /** Protect device state field */ 133 fibril_mutex_t state_lock; 134 /** Signalled when device state changes */ 135 fibril_condvar_t state_cv; 131 136 /** Link to list of devices owned by driver (driver_t.devices) */ 132 137 link_t driver_devices; -
uspace/srv/devman/devtree.c
r7debda3 rd30e067 1 1 /* 2 * Copyright (c) 2025 Jiri Svoboda 2 3 * Copyright (c) 2010 Lenka Trochtova 3 4 * All rights reserved. … … 314 315 } 315 316 317 /** Wait for device tree to stabilize. 318 * 319 * Blocks until the entire device tree had a chance to finish attaching 320 * all devices. 321 * 322 * @param tree Device tree 323 */ 324 void dev_tree_wait_stable(dev_tree_t *tree) 325 { 326 dev_wait_stable(tree->root_node->child); 327 } 328 316 329 /** @} 317 330 */ -
uspace/srv/devman/devtree.h
r7debda3 rd30e067 1 1 /* 2 * Copyright (c) 2025 Jiri Svoboda 2 3 * Copyright (c) 2010 Lenka Trochtova 3 * Copyright (c) 2013 Jiri Svoboda4 4 * All rights reserved. 5 5 * … … 45 45 extern bool insert_fun_node(dev_tree_t *, fun_node_t *, char *, dev_node_t *); 46 46 extern void remove_fun_node(dev_tree_t *, fun_node_t *); 47 extern void dev_tree_wait_stable(dev_tree_t *); 47 48 48 49 #endif -
uspace/srv/devman/driver.c
r7debda3 rd30e067 1 1 /* 2 * Copyright (c) 20 18Jiri Svoboda2 * Copyright (c) 2025 Jiri Svoboda 3 3 * Copyright (c) 2010 Lenka Trochtova 4 4 * All rights reserved. … … 284 284 dev->drv = drv; 285 285 dev->passed_to_driver = false; 286 dev->state = DEVICE_NOT_INITIALIZED; 286 fibril_mutex_lock(&dev->state_lock); 287 dev->state = DEVICE_ATTACHING; 288 fibril_mutex_unlock(&dev->state_lock); 289 fibril_condvar_broadcast(&dev->state_cv); 287 290 list_append(&dev->driver_devices, &drv->devices); 288 291 … … 631 634 void add_device(driver_t *drv, dev_node_t *dev, dev_tree_t *tree) 632 635 { 636 link_t *link; 637 fun_node_t *fun; 638 633 639 /* 634 640 * We do not expect to have driver's mutex locked as we do not … … 664 670 async_wait_for(req, &rc); 665 671 } 672 673 if (rc == EOK) { 674 log_msg(LOG_DEFAULT, LVL_DEBUG, "Device was added. Wait for " 675 "child functions' devices to stabilize."); 676 fibril_rwlock_read_lock(&tree->rwlock); 677 link = list_first(&dev->functions); 678 while (link != NULL) { 679 fun = list_get_instance(link, fun_node_t, 680 dev_functions); 681 682 if (fun->child != NULL) { 683 log_msg(LOG_DEFAULT, LVL_DEBUG2, "Wait for " 684 "child device %p.", (void *)fun->child); 685 fun_add_ref(fun); 686 fibril_rwlock_read_unlock(&tree->rwlock); 687 dev_wait_stable(fun->child); 688 fibril_rwlock_read_lock(&tree->rwlock); 689 fun_del_ref(fun); 690 } 691 692 link = list_next(link, &dev->functions); 693 } 694 695 fibril_rwlock_read_unlock(&tree->rwlock); 696 log_msg(LOG_DEFAULT, LVL_DEBUG, 697 "Finished waiting for children."); 698 } 699 700 fibril_mutex_lock(&dev->state_lock); 666 701 667 702 switch (rc) { … … 677 712 } 678 713 714 fibril_mutex_unlock(&dev->state_lock); 715 fibril_condvar_broadcast(&dev->state_cv); 716 679 717 dev->passed_to_driver = true; 680 718 } -
uspace/srv/devman/drv_conn.c
r7debda3 rd30e067 1 1 /* 2 * Copyright (c) 202 3Jiri Svoboda2 * Copyright (c) 2025 Jiri Svoboda 3 3 * Copyright (c) 2010 Lenka Trochtova 4 4 * All rights reserved. … … 453 453 fun_busy_unlock(fun); 454 454 fun_del_ref(fun); 455 async_answer_0(icall, EOK); 456 } 457 458 /** Wait for function to become stable. 459 * 460 */ 461 static void devman_drv_fun_wait_stable(ipc_call_t *icall, driver_t *drv) 462 { 463 fun_node_t *fun; 464 dev_node_t *dev; 465 466 fibril_rwlock_read_lock(&device_tree.rwlock); 467 468 fun = find_fun_node(&device_tree, ipc_get_arg1(icall)); 469 if (fun == NULL) { 470 fibril_rwlock_read_unlock(&device_tree.rwlock); 471 async_answer_0(icall, ENOENT); 472 return; 473 } 474 475 if (fun->child == NULL) { 476 fibril_rwlock_read_unlock(&device_tree.rwlock); 477 fun_del_ref(fun); 478 async_answer_0(icall, EOK); 479 return; 480 } 481 482 dev = fun->child; 483 dev_add_ref(dev); 484 485 fibril_rwlock_read_unlock(&device_tree.rwlock); 486 487 dev_wait_stable(dev); 488 dev_del_ref(dev); 489 455 490 async_answer_0(icall, EOK); 456 491 } … … 642 677 devman_drv_fun_offline(&call, driver); 643 678 break; 679 case DEVMAN_DRV_FUN_WAIT_STABLE: 680 devman_drv_fun_wait_stable(&call, driver); 681 break; 644 682 case DEVMAN_REMOVE_FUNCTION: 645 683 devman_remove_function(&call); -
uspace/srv/devman/main.c
r7debda3 rd30e067 1 1 /* 2 * Copyright (c) 202 3Jiri Svoboda2 * Copyright (c) 2025 Jiri Svoboda 3 3 * Copyright (c) 2010 Lenka Trochtova 4 4 * All rights reserved. … … 369 369 370 370 printf("%s: Accepting connections.\n", NAME); 371 log_msg(LOG_DEFAULT, LVL_NOTE, "Wait for device tree to stabilize."); 372 dev_tree_wait_stable(&device_tree); 373 log_msg(LOG_DEFAULT, LVL_NOTE, "Device tree stable."); 371 374 task_retval(0); 372 375 async_manager(); -
uspace/srv/loader/main.c
r7debda3 rd30e067 300 300 301 301 #ifdef CONFIG_RTLD 302 if (prog_info.env) { 303 pcb.tcb = rtld_tls_make(prog_info.env); 304 } else { 305 pcb.tcb = tls_make(prog_info.finfo.base); 306 } 302 assert(prog_info.env != NULL); 303 pcb.tcb = rtld_tls_make(prog_info.env); 307 304 #else 308 305 pcb.tcb = tls_make(prog_info.finfo.base); -
uspace/srv/logger/logs.c
r7debda3 rd30e067 1 1 /* 2 * Copyright (c) 2025 Jiri Svoboda 2 3 * Copyright (c) 2012 Vojtech Horky 3 4 * All rights reserved. … … 55 56 if (result == NULL) 56 57 return ENOMEM; 57 if (asprintf(&result->filename, "/log/%s ", name) < 0) {58 if (asprintf(&result->filename, "/log/%s.txt", name) < 0) { 58 59 free(result); 59 60 return ENOMEM; -
uspace/srv/system/system.c
r7debda3 rd30e067 1 1 /* 2 * Copyright (c) 202 4Jiri Svoboda2 * Copyright (c) 2025 Jiri Svoboda 3 3 * Copyright (c) 2005 Martin Decky 4 4 * All rights reserved. … … 382 382 printf("%s: System volume is configured.\n", NAME); 383 383 384 /* Wait untilsystem volume is mounted */384 /* Verify that system volume is mounted */ 385 385 sv_mounted = false; 386 386 387 while (true) { 388 rc = vol_get_parts(vol, &part_ids, &nparts); 387 rc = vol_get_parts(vol, &part_ids, &nparts); 388 if (rc != EOK) { 389 printf("Error getting list of volumes.\n"); 390 goto error; 391 } 392 393 for (i = 0; i < nparts; i++) { 394 rc = vol_part_info(vol, part_ids[i], &pinfo); 389 395 if (rc != EOK) { 390 printf("Error getting list of volumes.\n"); 396 printf("Error getting partition " 397 "information.\n"); 398 rc = EIO; 391 399 goto error; 392 400 } 393 401 394 for (i = 0; i < nparts; i++) { 395 rc = vol_part_info(vol, part_ids[i], &pinfo); 396 if (rc != EOK) { 397 printf("Error getting partition " 398 "information.\n"); 399 rc = EIO; 400 goto error; 401 } 402 403 if (str_cmp(pinfo.cur_mp, "/w") == 0) { 404 sv_mounted = true; 405 break; 406 } 402 if (str_cmp(pinfo.cur_mp, "/w") == 0) { 403 sv_mounted = true; 404 break; 407 405 } 408 409 if (sv_mounted) 410 break; 411 412 free(part_ids); 413 part_ids = NULL; 414 415 fibril_sleep(1); 416 printf("Sleeping(1) for system volume.\n"); 417 } 406 } 407 408 if (sv_mounted == false) { 409 printf("System volume not found.\n"); 410 rc = EIO; 411 goto error; 412 } 413 414 free(part_ids); 415 part_ids = NULL; 416 418 417 } 419 418 … … 535 534 536 535 for (i = 0; i < nparts; i++) { 537 rc = vol_part_eject(vol, part_ids[i] );536 rc = vol_part_eject(vol, part_ids[i], vef_none); 538 537 if (rc != EOK) { 539 538 log_msg(LOG_DEFAULT, LVL_ERROR, "Error ejecting " -
uspace/srv/vfs/vfs_register.c
r7debda3 rd30e067 369 369 } 370 370 371 fstypes->fstypes = calloc( sizeof(char *), count);371 fstypes->fstypes = calloc(count, sizeof(char *)); 372 372 if (fstypes->fstypes == NULL) { 373 373 free(fstypes->buf); -
uspace/srv/volsrv/meson.build
r7debda3 rd30e067 1 1 # 2 # Copyright (c) 20 15 Jiri Svoboda2 # Copyright (c) 2025 Jiri Svoboda 3 3 # All rights reserved. 4 4 # … … 27 27 # 28 28 29 deps = [ 'block', ' label', 'sif' ]29 deps = [ 'block', 'device', 'label', 'sif' ] 30 30 31 31 src = files( -
uspace/srv/volsrv/part.c
r7debda3 rd30e067 1 1 /* 2 * Copyright (c) 202 4Jiri Svoboda2 * Copyright (c) 2025 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 36 36 37 37 #include <adt/list.h> 38 #include <bd.h> 38 39 #include <errno.h> 39 40 #include <fibril_synch.h> … … 642 643 } 643 644 644 errno_t vol_part_eject_part(vol_part_t *part) 645 static errno_t vol_part_eject_device(service_id_t svcid) 646 { 647 async_sess_t *sess; 648 errno_t rc; 649 bd_t *bd; 650 651 log_msg(LOG_DEFAULT, LVL_DEBUG, "vol_part_eject_device(%zu)", 652 (size_t)svcid); 653 654 sess = loc_service_connect(svcid, INTERFACE_BLOCK, 0); 655 if (sess == NULL) 656 return EIO; 657 658 rc = bd_open(sess, &bd); 659 if (rc != EOK) { 660 async_hangup(sess); 661 return EIO; 662 } 663 664 rc = bd_eject(bd); 665 if (rc != EOK) { 666 log_msg(LOG_DEFAULT, LVL_WARN, "vol_part_eject_device(): " 667 "eject fail"); 668 bd_close(bd); 669 async_hangup(sess); 670 return EIO; 671 } 672 673 bd_close(bd); 674 async_hangup(sess); 675 return EOK; 676 } 677 678 errno_t vol_part_eject_part(vol_part_t *part, vol_eject_flags_t flags) 645 679 { 646 680 int rc; … … 667 701 log_msg(LOG_DEFAULT, LVL_ERROR, "Failed deleting " 668 702 "mount directory %s.", part->cur_mp); 703 } 704 } 705 706 if ((flags & vef_physical) != 0) { 707 rc = vol_part_eject_device(part->svc_id); 708 if (rc != EOK) { 709 log_msg(LOG_DEFAULT, LVL_ERROR, "Failed physically " 710 "ejecting device %s.", part->svc_name); 669 711 } 670 712 } … … 819 861 820 862 if (part->cur_mp != NULL) { 821 rc = vol_part_eject_part(part );863 rc = vol_part_eject_part(part, vef_none); 822 864 if (rc != EOK) 823 865 return rc; -
uspace/srv/volsrv/part.h
r7debda3 rd30e067 1 1 /* 2 * Copyright (c) 20 15 Jiri Svoboda2 * Copyright (c) 2025 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 55 55 vol_part_t **); 56 56 extern void vol_part_del_ref(vol_part_t *); 57 extern errno_t vol_part_eject_part(vol_part_t * );57 extern errno_t vol_part_eject_part(vol_part_t *, vol_eject_flags_t); 58 58 extern errno_t vol_part_empty_part(vol_part_t *); 59 59 extern errno_t vol_part_insert_part(vol_part_t *); -
uspace/srv/volsrv/volsrv.c
r7debda3 rd30e067 1 1 /* 2 * Copyright (c) 202 4Jiri Svoboda2 * Copyright (c) 2025 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 205 205 { 206 206 service_id_t sid; 207 vol_eject_flags_t flags; 207 208 vol_part_t *part; 208 209 errno_t rc; 209 210 210 211 sid = ipc_get_arg1(icall); 211 log_msg(LOG_DEFAULT, LVL_DEBUG, "vol_part_eject_srv(%zu)", sid); 212 flags = ipc_get_arg2(icall); 213 214 log_msg(LOG_DEFAULT, LVL_DEBUG, "vol_part_eject_srv(%zu, %x)", 215 sid, flags); 212 216 213 217 rc = vol_part_find_by_id_ref(parts, sid, &part); … … 217 221 } 218 222 219 rc = vol_part_eject_part(part );223 rc = vol_part_eject_part(part, flags); 220 224 if (rc != EOK) { 221 225 async_answer_0(icall, EIO);
Note:
See TracChangeset
for help on using the changeset viewer.
