Changeset 4285f384 in mainline for uspace/srv
- Timestamp:
- 2025-02-25T20:25:43Z (8 months ago)
- Branches:
- master
- Children:
- d30e067, f35749e
- Parents:
- d231a54
- Location:
- uspace/srv
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/bd/vbd/disk.c
rd231a54 r4285f384 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/system/system.c
rd231a54 r4285f384 533 533 534 534 for (i = 0; i < nparts; i++) { 535 rc = vol_part_eject(vol, part_ids[i] );535 rc = vol_part_eject(vol, part_ids[i], vef_none); 536 536 if (rc != EOK) { 537 537 log_msg(LOG_DEFAULT, LVL_ERROR, "Error ejecting " -
uspace/srv/volsrv/meson.build
rd231a54 r4285f384 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
rd231a54 r4285f384 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
rd231a54 r4285f384 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
rd231a54 r4285f384 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.