COMPILATION LISTING OF SEGMENT mdx Compiled by: Multics PL/I Compiler, Release 32f, of October 9, 1989 Compiled at: Bull HN, Phoenix AZ, System-M Compiled on: 11/11/89 1017.2 mst Sat Options: optimize map 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Bull Inc., 1987 * 4* * * 5* * Copyright, (C) Honeywell Information Systems Inc., 1984 * 6* * * 7* * Copyright (c) 1972 by Massachusetts Institute of * 8* * Technology and Honeywell Information Systems, Inc. * 9* * * 10* *********************************************************** */ 11 12 13 /****^ HISTORY COMMENTS: 14* 1) change(86-06-05,GJohnson), approve(86-06-05,MCR7387), 15* audit(86-06-10,Martinson), install(86-07-17,MR12.0-1091): 16* Correct error message documentation. 17* 2) change(86-06-30,Fawcett), approve(86-06-30,MCR7383), 18* audit(86-06-30,LJAdams), install(86-07-17,MR12.0-1097): 19* Add support for subvolumes, 3380 and 3390. 20* END HISTORY COMMENTS */ 21 22 /* format: indattr,inddcls,dclind5,idind30,struclvlind5,ifthenstmt,ifthendo,^inditerdo,^indnoniterend,case,^tree,^indproc,^indend,^delnl,^insnl,comcol81,indcom,linecom,^indcomtxt */ 23 mdx: 24 proc; 25 26 /* Guts of volume management. 27* 28* This program is the brains behind disk_table_. 29* We run in ring 1 here and can mess with the disk table - but we don't print any messages. 30* 31* system_startup_ and sc_command_ call disk_table_ which can run in any ring and print. 32* disk_table_ calls us through initializer_mdc_. 33* 34* THVV 35* 4/2/76 by Greenberg for demount and auto lv/pv vanishing 36* 12/4/76 by Greenberg for new lv vanish including demounted bits 37* 03/8/77 by Greenberg for static ac/dc disks and random refcount bugs 38* July 1977 by T. Casey to add set_lv_pdir_bit entry 39* Jan 1978 by B. Greenberg for prev_bootload bit, making lvs "mounting" at startup. 40* July 1978 by B. Greenberg for hardcore RLV acceptance. 41* July 1981 by J. Bongiovanni to validate lv indices 42* March 1982 by J. Bongiovanni for new PVTE 43* '82 for english disk error codes 44* 831122 by E. A. Ranzenbach for set_vacate_pdirs_bit entry. 45* August 1984 by Chris Jones to tell IOI when we add or delete a drive. 46* 84-09-04 by EJ Sharpe to change hdx refs to volume_registration_mgr_ 47* also changed check_hv entry to check_lv 48* 85-01-31 by EJ Sharpe to force-init DT entries for: 1) root PVs not on the 49* ROOT config card (i.e. not in PVT at init time); and 2) root PVs 50* have moved to a different drive (these used to be done incorrectly 51* by "forgetter"). Also, clear all lve.pdirs_ok bits at initialization. 52* 1985-04-02, BIM: Indicate to caller of "take" when this call has completed 53* the rlv, so that the last add_vol of an root PV's crows 54* with success. 55* 05/07/85 by Chris Jones to let IOI decide when a drive can or cannot be reconfigured. 56* 08/28/85 by Rich Fawcett to support sub-volumes. 57**/ 58 59 dcl found bit (1); 60 dcl must_term bit (1) init ("0"b); 61 dcl (sdtp, stat_pvtp) ptr static init (null); 62 dcl ROOT char (168) static init (">"); 63 dcl SL1 char (168) static init (">system_library_1"); 64 dcl i fixed bin; 65 dcl dvn char (8); 66 dcl (tpvtx, a_tpvtx) fixed bin; 67 dcl lvx fixed bin; 68 dcl prev_state bit (1); 69 dcl oldlev fixed bin; 70 dcl num_pic pic "99"; 71 dcl pvt_n_entries fixed bin; 72 dcl xec fixed bin (35); 73 dcl reasonable_time fixed bin (71) int static init (2276881905645328); 74 75 dcl (addr, fixed, null, max, rel, rtrim, substr, unspec) builtin; 76 77 dcl admin_gate_$ioi_add_device entry (char (*), fixed bin (35)); 78 dcl admin_gate_$ioi_delete_device entry (char (*), fixed bin (35)); 79 dcl (cu_$level_set, cu_$level_get) entry (fixed bin); 80 dcl initializer_gate_$add_pv_to_lv entry (bit (36) aligned, bit (36) aligned, fixed bin (35)); 81 dcl initializer_gate_$read_disk entry (fixed bin, fixed bin, ptr, fixed bin (35)); 82 dcl initializer_gate_$define_lv entry (ptr, fixed bin (35)); 83 dcl initializer_gate_$delete_lv entry (bit (36) aligned, fixed bin (35)); 84 dcl initializer_gate_$set_disk_table_loc entry (ptr, fixed bin (35)); 85 dcl initializer_gate_$accept_fs_disk entry (fixed bin, fixed bin (35)); 86 dcl initializer_gate_$demount_pv entry (fixed bin, fixed bin (35)); 87 dcl initializer_gate_$vol_salv entry (fixed bin, bit (36) aligned, fixed bin (35)); 88 dcl initializer_gate_$ss_io_reconfigure entry (fixed bin, bit (1) aligned, fixed bin (35)); 89 dcl verify_label_ entry (ptr, ptr, fixed bin, fixed bin (35)); 90 dcl volume_registration_mgr_$init entry (ptr); 91 dcl volume_registration_mgr_$test entry (char (*)); 92 dcl volume_registration_mgr_$check_volume_registration entry (ptr, fixed bin (35)); 93 dcl volume_registration_mgr_$get_lv_pvinfo entry (char (*), ptr, fixed bin, fixed bin, fixed bin (35)); 94 dcl volume_registration_mgr_$find entry (ptr, fixed bin (35)); 95 dcl hcs_$initiate entry (char (*), char (*), char (*), fixed bin (1), fixed bin (2), ptr, fixed bin (35)); 96 dcl hcs_$terminate_noname entry (ptr, fixed bin (35)); 97 dcl hcs_$make_seg entry (char (*), char (*), char (*), fixed bin (5), ptr, fixed bin (35)); 98 dcl hcs_$truncate_seg entry (ptr, fixed bin, fixed bin (35)); 99 dcl hcs_$add_acl_entries entry (char (*), char (*), ptr, fixed bin, fixed bin (35)); 100 dcl rcp_control_$ss_io_interchange entry (char (*), bit (1) aligned, bit (1) aligned, fixed bin (35)); 101 dcl admin_gate_$syserr ext entry options (variable); 102 103 dcl 1 label_buffer like label; 104 105 dcl 1 adte like dte aligned based (aux_dtep); 106 dcl 1 alve like lve aligned based (aux_lvep); 107 dcl (aux_dtep, aux_lvep) ptr; 108 109 dcl 1 aa aligned int static, 110 2 name char (32) init ("*.*.*"), 111 2 mode bit (36) init ("111"b), 112 2 mbz bit (36) init ((36)"0"b), 113 2 code fixed bin (35); 114 115 dcl sys_info$access_class_ceiling bit (72) ext; 116 dcl error_table_$fsdisk_not_salv fixed bin (35) ext; 117 dcl error_table_$no_label fixed bin (35) ext; 118 dcl error_table_$invalid_state fixed bin (35) ext; 119 dcl error_table_$bad_label fixed bin (35) ext; 120 dcl error_table_$argerr fixed bin (35) ext; 121 dcl error_table_$action_not_performed fixed bin (35) ext; 122 dcl error_table_$io_still_assnd fixed bin (35) ext; 123 dcl error_table_$logical_volume_not_defined fixed bin (35) ext; 124 dcl error_table_$mount_not_ready fixed bin (35) ext; 125 dcl error_table_$private_volume fixed bin (35) ext; 126 127 /* -------------------------------------------------------- */ 128 129 /* This entry is the guts of disk_table_$init. Actually we could call ioa_ here but don't. */ 130 131 init: entry (a_dtp, new, ec); 132 133 dcl a_dtp ptr, new bit (1), ec fixed bin (35); 134 135 ec = 0; 136 new = "0"b; 137 call hcs_$make_seg (ROOT, "disk_table", "", 1010b, dtp, xec); 138 if dtp = null then do; /* Must have one */ 139 ec = xec; /* quelle horreur */ 140 return; 141 end; 142 call hcs_$add_acl_entries (ROOT, "disk_table", addr (aa), 1, xec); 143 144 call initializer_gate_$set_disk_table_loc (dtp, xec); /* Tell BOS where it is (fsout too) */ 145 146 call hcs_$initiate (SL1, "pvt", "", 0, 1, pvtp, xec); 147 if pvtp = null then do; 148 ec = xec; /* system is broken */ 149 return; 150 end; 151 stat_pvtp = pvtp; /* save value for use in copying pvt.salv bit */ 152 sdtp = dtp; /* Save static copy for other ep's */ 153 call volume_registration_mgr_$init (dtp); 154 a_dtp = dtp; 155 156 /* Does the PVT match the Disk Table? */ 157 158 pvt_n_entries = pvt.n_entries; 159 pvt_arrayp = addr (pvt.array); 160 161 if dt.version ^= 1 then ec = 3; 162 else if pvt_n_entries = dt.n_entries then do; /* Must be same size */ 163 164 do i = 1 to dt.n_lv_entries; /* Cause lv table to be garbage-collected */ 165 lvep = addr (dt.lv_array (i)); 166 lve.mounting = "0"b; /* As to not induce mhv's */ 167 lve.demounted_only = "0"b; /* develop this later */ 168 lve.demounting = "0"b; /* As to not induce dhv's */ 169 lve.used = "0"b; /* So that gc will work */ 170 lve.hv_mounted = "0"b; /* not until we know better */ 171 lve.pdirs_ok = "0"b; /* site should set these each bootload */ 172 end; 173 174 do i = 1 to pvt_n_entries; /* Find hardcore-accepted volumes, scratch old DT entries. */ 175 pvtep = addr (pvt_array (i)); 176 dtep = addr (dt.array (i)); 177 dte.rpv = "0"b; /* Will be set by make_root_pve if true */ 178 if pvte.used then call make_root_pve; 179 else dte.hc_accepted = "0"b; 180 end; 181 182 do i = 1 to pvt_n_entries; /* check all entries xcept PD */ 183 pvtep = addr (pvt_array (i)); 184 dtep = addr (dt.array (i)); 185 dte.need_salvage = "0"b; 186 if pvte.storage_system ^= dte.storage_system then do; 187 dte.known, dte.used, dte.demounted, dte.pre_accepted = "0"b; 188 dte.storage_system = pvte.storage_system; 189 end; 190 if dte.deleted | ^dte.storage_system 191 then dte.used, dte.known, dte.pre_accepted, dte.demounted = "0"b; 192 num_pic = pvte.logical_area_number; 193 dvn = pvte.devname || "_" || num_pic; 194 if pvte.is_sv then dvn = rtrim (dvn) || rtrim (pvte.sv_name); 195 lvx = dte.lvx; /* Can't be TOO bad. */ 196 lvep = addr (dt.lv_array (lvx)); 197 if dvn ^= dte.drive_name then ec = 4; 198 else if pvte.device_type ^= dte.device_type then ec = 5; 199 else if dte.deleted then dte.deleted = "0"b; /* Cancel previous "deld" */ 200 else if lvx <= 0 then goto skip_lv; /* invalid index -- don't diddle lve */ 201 else if dte.used then do; /* good thing last time? */ 202 if dte.hc_accepted 203 then call volume_registration_mgr_$check_volume_registration (dtep, xec); /* re-register root pack */ 204 else if dte.lvx = 1 then do; 205 /* root PV that is not on ROOT card */ 206 call admin_gate_$syserr (BEEP, "disk_table_: Deleted root PV ""^a"" on ^a.", dte.pvname, dte.drive_name); 207 call force_init_dte (i); 208 end; 209 else do; /* Other volumes are "pre-accepted" (ie assumed) */ 210 estab_lv: call make_assumed; 211 lve.demounted_only = "0"b; 212 if dte.lvx ^= 1 then lve.mounting = "1"b; 213 lve.prev_bootload = "1"b; 214 suggest_lv: lve.used = "1"b; 215 dt.n_lv_entries = max (dt.n_lv_entries, dte.lvx); 216 end; 217 end; 218 else if dte.known | dte.pre_accepted then go to estab_lv; 219 else if dte.demounted then do; 220 if ^lve.used then lve.demounted_only = "1"b; 221 go to suggest_lv; /* good vol will turn off, */ 222 /* bad vols wont turn on */ 223 end; 224 else ; /* Idle last time */ 225 skip_lv: 226 end; 227 if ec = 0 then return; /* If disk config didn't change we exit normally */ 228 end; 229 230 else if dt.n_entries = 0 then do; /* Did we create a new disk table */ 231 ec = 1; /* Yes */ 232 end; 233 234 else do; /* Some other mismatch */ 235 ec = 2; /* disk config changed. rebuild whole thing */ 236 end; 237 238 call hcs_$truncate_seg (dtp, 0, xec); /* Throw away all old stuff */ 239 dt.version = 1; /* .. and make new */ 240 new = "1"b; 241 dt.n_entries = pvt_n_entries; /* Discount the paging device */ 242 dt.max_n_entries = pvt.max_n_entries; 243 dt.n_lv_entries = 0; 244 do i = 1 to dt.n_entries; /* Make new table */ 245 pvtep = addr (pvt_array (i)); 246 dtep = addr (dt.array (i)); 247 call force_init_dte (i); 248 if pvte.used then do; 249 call make_root_pve; /* Kosher by definition */ 250 call volume_registration_mgr_$check_volume_registration (dtep, xec); 251 /* Make sure the rpv is registered */ 252 end; 253 end; 254 255 return; 256 257 /* --------------------------------------------------------- */ 258 259 take: entry (a_pvname, a_indx, took, ec); 260 261 dcl a_pvname char (*); 262 dcl a_indx fixed bin; 263 dcl took bit (1); 264 265 ec = 0; 266 dtp = sdtp; 267 i = a_indx; 268 dtep = addr (dt.array (i)); 269 took = "0"b; 270 if ^dte.storage_system | dte.deleted | dte.used then do; 271 fail: ec = error_table_$argerr; 272 return; 273 end; 274 275 call verify_drive_vanish_pve (dtep, a_pvname, ec); 276 if ec ^= 0 then return; /* Consistentize disk table */ 277 278 dte.pvname = a_pvname; 279 if ^dte.known then do; 280 call volume_registration_mgr_$find (dtep, ec); 281 if ec ^= 0 then do; 282 call make_demounted; 283 return; 284 end; 285 if ^get_it_known (i, ec) then do; 286 call make_demounted; 287 return; 288 end; 289 end; 290 lvep = addr (dt.lv_array (dte.lvx)); 291 if lve.hv_mounted then do; /* Adding vol to live lv (eg root) */ 292 call initializer_gate_$accept_fs_disk (i, ec); 293 if ec = error_table_$fsdisk_not_salv then do; /* salvage if needed */ 294 call initializer_gate_$vol_salv (i, ""b, ec); 295 call initializer_gate_$accept_fs_disk (i, ec); 296 end; 297 if ec = 0 then do; 298 call make_used; 299 call initializer_gate_$add_pv_to_lv (lve.lvid, dte.pvid, ec); 300 end; 301 call check_lv_complete (xec); /* Always try to announce success in completing the RLV */ 302 if xec = 0 then do; 303 call verify_whole_lv (1, xec); 304 took = (xec = 0); 305 end; 306 end; 307 else do; 308 i = dte.lvx; 309 call check_lv_complete (xec); 310 if xec = 0 & lve.mounting then do; /* If vol complete AND mhv was called */ 311 call verify_whole_lv (i, ec); 312 if ec = 0 then took = "1"b; 313 end; 314 end; 315 return; 316 317 /* ------------------------------------------------------ */ 318 319 assert: entry (a_pvname, a_indx, ec); 320 321 ec = 0; 322 dtp = sdtp; 323 i = a_indx; 324 dtep = addr (dt.array (i)); 325 if ^dte.storage_system | dte.deleted | dte.used then go to fail; 326 call verify_drive_vanish_pve (dtep, a_pvname, ec); 327 if ec ^= 0 then return; 328 329 dte.pvname = a_pvname; 330 call volume_registration_mgr_$find (dtep, ec); 331 if ec = 0 then call make_assumed; 332 else call make_blank; 333 return; 334 335 /* --------------------------------------------------------- */ 336 337 forget: entry (a_indx, ec); 338 339 ec = 0; 340 dtp = sdtp; 341 i = a_indx; 342 dtep = addr (dt.array (i)); 343 if ^dte.storage_system | dte.deleted | dte.used then go to fail; 344 call make_blank; 345 return; 346 347 /* -------------------------------------------------------- */ 348 349 volsalv: entry (a_pvname, a_indx, opt, ec); 350 351 dcl opt bit (36) aligned; 352 353 ec = 0; 354 dtp = sdtp; 355 i = a_indx; 356 dtep = addr (dt.array (i)); 357 if ^dte.storage_system | dte.deleted | dte.used then go to fail; 358 359 call verify_drive_vanish_pve (dtep, a_pvname, ec); 360 if ec ^= 0 then return; 361 362 dte.pvname = a_pvname; 363 call volume_registration_mgr_$find (dtep, ec); 364 if ec ^= 0 then return; 365 call verify_label_ (dtp, dtep, i, ec); 366 if ec ^= 0 then return; 367 call make_known; 368 369 call initializer_gate_$vol_salv (i, opt, ec); 370 return; 371 372 /* ---------------------------------------------------------- */ 373 374 rlvolcheck: entry (a_indx, a_pvtx, opt, ec); /* allow connection volsalv of copies of rlv members */ 375 /* a_pvtx is copy, a_indx is real one */ 376 377 dcl a_pvtx fixed bin, 378 rdtep ptr; 379 380 i = a_pvtx; 381 dtp = sdtp; 382 dtep = addr (dt.array (i)); /* dtep -> copy being salved */ 383 rdtep = addr (dt.array (a_indx)); /* rdtep is place where live one lives */ 384 385 if dte.deleted | ^dte.storage_system | dte.used then go to fail; 386 if ^(rdtep -> dte.used | rdtep -> dte.known) then go to fail; 387 388 389 call verify_label_ (dtp, rdtep, i, ec); /* LIE to verify_label_: info for live, read phony */ 390 if ec ^= 0 then return; 391 392 call make_blank; /* Bash away stuff, can't be right */ 393 394 395 call initializer_gate_$vol_salv (i, opt, ec); 396 397 return; 398 399 /* --------------------------------------------------------- */ 400 401 mhv: entry (a_indx, a_tpvtx, ec); 402 403 ec = 0; 404 tpvtx, a_tpvtx = 0; 405 dtp = sdtp; 406 lvep = addr (dt.lv_array (a_indx)); 407 408 if (lve.hv_mounted & ^(a_indx = 1)) /* ok doublemount rlv */ 409 | (lve.mounting & ^lve.prev_bootload) /* autograb last-time's */ 410 | lve.demounting | ^lve.used then go to fail; 411 412 if a_indx ^= 1 then lve.mounting = "1"b; 413 call check_lv_complete (ec); 414 if ec = 0 | ec = -1 then do; /* Complete or completeable? */ 415 call verify_whole_lv (a_indx, ec); 416 end; 417 a_tpvtx = tpvtx; 418 return; 419 420 /* --------------------------------------------------------- */ 421 422 reregister: entry (a_pvname, a_indx, ec); /* Called when opr asserts disk is ok */ 423 424 ec = 0; 425 dtp = sdtp; 426 dtep = addr (dt.array (a_indx)); 427 428 if ^dte.storage_system | dte.used | dte.deleted then go to fail; 429 430 call verify_drive_vanish_pve (dtep, a_pvname, ec); 431 if ec ^= 0 then return; 432 433 labelp = addr (label_buffer); 434 call initializer_gate_$read_disk (a_indx, LABEL_ADDR, labelp, ec); 435 if ec ^= 0 then return; 436 437 ec = error_table_$no_label; 438 if label.Multics ^= Multics_ID_String then return; 439 if label.version ^= 1 then return; 440 if label.time_registered < reasonable_time then return; 441 ec = error_table_$bad_label; 442 if label.pv_name ^= a_pvname then return; 443 dte.pvname = label.pv_name; 444 dte.pvid = label.pvid; 445 do i = 1 to dt.n_lv_entries while (^dt.lv_array (i).used | dt.lv_array (i).lvname ^= label.lv_name); end; 446 dte.lvx = i; 447 lvep = addr (dt.lv_array (dte.lvx)); 448 if dte.lvx > dt.n_lv_entries then do; 449 dt.n_lv_entries = dt.n_lv_entries + 1; 450 unspec (lve) = ""b; 451 lve.lvname = label.lv_name; 452 lve.lvid = label.lvid; 453 lve.max_access_class = label.max_access_class; 454 lve.min_access_class = label.min_access_class; 455 lve.public = ^label.private; 456 lve.used = "1"b; 457 end; 458 call volume_registration_mgr_$check_volume_registration (dtep, ec); 459 if ec ^= 0 then return; 460 call make_known; 461 return; 462 463 464 /* --------------------------------------------------------- */ 465 466 read_disk_table: entry (spacep, ec); 467 468 dcl spacep ptr; 469 dcl move_len fixed bin (18); 470 dcl move_table (move_len) fixed bin (35) aligned based; 471 472 if ^get_local_dtp () then return; 473 ec = 0; 474 move_len = fixed (rel (addr (dt.lv_array (dt.n_lv_entries + 1))), 18); 475 spacep -> move_table = dtp -> move_table; 476 go to term_exit; 477 478 479 /* --------------------------------------------------------- */ 480 481 check_pv: entry (a_pvname, ec); 482 483 if ^get_local_dtp () then return; 484 485 found = "0"b; 486 do i = 1 to dt.n_entries while (^found); 487 dtep = addr (dt.array (i)); 488 if a_pvname = dte.pvname & (dte.used | dte.known) then found = "1"b; 489 /* oughtta take out of tbl here */ 490 end; 491 go to found_exit; 492 493 /* ------------------------------------------------------- */ 494 495 496 check_lv: entry (a_hvname, ec); 497 498 dcl a_hvname char (*); 499 500 if ^get_local_dtp () then return; 501 502 found = "0"b; 503 do i = 1 to dt.n_lv_entries while (^found); 504 if dt.lv_array (i).lvname = a_hvname & dt.lv_array (i).used & dt.lv_array (i).hv_mounted then found = "1"b; 505 end; 506 found_exit: 507 if ^found then ec = error_table_$mount_not_ready; 508 else ec = 0; 509 term_exit: 510 if must_term then do; 511 call cu_$level_set (oldlev); 512 call hcs_$terminate_noname (dtp, (0)); 513 end; 514 return; 515 516 /* --------------------------------------------------------- */ 517 518 519 set_lv_pdir_bit: entry (a_hvname, a_bit, ec); 520 521 dcl a_bit bit (1) aligned; 522 523 ec = 0; /* until something goes wrong */ 524 if ^get_local_dtp () then return; 525 found = ""b; 526 do i = 1 to dt.n_lv_entries while (^found); 527 if dt.lv_array (i).lvname = a_hvname & dt.lv_array (i).used then do; 528 found = "1"b; 529 if dt.lv_array (i).public then 530 dt.lv_array (i).pdirs_ok = a_bit; 531 else ec = error_table_$private_volume; 532 end; 533 end; 534 if ^found then 535 ec = error_table_$mount_not_ready; 536 return; 537 538 539 /* --------------------------------------------------------- */ 540 541 542 set_vacate_pdirs_bit: entry (a_hvname, a_bit, ec); 543 544 ec = 0; /* until something goes wrong */ 545 if ^get_local_dtp () then return; 546 found = ""b; 547 do i = 1 to dt.n_lv_entries while (^found); 548 if dt.lv_array (i).lvname = a_hvname & dt.lv_array (i).used then do; 549 found = "1"b; 550 if dt.lv_array (i).public then do; 551 dt.lv_array (i).vacate_pdirs = a_bit; 552 if dt.lv_array (i).pdirs_ok & a_bit then dt.lv_array (i).pdirs_ok = "0"b; 553 end; 554 else ec = error_table_$private_volume; 555 end; 556 end; 557 if ^found then 558 ec = error_table_$mount_not_ready; 559 return; 560 561 562 /* --------------------------------------------------------- */ 563 564 add_del: entry (a_device_name, a_adding_drive, true_if_found, ec); 565 566 dcl a_device_name char (*), 567 a_adding_drive bit (1) aligned, 568 true_if_found bit (1) aligned; 569 dcl adding_drive bit (1); /* "0"b if deleting device "1"b if adding device */ 570 571 adding_drive = a_adding_drive; 572 dtp = sdtp; 573 ec = 0; 574 true_if_found = "0"b; 575 do i = 1 to dt.n_entries; 576 dtep = addr (dt.array (i)); 577 if dte.drive_name = a_device_name then do; 578 true_if_found = dte.storage_system; 579 if dte.used | dte.known then ec = error_table_$io_still_assnd; 580 else if dte.deleted ^= adding_drive then ec = error_table_$action_not_performed; 581 else do; 582 if adding_drive then 583 call admin_gate_$ioi_add_device ((dte.drive_name), ec); 584 else call admin_gate_$ioi_delete_device ((dte.drive_name), ec); 585 if ec = 0 then do; 586 dte.deleted = ^adding_drive; 587 if dte.storage_system then do; 588 call make_blank; 589 call admin_gate_$syserr 590 (ANNOUNCE, "disk_table_: ^[Added^;Deleted^] drive ^a.", (adding_drive), (a_device_name)); 591 end; 592 end; 593 end; 594 end; 595 end; 596 return; 597 598 /* -------------------------------------------------------- */ 599 600 ss_io_reconfig: entry (a_pvtx, a_from_ss, ec); 601 602 dcl a_from_ss bit (1); 603 dcl from_ss bit (1) aligned; 604 605 from_ss = a_from_ss; 606 i = a_pvtx; 607 dtp = sdtp; 608 dtep = addr (dt.array (i)); 609 xec = 0; 610 if from_ss ^= dte.storage_system then do; 611 ec = error_table_$invalid_state; 612 return; 613 end; 614 if from_ss then if dte.known | dte.used then do; 615 ec = error_table_$io_still_assnd; 616 return; 617 end; 618 call make_blank; 619 call cu_$level_get (oldlev); 620 call cu_$level_set (1); 621 if dte.is_sub_vol then do; 622 /* if this is a drive that contains subvolumes only tell rcp about the last one */ 623 if dte.sv_num = (dte.num_of_sv - 1) then 624 /* This should be the last one */ 625 call rcp_control_$ss_io_interchange ((substr (dte.drive_name, 1, 7)), from_ss, (dte.deleted), xec); 626 end; 627 else call rcp_control_$ss_io_interchange ((dte.drive_name), from_ss, (dte.deleted), xec); 628 call cu_$level_set (oldlev); 629 if xec = 0 then call initializer_gate_$ss_io_reconfigure (i, from_ss, xec); 630 if xec = 0 then dte.storage_system = ^from_ss; 631 ec = xec; 632 return; 633 634 /* --------------------------------------------------------- */ 635 636 demount_pv: entry (a_pvtx, ec); 637 638 dtp = sdtp; 639 dtep = addr (dt.array (a_pvtx)); 640 641 if ^dte.storage_system | ^dte.used then do; 642 ec = error_table_$action_not_performed; 643 return; 644 end; 645 646 lvx = dte.lvx; 647 if lvx < 0 | lvx > dt.n_lv_entries then do; 648 ec = error_table_$action_not_performed; 649 return; 650 end; 651 lvep = addr (dt.lv_array (lvx)); 652 653 if ^lve.demounting then do; 654 ec = error_table_$io_still_assnd; 655 return; 656 end; 657 658 call initializer_gate_$demount_pv (a_pvtx, ec); 659 660 if ec = 0 then call make_demounted; 661 662 return; 663 664 /* --------------------------------------------------------- */ 665 666 demount_lv: entry (a_lvx, a_dhv_act, ec); 667 668 dcl a_lvx fixed bin, a_dhv_act fixed bin; 669 670 dtp = sdtp; 671 lvx = a_lvx; 672 lvep = addr (dt.lv_array (lvx)); 673 if ^lve.used then do; 674 lve.hv_mounted, lve.demounting, lve.mounting = "0"b; /* for robustness */ 675 ec = error_table_$action_not_performed; 676 return; 677 end; 678 679 if lvx = dt.array (dt.rpvx).lvx 680 | (lve.pdirs_ok & lve.hv_mounted) then do; 681 ec = error_table_$action_not_performed; 682 return; 683 end; 684 685 ec = 0; /* Unless otherwise */ 686 687 if a_dhv_act = 1 then do; /* Stop a mhv */ 688 if ^lve.mounting then go to fail; /* argerr */ 689 lve.mounting = "0"b; 690 do i = 1 to dt.n_entries while (^(dt.array (i).used & dt.array (i).lvx = lvx)); end; 691 if i <= dt.n_entries then lve.demounting = "1"b; 692 end; 693 else if a_dhv_act = 2 then do; /* Demount start, take out of r0 */ 694 if lve.mounting then go to fail; 695 if ^lve.hv_mounted then go to fail; 696 call initializer_gate_$delete_lv (lve.lvid, ec); 697 if ec = error_table_$logical_volume_not_defined then ec = 0;/* Ignore not-there */ 698 lve.demounting = "1"b; 699 lve.hv_mounted = "0"b; 700 end; 701 else if a_dhv_act = 3 then do; /* Turn off demounting */ 702 if ^lve.demounting then go to fail; 703 lve.demounting = "0"b; 704 end; 705 706 if ec ^= 0 then return; 707 708 do i = 1 to dt.n_entries; /* Make Ops happy, erase the thing. */ 709 dtep = addr (dt.array (i)); 710 if dte.pre_accepted & (dte.lvx = lvx) then call make_demounted; 711 end; 712 if ^lve.used then return; 713 714 lve.mounting = "0"b; /* General principles, minimize screwups */ 715 call develop_lve_status_anon; /* Check for weird case */ 716 717 return; 718 719 /* SUBROUTINES AND OTHER UTILE CONSTRUCTIONS */ 720 721 722 get_it_known: proc (b_dtx, b_ec) returns (bit (1)); 723 724 /* Call verify_label, leave drive hungry or known */ 725 726 dcl b_dtx fixed bin; /* passed for convenience */ 727 dcl b_ec fixed bin (35); 728 729 call verify_label_ (dtp, dtep, b_dtx, b_ec); 730 if b_ec = 0 then do; 731 call make_known; 732 return ("1"b); 733 end; 734 return ("0"b); 735 736 end get_it_known; 737 738 739 verify_drive_vanish_pve: proc (b_dtep, b_pvname, ec); 740 dcl ec fixed bin (35); 741 dcl b_dtep ptr; 742 dcl b_pvname char (*); 743 dcl bpk fixed bin; 744 dcl save_dtep ptr; 745 dcl k fixed bin; 746 747 do k = 1 to dt.n_entries; 748 aux_dtep = addr (dt.array (k)); 749 if aux_dtep = b_dtep then bpk = k; 750 else do; 751 if (adte.used | adte.known) & adte.pvname = b_pvname 752 then do; 753 ec = error_table_$io_still_assnd; 754 return; 755 end; 756 if (adte.pre_accepted | adte.demounted) & adte.pvname = b_pvname then call forgetter (k); 757 end; 758 end; 759 aux_dtep = b_dtep; 760 if adte.used | adte.known then if adte.pvname = b_pvname then ec = 0; 761 else ec = error_table_$io_still_assnd; 762 else if adte.pre_accepted | adte.demounted then call forgetter (bpk); 763 if ec = 0 then do; 764 save_dtep = dtep; 765 dtep = b_dtep; /* This is what lambda was invented for */ 766 call make_blank; 767 dtep = save_dtep; 768 end; 769 end; 770 771 772 forgetter: entry (a_indx); /* recursive only */ 773 dtp = sdtp; 774 dtep = addr (dt.array (a_indx)); 775 call make_blank; 776 return; 777 778 779 make_root_pve: 780 proc; 781 782 dcl mrpve_pvtx fixed bin; 783 784 /* This procedure is called to construct DT PV entries for volumes 785* accepted by the hardcore during initialization. PVT and DT pointers 786* are valid. */ 787 788 dte.storage_system = "1"b; /* Get good params going */ 789 dte.deleted = "0"b; 790 dte.rpv = pvte.rpv; /* Get rpv bit */ 791 dte.pvid = pvte.pvid; 792 if dte.rpv then dt.rpvx = i; 793 dte.lvx = 1; 794 dte.permanent = "1"b; 795 call make_root_lve; 796 call verify_label_ (dtp, dtep, i, ec); 797 798 /* Special kludge in verify_label_ will cause name fillin into DT instead of check. lvname = root triggers this. */ 799 800 dte.hc_accepted = "1"b; /* Cause comparator to ignore. */ 801 call make_used; 802 803 do mrpve_pvtx = 1 to dt.n_entries; 804 805 /* Since this is the first pass of mdx init, flush all other claims to this volume, regardless of 806* how strong they are. */ 807 808 aux_dtep = addr (dt.array (mrpve_pvtx)); 809 if aux_dtep ^= dtep then do; /* Don't consider self */ 810 if adte.pvname = dte.pvname | adte.pvid = dte.pvid 811 then do; 812 call admin_gate_$syserr (ANNOUNCE, "disk_table_: Root PV ""^a"" moved from ^a to ^a.", 813 dte.pvname, adte.drive_name, dte.drive_name); 814 call force_init_dte (mrpve_pvtx); 815 end; 816 end; 817 end; 818 end; 819 820 821 make_root_lve: proc; 822 823 lvep = addr (dt.lv_array (1)); 824 if lve.lvname ^= "root" | ^lve.used then do; 825 dt.n_lv_entries = 1; 826 unspec (lve) = ""b; 827 lve.public = "1"b; 828 lve.lvid = pvte.lvid; 829 lve.lvname = "root"; 830 lve.min_access_class = ""b; 831 lve.max_access_class = sys_info$access_class_ceiling; 832 end; 833 lve.used = "1"b; /* gc turned off */ 834 lve.hv_mounted = "1"b; 835 836 end make_root_lve; 837 838 839 force_init_dte: /* procedure used during disk_table initialzation to clear a particular entry */ 840 proc (dte_index); 841 842 dcl dte_index fixed bin parameter; 843 dcl l_dtep ptr; 844 dcl 1 l_dte aligned like dte based (l_dtep); 845 dcl l_pvtep ptr; 846 dcl 1 l_pvte aligned like pvte based (l_pvtep); 847 848 l_dtep = addr (dt.array (dte_index)); 849 l_pvtep = addr (pvt_array (dte_index)); 850 unspec (l_dte) = ""b; 851 num_pic = l_pvte.logical_area_number; 852 l_dte.is_sub_vol = l_pvte.is_sv; 853 l_dte.sv_num = l_pvte.sv_num; 854 l_dte.drive_name = l_pvte.devname || "_" || num_pic; 855 if l_dte.is_sub_vol then l_dte.drive_name = rtrim (l_dte.drive_name) || rtrim (l_pvte.sv_name); 856 l_dte.device_type = l_pvte.device_type; 857 l_dte.storage_system = l_pvte.storage_system; 858 l_dte.permanent = l_pvte.permanent; 859 l_dte.num_of_sv = l_pvte.num_of_svs; 860 l_dte.sv_name = l_pvte.sv_name; 861 return; 862 863 end force_init_dte; 864 865 866 verify_whole_lv: proc (desired_lvx, ec); 867 868 /* This procedure is called when it is desired to mount an entire hierarchy volume, 869* and all constituent pv's are either pre_accepted, known, or 870* in use (from a previous failing attempt). It tries to accept them all, promoting 871* all drives up through the states. As is the convention in mdx, any time 872* a label is read which contradicts a pre_accepted, the latter is turned off. No volumes 873* are promoted to used (ring 0 called) unless all labels check. */ 874 875 876 dcl desired_lvx fixed bin, ec fixed bin (35); 877 878 dcl i fixed bin; 879 dcl 1 local_lvte aligned like lvte; 880 881 lvep = addr (dt.lv_array (desired_lvx)); 882 do i = 1 to dt.n_entries; 883 dtep = addr (dt.array (i)); 884 if dte.lvx = desired_lvx & dte.pre_accepted then do; 885 if ^get_it_known (i, ec) then do; 886 tpvtx = i; 887 call make_assumed; 888 return; 889 end; 890 end; 891 end; 892 do i = 1 to dt.n_entries; 893 dtep = addr (dt.array (i)); 894 if dte.lvx = desired_lvx & dte.known then do; 895 call initializer_gate_$accept_fs_disk (i, ec); 896 if ec = error_table_$fsdisk_not_salv then do; /* salvage if needed */ 897 call initializer_gate_$vol_salv (i, ""b, ec); 898 call initializer_gate_$accept_fs_disk (i, ec); 899 end; 900 901 if ec ^= 0 then do; 902 tpvtx = i; 903 return; 904 end; 905 call make_used; 906 if lve.hv_mounted then call initializer_gate_$add_pv_to_lv (lve.lvid, dte.pvid, ec); 907 end; 908 end; 909 if ^lve.hv_mounted then do; /* Want to mount new vol? */ 910 unspec (local_lvte) = "0"b; 911 local_lvte.lvid = lve.lvid; 912 local_lvte.access_class.min = lve.min_access_class; 913 local_lvte.access_class.max = lve.max_access_class; 914 local_lvte.public = lve.public; 915 call initializer_gate_$define_lv (addr (local_lvte), ec); 916 if ec = 0 then do; 917 lve.hv_mounted = "1"b; 918 lve.mounting = "0"b; 919 end; 920 end; 921 922 end verify_whole_lv; 923 924 925 check_lv_complete: proc (ec); 926 927 /* This procedure checks the registration for a given LV, and determines if they are all in the 928* disk table. */ 929 930 dcl ec fixed bin (35); 931 932 dcl pvap ptr; 933 dcl npv fixed bin; 934 dcl (i, j) fixed bin; 935 dcl (found, ready) bit (1); 936 dcl 1 pva (100) based (pvap) aligned, 937 2 pvname char (32), 938 2 device_type fixed bin, 939 2 pad fixed bin; 940 941 pvap = addr (dt.lv_array (dt.max_n_entries + 1)); 942 call volume_registration_mgr_$get_lv_pvinfo ((lve.lvname), pvap, npv, (0), ec); 943 if ec ^= 0 then return; 944 945 ec = 0; 946 ready = "1"b; 947 do i = 1 to npv while (ec = 0); /* Look for any unmounted vol */ 948 found = "0"b; 949 do j = 1 to dt.n_entries while (^found); 950 dtep = addr (dt.array (j)); 951 if dte.pvname = pva (i).pvname 952 then if dte.used | dte.known then found = "1"b; 953 else if dte.pre_accepted then do; 954 found = "1"b; 955 ready = "0"b; 956 end; 957 end; 958 if ^found then ec = 1; 959 end; 960 if ec = 0 & ^ready then ec = -1; 961 962 end check_lv_complete; 963 964 965 /* SUBROUTINES TO PERFORM STATE TRANSIT */ 966 967 /* All assume dtep is set */ 968 969 make_blank: proc; 970 971 call hold_status; 972 dte.pre_accepted, dte.used, dte.known, dte.demounted = "0"b; 973 call develop_lve_status; 974 end; 975 976 make_assumed: proc; 977 978 dte.used, dte.known, dte.demounted, dte.used = "0"b; 979 dte.pre_accepted = "1"b; 980 if dte.lvx > 0 & dte.lvx <= dt.n_lv_entries then 981 dt.lv_array (dte.lvx).demounted_only = "0"b; 982 end; 983 984 make_demounted: proc; 985 986 prev_state = "1"b; /* lvx must be good */ 987 dte.pre_accepted, dte.used, dte.known = "0"b; 988 dte.demounted = "1"b; 989 call develop_lve_status; 990 end; 991 992 make_known: proc; 993 994 dte.pre_accepted, dte.used, dte.demounted = "0"b; 995 dte.known = "1"b; 996 if dte.lvx > 0 & dte.lvx <= dt.n_lv_entries then 997 dt.lv_array (dte.lvx).demounted_only = "0"b; 998 end; 999 1000 make_used: proc; 1001 1002 dte.pre_accepted, dte.demounted, dte.known = "0"b; 1003 if ^dte.used then call admin_gate_$syserr 1004 (LOG, "disk_table_: accepted PV ^a on ^a.", dte.pvname, dte.drive_name); 1005 dte.used = "1"b; 1006 if dte.lvx > 0 & dte.lvx <= dt.n_lv_entries then 1007 dt.lv_array (dte.lvx).demounted_only = "0"b; 1008 end; 1009 1010 hold_status: proc; 1011 prev_state = dte.used | dte.pre_accepted | dte.known | dte.demounted; 1012 end; 1013 1014 develop_lve_status: proc; 1015 1016 dcl ii fixed bin; 1017 dcl l_lvx fixed bin; 1018 dcl hold bit (1) init ("0"b); 1019 1020 if ^prev_state then do; 1021 dte.lvx = -2; /* sure asdmp */ 1022 return; /* dont check garbage */ 1023 end; 1024 l_lvx = dte.lvx; 1025 go to join; 1026 1027 develop_lve_status_anon: entry; 1028 l_lvx = lvx; /* global */ 1029 join: if l_lvx < 0 | l_lvx > dt.n_lv_entries then return; 1030 aux_lvep = addr (dt.lv_array (l_lvx)); 1031 do ii = 1 to dt.n_entries; 1032 aux_dtep = addr (dt.array (ii)); 1033 if adte.lvx = l_lvx then do; 1034 if adte.demounted then hold = "1"b; 1035 else if adte.used | adte.known | adte.pre_accepted then do; 1036 alve.demounted_only = "0"b; 1037 return; 1038 end; 1039 end; 1040 end; 1041 1042 if hold then do; /* He thinks its vanished */ 1043 alve.demounted_only = "1"b; 1044 alve.prev_bootload = "0"b; /* No more special privileges */ 1045 end; 1046 if alve.mounting then return; 1047 if ^hold then do; 1048 alve.used = "0"b; 1049 alve.lvid = "0"b; 1050 end; 1051 1052 end develop_lve_status; 1053 1054 1055 get_local_dtp: proc returns (bit (1)); 1056 1057 dtp = sdtp; 1058 must_term = "0"b; 1059 if dtp = null () then do; /* we're not Inz */ 1060 call cu_$level_get (oldlev); 1061 call cu_$level_set (1); 1062 call hcs_$initiate (ROOT, "disk_table", "", 0, 1, dtp, ec); 1063 if dtp = null () then do; 1064 call cu_$level_set (oldlev); 1065 return ("0"b); 1066 end; 1067 must_term = "1"b; 1068 end; 1069 return ("1"b); 1070 1071 end; 1072 test: entry (aroot); 1073 1074 dcl aroot char (*); 1075 1076 SL1, ROOT = aroot; 1077 call volume_registration_mgr_$test (aroot); 1078 return; 1079 /* format: off */ 1080 /* BEGIN INCLUDE FILE ... disk_table.incl.pl1 ... Created Oct 75 for NSS */ 1 2 1 3 1 4 /****^ HISTORY COMMENTS: 1 5* 1) change(86-01-14,Fawcett), approve(86-05-13,MCR7383), 1 6* audit(86-05-14,LJAdams), install(86-07-18,MR12.0-1098): 1 7* Add support for subvolumes. 1 8* END HISTORY COMMENTS */ 1 9 1 10 1 11 /* Modified July 1977 by T. Casey to add pdirs_ok switch in lve */ 1 12 /* Modified April 1981 by J. Bongiovanni to add shared_spindle_flip */ 1 13 /* Modified 831122 by E. A. Ranzenbach to add vacate_pdirs bit to lve. */ 1 14 1 15 /* The disk table lives in ring 1. Its entries parallel the PVT */ 1 16 1 17 dcl dtp ptr, 1 18 dtep ptr, 1 19 lvep ptr; 1 20 1 21 1 22 1 23 dcl 1 dt based (dtp) aligned, 1 24 1 25 2 n_entries fixed bin (17), /* number of disk table entries */ 1 26 2 max_n_entries fixed bin (17), /* max number of disk table entries */ 1 27 2 n_in_use fixed bin (17), /* number of disk table entries in use */ 1 28 2 rpvx fixed bin, /* index (pvtx, too) of the RPV */ 1 29 2 version fixed bin init (1), 1 30 2 n_lv_entries fixed bin, /* Number of LV entries */ 1 31 2 pad (2) bit (36), 1 32 2 array (0 refer (dt.max_n_entries)) like dte, 1 33 2 lv_array (0 refer (dt.max_n_entries)) like lve; 1 34 1 35 dcl 1 dte based (dtep) aligned, 1 36 2 drive_name char (8), /* device name */ 1 37 (2 device_type fixed bin (8), /* device type */ 1 38 2 used bit (1), /* TRUE if this entry is used for paging */ 1 39 2 known bit (1), /* TRUE if label has been read and checked */ 1 40 2 storage_system bit (1), /* TRUE for storage system (vs io disk) */ 1 41 2 permanent bit (1), /* TRUE if cannot be demounted */ 1 42 2 deleted bit (1), /* TRUE if deleted by "deld" */ 1 43 2 rpv bit (1), /* TRUE if the root physical volume */ 1 44 2 demounted bit (1), /* TRUE if was here or was assumed here */ 1 45 2 need_salvage bit (1), /* TRUE if this vol was volsalv'd automatic */ 1 46 2 hc_accepted bit (1), /* TRUE if vol accepted by ring 0 init */ 1 47 2 shared_spindle_flip bit (1), /* used by ring-4 for shared spindle allocation */ 1 48 2 is_sub_vol bit (1), 1 49 2 pad bit (3), 1 50 2 lvx fixed bin (11), /* index in lv_array of lve */ 1 51 2 pre_accepted bit (1)) unaligned, /* TRUE if was used in previous bootload */ 1 52 2 sv_num fixed bin unal, /* this sv number */ 1 53 2 num_of_sv fixed bin unal, /* number of sv for this pv */ 1 54 2 sv_name char (2) aligned, 1 55 2 pvid bit (36), /* physical volume ID */ 1 56 2 pvname char (32); /* Physical volume name. */ 1 57 1 58 dcl 1 lve based (lvep) aligned, 1 59 2 lvid bit (36), /* logical volume ID */ 1 60 (2 used bit (1), /* TRUE if entry used */ 1 61 2 hv_mounted bit (1), /* TRUE if hvol is really OK */ 1 62 2 public bit (1), /* TRUE for public vol */ 1 63 2 mounting bit (1), /* TRUE if mhv is in progress */ 1 64 2 demounting bit (1), /* TRUE if dhv is in progress */ 1 65 2 good_candidate bit (1) unal, /* used for auto dhv */ 1 66 2 demounted_only bit (1) unal, /* lve here only to warm demounted pve's */ 1 67 2 pdirs_ok bit (1) unal, /* TRUE if process directory segments can be on this lv */ 1 68 2 prev_bootload bit (1) unal, /* TRUE if can auto-accept pvs */ 1 69 2 vacate_pdirs bit (1) unal, /* if TRUE we will demand move all perprocess segs */ 1 70 2 pad bit (26)) unal, 1 71 2 lvname char (32), /* Logical volume name */ 1 72 2 min_access_class bit (72), /* Security stuff */ 1 73 2 max_access_class bit (72); /* .. */ 1 74 1 75 /* END INCLUDE FILE ...disk_table.incl.pl1 */ 1080 1081 /* BEGIN INCLUDE FILE lvt.incl.pl1 -- Written Jan. 1976 by R. Bratt */ 2 2 /* 2 3* This include file defines the format of the hardcore L_ogical V_olume T_able (LVT). 2 4**/ 2 5 2 6 dcl lvt$ ext; 2 7 dcl lvtp ptr; 2 8 dcl lvtep ptr; 2 9 2 10 dcl 1 lvt aligned based (lvtp), 2 11 2 max_lvtex fixed bin (17), /* maximum number of LVs describable */ 2 12 2 high_water_lvtex fixed bin (17), /* highest LVT index assigned */ 2 13 2 free_lvtep ptr, /* pointer to first free lvte */ 2 14 2 pad1 (4) bit (36), 2 15 2 ht (0:63) ptr unal, /* lvid hash table */ 2 16 2 lvtes (1:1 refer (lvt.max_lvtex)) like lvte; /* LVT entries */ 2 17 2 18 dcl 1 lvte aligned based (lvtep), /* logical volume table entry */ 2 19 2 lvtep ptr unaligned, /* lvid hash thread */ 2 20 2 pvtex fixed bin (17), /* thread of mounted PVs */ 2 21 2 lvid bit (36), /* logical volume id */ 2 22 2 access_class aligned, /* access isolation mechanism stuff */ 2 23 3 min bit (72), /* minimum access class allowed on LV */ 2 24 3 max bit (72), /* maximum access class allowed on volume */ 2 25 2 flags unaligned, /* flags */ 2 26 3 public bit (1), /* => anyone can connect to this LV */ 2 27 3 read_only bit (1), /* => no writes on this LV */ 2 28 3 pad bit (16), 2 29 3 cycle_pvtx fixed bin (17); /* pvtx for next per_process seg */ 2 30 2 31 /* END INCLUDE FILE lvt.incl.pl1 */ 1081 1082 /* BEGIN INCLUDE FILE ... pvt.incl.pl1 ... last modified January 1982 */ 3 2 3 3 3 4 /* The physical volume table (PVT) is a wired-down table. 3 5* It has one entry for each spindle present, be it for 3 6* Storage System or "I/O" use. 3 7**/ 3 8 3 9 dcl pvt$ ext, 3 10 pvtp ptr; 3 11 3 12 3 13 dcl 1 pvt based (pvtp) aligned, 3 14 3 15 2 n_entries fixed bin (17), /* number of PVT entries */ 3 16 2 max_n_entries fixed bin (17), /* max number of PVT entries */ 3 17 2 n_in_use fixed bin (17), /* number of PVT entries in use */ 3 18 2 rwun_pvtx fixed bin, /* rewind_unloading pvtx */ 3 19 2 shutdown_state fixed bin, /* state of previous shutdown */ 3 20 2 esd_state fixed bin, /* state of ESD, >0 iff in ESD */ 3 21 2 prev_shutdown_state fixed bin, /* shutdown state of previous bootload */ 3 22 2 prev_esd_state fixed bin, /* ESD state of previous bootload */ 3 23 3 24 2 time_of_bootload fixed bin (71), /* Time of bootload */ 3 25 2 root_lvid bit (36) aligned, /* Logical volume ID of Root Logical Volume (RLV) */ 3 26 2 root_pvid bit (36) aligned, /* Physical volume ID of Root Physical Volume (RPV) */ 3 27 2 root_pvtx fixed bin, /* Index to PVTE for Root Physical Volume (RPV) */ 3 28 2 root_vtocx fixed bin, /* VTOCE index for root (>) */ 3 29 2 disk_table_vtocx fixed bin, /* VTOCE index for disk table on RPV */ 3 30 2 disk_table_uid bit (36) aligned, /* File System UID for disk_table */ 3 31 3 32 2 rpvs_requested bit (1) aligned, /* RPVS keyword given on BOOT */ 3 33 2 rpv_needs_salv bit (1) aligned, /* RPV required (not requested) salvage */ 3 34 2 rlv_needs_salv bit (1) aligned, /* RLV required (not requested) salvage */ 3 35 2 volmap_lock_wait_constant bit (36) aligned,/* For constructing wait event: OR pvte_rel into lower */ 3 36 2 volmap_idle_wait_constant bit (36) aligned,/* For constructing wait event: OR pvte_rel into lower */ 3 37 2 vtoc_map_lock_wait_constant bit (36) aligned, /* For constructing wait event: OR pvte_rel into lower */ 3 38 2 n_volmap_locks_held fixed bin (17), /* Current number of volmap locks held */ 3 39 2 n_vtoc_map_locks_held fixed bin (17), /* Current number of VTOC Map locks held */ 3 40 3 41 2 last_volmap_time fixed bin (71), /* Time a volmap was last locked/unlocked */ 3 42 2 last_vtoc_map_time fixed bin (71), /* Time a VTOC Map was last locked/unlocked */ 3 43 2 total_volmap_lock_time fixed bin (71), /* Total time volmap's were locked (integral) */ 3 44 2 total_vtoc_map_lock_time fixed bin (71), /* Total time VTOC Maps were locked (integral) */ 3 45 3 46 2 n_volmap_locks fixed bin (35), /* Number times a volmap was locked */ 3 47 2 n_vtoc_map_locks fixed bin (35), /* Number times a vtoc_map was locked */ 3 48 2 volmap_lock_nowait_calls fixed bin (35), /* Number calls to lock volmap, no wait */ 3 49 2 volmap_lock_nowait_fails fixed bin (35), /* Number times lock failed */ 3 50 2 volmap_lock_wait_calls fixed bin (35), /* Number calls to lock volmap, wait */ 3 51 2 volmap_lock_wait_fails fixed bin (35), /* Number times lock failed */ 3 52 2 pad (2) bit (36) aligned, 3 53 3 54 2 array fixed bin (71); /* Array of PVTE's -- must be double-word aligned */ 3 55 3 56 3 57 3 58 /* END INCLUDE FILE ...pvt.incl.pl1 */ 1082 1083 /* START OF: pvte.incl.pl1 July 1982 * * * * * * * * * * * * * * * * */ 4 2 4 3 /* Added pc_vacating, Benson Margulies 84-10-17 */ 4 4 4 5 /****^ HISTORY COMMENTS: 4 6* 1) change(86-04-11,Fawcett), approve(86-04-11,MCR7383), 4 7* audit(86-05-29,GDixon), install(86-07-18,MR12.0-1098): 4 8* Add the support for subvolumes 4 9* 2) change(86-04-11,Lippard), approve(86-04-11,MCR7309), 4 10* audit(86-05-29,GDixon), install(86-07-18,MR12.0-1098): 4 11* Add root_lv flag to mount RLVs that do not have hardcore partitions. 4 12* 3) change(88-05-27,GWMay), approve(88-05-27,MCR7883), 4 13* audit(88-06-14,Beattie), install(88-07-19,MR12.2-1061): 4 14* Added inconsistent_dbm bit for determining the status of volume 4 15* dumper bit maps. 4 16* END HISTORY COMMENTS */ 4 17 4 18 dcl pvt$array aligned external; 4 19 dcl pvt$max_n_entries fixed bin external; 4 20 4 21 dcl pvt_arrayp ptr; 4 22 dcl pvtep ptr; 4 23 4 24 dcl 1 pvt_array (pvt$max_n_entries) aligned like pvte based (pvt_arrayp); 4 25 4 26 dcl 1 pvte based (pvtep) aligned, 4 27 4 28 2 pvid bit (36), /* physical volume ID */ 4 29 4 30 2 lvid bit (36), /* logical volume ID */ 4 31 4 32 2 dmpr_in_use (3) bit (1) unaligned, /* physical volume dumper interlock */ 4 33 2 is_sv bit (1) unaligned, /* true if this entry defines a subvolume */ 4 34 2 root_lv bit (1) unaligned, /* true if this is on the root LV */ 4 35 2 removable_pack bit (1) unaligned, /* true if packs are eremoveable */ 4 36 2 inconsistent_dbm bit (1) unaligned, /* true if trouble count is incremented */ 4 37 2 pad3 bit (2) unaligned, 4 38 2 brother_pvtx fixed bin (8) unaligned,/* next pvte in lv chain */ 4 39 2 skip_queue_count fixed bin (18) unsigned unaligned, /* number of times this pv skipped for per-proc allocation due to saturation */ 4 40 4 41 4 42 4 43 2 devname char (4), /* device name */ 4 44 4 45 (2 device_type fixed bin (8), /* device type */ 4 46 2 logical_area_number fixed bin (8), /* disk drive number */ 4 47 2 used bit (1), /* TRUE if this entry is used */ 4 48 2 storage_system bit (1), /* TRUE for storage system (vs io disk) */ 4 49 2 permanent bit (1), /* TRUE if cannot be demounted */ 4 50 2 testing bit (1), /* Protocol bit for read_disk$test */ 4 51 2 being_mounted bit (1), /* TRUE if the physical volume is being mounted */ 4 52 2 being_demounted bit (1), /* TRUE if the pysical volume is being demounted */ 4 53 2 check_read_incomplete bit (1), /* page control should check read incomplete */ 4 54 2 device_inoperative bit (1), /* TRUE if disk_control decides dev busted */ 4 55 2 rpv bit (1), /* TRUE if this is the root physical volume */ 4 56 2 scav_check_address 4 57 bit (1), /* TRUE is page control should check deposits/withdrawals against scavenger table */ 4 58 2 deposit_to_volmap bit (1), /* TRUE if deposits should got to volume map, not stock */ 4 59 2 being_demounted2 bit (1), /* No more vtoc I/O during demount */ 4 60 2 pc_vacating bit (1), /* No more withdraws from this volume -- for debugging */ 4 61 2 vacating bit (1), /* don't put new segs on this vol */ 4 62 2 hc_part_used bit (1), /* HC part set up by init_pvt */ 4 63 2 volmap_lock_notify bit (1) unal, /* TRUE if notify required when volmap lock is unlocked */ 4 64 2 volmap_idle_notify bit (1) unal, /* TRUE if notify required when volmap state is idle */ 4 65 2 vtoc_map_lock_notify bit (1) unal, /* TRUE if notify required when vtoc map lock is unlocked */ 4 66 4 67 4 68 2 n_free_vtoce fixed bin (17), /* number of free VTOC entries */ 4 69 2 vtoc_size fixed bin (17), /* size of the VTOC part of the disk - in records */ 4 70 4 71 2 dbmrp (2) bit (18), /* rel ptr to dumber bit maps for this volume */ 4 72 4 73 2 nleft fixed bin (17), /* number of records left */ 4 74 2 totrec fixed bin (17)) unaligned, /* Total records in this map */ 4 75 4 76 2 dim_info bit (36), /* Information peculiar to DIM */ 4 77 2 sv_num fixed bin, /* the number of this subvolume starting at 0 */ 4 78 2 num_of_svs fixed bin, /* number of subvolumes for this device */ 4 79 2 records_per_cyl fixed bin, 4 80 2 record_factor fixed bin, /* the record factor for logical to real seek calculation */ 4 81 2 sv_name char (2) aligned, 4 82 2 curn_dmpr_vtocx (3) fixed bin unaligned,/* current vtocx being dumped */ 4 83 2 n_vtoce fixed bin unaligned, /* number of vtoce on this volume */ 4 84 4 85 2 baseadd fixed bin (18) uns unaligned, /* Base of paging region */ 4 86 2 pad2 bit (18) unaligned, 4 87 4 88 2 pad_for_mod_2 fixed bin (35), /* Make volmap_seg_sdw double word aligned */ 4 89 4 90 2 volmap_seg_sdw fixed bin (71), /* SDW describing volmap_seg */ 4 91 4 92 2 volmap_astep ptr unal, /* Packed pointer to ASTE for volmap_seg */ 4 93 4 94 2 volmap_offset bit (18) unal, /* Offset in volmap_seg of volume map */ 4 95 2 vtoc_map_offset bit (18) unal, /* Offset in volmap_seg of VTOC map */ 4 96 4 97 4 98 2 volmap_lock bit (36) aligned, /* Lock on volume map operations */ 4 99 4 100 2 vtoc_map_lock bit (36) aligned, /* Lock on VTOC map operations */ 4 101 4 102 2 volmap_stock_ptr ptr unal, /* Packed pointer to record stock */ 4 103 4 104 2 vtoc_map_stock_ptr ptr unal, /* Packed pointer to VTOCE stock */ 4 105 4 106 2 volmap_async_state fixed bin (17) unaligned, /* Asynchronous update state of Volume Map */ 4 107 2 volmap_async_page fixed bin (17) unaligned, /* Page number for asynchronous update */ 4 108 4 109 2 vol_trouble_count fixed bin (17) unaligned, /* Count of inconsistencies since last salvage */ 4 110 2 scavenger_block_rel bit (18) unaligned; /* Offset to scavenger block, ^0 => scavenging */ 4 111 4 112 4 113 dcl (VOLMAP_ASYNC_IDLE init (0), /* for volmap_async_state */ 4 114 VOLMAP_ASYNC_READ init (1), 4 115 VOLMAP_ASYNC_WRITE init (2)) fixed bin int static options (constant); 4 116 4 117 4 118 /* END OF: pvte.incl.pl1 * * * * * * * * * * * * * * * * */ 1083 1084 /* BEGIN INCLUDE FILE ... fs_vol_label.incl.pl1 .. last modified January 1982 for new volume map format */ 5 2 5 3 /****^ HISTORY COMMENTS: 5 4* 1) change(86-04-10,Fawcett), approve(86-04-10,MCR7383), 5 5* audit(86-05-12,Coppola), install(86-07-18,MR12.0-1098): 5 6* Add the subvolume info. 5 7* 2) change(88-05-27,GWMay), approve(88-05-27,MCR7883), 5 8* audit(88-06-14,Beattie), install(88-07-19,MR12.2-1061): 5 9* Added inconsistent_dbm bit used to determine consistency of volume 5 10* dumper bit maps. 5 11* END HISTORY COMMENTS */ 5 12 5 13 /* This is the label at fixed location of each physical volume. Length 1 page */ 5 14 /* Note: fsout_vol clears pad fields before writing the label */ 5 15 5 16 dcl labelp ptr; 5 17 5 18 dcl 1 label based (labelp) aligned, 5 19 5 20 /* First comes data not used by Multics.. for compatibility with GCOS */ 5 21 5 22 2 gcos (5*64) fixed bin, 5 23 5 24 /* Now we have the Multics label */ 5 25 5 26 2 Multics char (32) init ("Multics Storage System Volume"), /* Identifier */ 5 27 2 version fixed bin, /* Version 1 */ 5 28 2 mfg_serial char (32), /* Manufacturer's serial number */ 5 29 2 pv_name char (32), /* Physical volume name. */ 5 30 2 lv_name char (32), /* Name of logical volume for pack */ 5 31 2 pvid bit (36), /* Unique ID of this pack */ 5 32 2 lvid bit (36), /* unique ID of its logical vol */ 5 33 2 root_pvid bit (36), /* unique ID of the pack containing the root. everybody must agree. */ 5 34 2 time_registered fixed bin (71), /* time imported to system */ 5 35 2 n_pv_in_lv fixed bin, /* # phys volumes in logical */ 5 36 2 vol_size fixed bin, /* total size of volume, in records */ 5 37 2 vtoc_size fixed bin, /* number of recs in fixed area + vtoc */ 5 38 2 not_used bit (1) unal, /* used to be multiple_class */ 5 39 2 private bit (1) unal, /* TRUE if was registered as private */ 5 40 2 inconsistent_dbm bit (1) unal, /* TRUE if ESD-less crash */ 5 41 2 flagpad bit (33) unal, 5 42 2 max_access_class bit (72), /* Maximum access class for stuff on volume */ 5 43 2 min_access_class bit (72), /* Minimum access class for stuff on volume */ 5 44 2 password bit (72), /* not yet used */ 5 45 2 number_of_sv fixed bin, /* if = 0 not a subvolume else the number of svs */ 5 46 2 this_sv fixed bin, /* what subvolume number it is */ 5 47 2 sub_vol_name char (1), /* what subvolume name (a b c d) it is */ 5 48 2 pad1 (13) fixed bin, 5 49 2 time_mounted fixed bin (71), /* time mounted */ 5 50 2 time_map_updated fixed bin (71), /* time vmap known good */ 5 51 5 52 /* The next two words overlay time_unmounted on pre-MR10 systems. This 5 53* forces a salvage if an MR10 pack is mounted on an earlier system. 5 54* */ 5 55 2 volmap_version fixed bin, /* version of volume map (currently 1) */ 5 56 2 pad6 fixed bin, 5 57 5 58 2 time_salvaged fixed bin (71), /* time salvaged */ 5 59 2 time_of_boot fixed bin (71), /* time of last bootload */ 5 60 2 time_unmounted fixed bin (71), /* time unmounted cleanly */ 5 61 2 last_pvtx fixed bin, /* pvtx in that PDMAP */ 5 62 2 pad1a (2) fixed bin, 5 63 2 err_hist_size fixed bin, /* size of pack error history */ 5 64 2 time_last_dmp (3) fixed bin (71), /* time last completed dump pass started */ 5 65 2 time_last_reloaded fixed bin (71), /* what it says */ 5 66 2 pad2 (40) fixed bin, 5 67 2 root, 5 68 3 here bit (1), /* TRUE if the root is on this pack */ 5 69 3 root_vtocx fixed bin (35), /* VTOC index of root, if it is here */ 5 70 3 shutdown_state fixed bin, /* Status of hierarchy */ 5 71 3 pad7 bit (1) aligned, 5 72 3 disk_table_vtocx fixed bin, /* VTOC index of disk table on RPV */ 5 73 3 disk_table_uid bit (36) aligned, /* UID of disk table */ 5 74 3 esd_state fixed bin, /* State of esd */ 5 75 2 volmap_record fixed bin, /* Begin record of volume map */ 5 76 2 size_of_volmap fixed bin, /* Number of records in volume map */ 5 77 2 vtoc_map_record fixed bin, /* Begin record of VTOC map */ 5 78 2 size_of_vtoc_map fixed bin, /* Number of records in VTOC map */ 5 79 2 volmap_unit_size fixed bin, /* Number of words per volume map section */ 5 80 2 vtoc_origin_record fixed bin, /* Begin record of VTOC */ 5 81 2 dumper_bit_map_record fixed bin, /* Begin record of dumper bit-map */ 5 82 2 vol_trouble_count fixed bin, /* Count of inconsistencies found since salvage */ 5 83 2 pad3 (52) fixed bin, 5 84 2 nparts fixed bin, /* Number of special partitions on pack */ 5 85 2 parts (47), 5 86 3 part char (4), /* Name of partition */ 5 87 3 frec fixed bin, /* First record */ 5 88 3 nrec fixed bin, /* Number of records */ 5 89 3 pad5 fixed bin, 5 90 2 pad4 (5*64) fixed bin; 5 91 5 92 dcl Multics_ID_String char (32) init ("Multics Storage System Volume") static; 5 93 5 94 /* END INCLUDE FILE fs_vol_label.incl.pl1 */ 1084 1085 /* BEGIN INCLUDE FILE...disk_pack.incl.pl1 Last Modified January 1982 for new volume map */ 6 2 6 3 6 4 6 5 6 6 /****^ HISTORY COMMENTS: 6 7* 1) change(86-01-14,Fawcett), approve(86-05-13,MCR7383), 6 8* audit(86-05-14,LJAdams), install(86-07-18,MR12.0-1098): 6 9* Add vars PAGE_SIZE and VTOCE_SIZE, Also change the SECTORS_PER_VTOCE and 6 10* VTOCES_PER_RECORD form fixed bin constants to arrays of fixed bin 6 11* constants indexed by device type as defined in fs_dev_types.incl.pl1. 6 12* This was done for support of the 3380, and 3390 devices for 512_WORD_IO. 6 13* 2) change(86-10-21,Fawcett), approve(86-10-21,MCR7533), 6 14* audit(86-10-21,Farley), install(86-10-22,MR12.0-1193): 6 15* Change PAGE_SIZE and VTOCE_SIZE from automatic to static constants. 6 16* END HISTORY COMMENTS */ 6 17 6 18 6 19 /* 6 20* All disk packs have the standard layout described below: 6 21* 6 22* Record 0 : contains the label, as declared in fs_vol_label.incl.pl1. 6 23* Record 1 to 3 : contains the volume map, as declared in vol_map.incl.pl1 6 24* Record 4 to 5 : contains the dumper bit map, as declared in dumper_bit_map.incl.pl1 6 25* Record 6 : contains the vtoc map, as declared in vtoc_map.incl.pl1 6 26* Record 7 : formerly contained bad track list; no longer used. 6 27* Records 8 to n-1 : contain the array of vtoc entries; ( n is specified in the label) 6 28* each record contains 5 192-word vtoc entries. The last 64 words are unused. 6 29* Records n to N-1 : contain the pages of the Multics segments. ( N is specified in the label) 6 30* 6 31* Sundry partitions may exist within the region n to N-1, withdrawn or not as befits the meaning 6 32* of the particular partition. 6 33* 6 34* 6 35* 6 36* A conceptual declaration for a disk pack could be: 6 37* 6 38* dcl 1 disk_pack, 6 39* 2 label_record (0 : 0) bit(36 * 1024), 6 40* 2 volume_map_record (1 : 3) bit(36 * 1024), 6 41* 2 dumper_bit_map_record (4 : 5) bit(36 * 1024), 6 42* 2 vtoc_map_record (6 : 6) bit(36 * 1024), 6 43* 2 spare_record (7 : 7) bit(36 * 1024), 6 44* 2 vtoc_array_records (8 : n-1), 6 45* 3 vtoc_entry ( 5 ) bit(36 * 192), 6 46* 3 unused bit(36 * 64), 6 47* 2 Multics_pages_records (n : N-1) bit(36 * 1024); 6 48* 6 49* 6 50* 6 51* 6 52**/ 6 53 6 54 dcl (LABEL_ADDR init (0), /* Address of Volume Label */ 6 55 VOLMAP_ADDR init (1), /* Address of first Volume Map record */ 6 56 DUMPER_BIT_MAP_ADDR init (4), /* For initial release compaitiblity */ 6 57 VTOC_MAP_ADDR init (6), /* Address of first VTOC Map Record */ 6 58 VTOC_ORIGIN init (8), /* Address of first record of VTOC */ 6 59 DEFAULT_HCPART_SIZE init (1000), /* Size of Hardcore Partition */ 6 60 MAX_VTOCE_PER_PACK init (31774)) /* Limited by size of VTOC Map */ 6 61 fixed bin (17) int static options (constant); 6 62 6 63 /* SECTORS_PER_VTOCE & VTOCES_PER_RECORD are indexed via device type as */ 6 64 /* defined by fs_dev_types and extracted form the disk_table entry (dte) */ 6 65 /* or the physical volume table entry (pvte) device type. */ 6 66 6 67 dcl PAGE_SIZE fixed bin (17) init (1024) static options (constant); 6 68 dcl VTOCE_SIZE fixed bin (17) init (192) static options (constant); 6 69 6 70 dcl SECTORS_PER_VTOCE (9) fixed bin static options (constant) init 6 71 (0, 3, 3, 3, 3, 3, 3, 1, 1); 6 72 dcl VTOCES_PER_RECORD (9) fixed bin static options (constant) init 6 73 (0, 5, 5, 5, 5, 5, 5, 2, 2); 6 74 dcl SECTORS_PER_RECORD (9) fixed bin static options (constant) init 6 75 (0, 16, 16, 16, 16, 16, 16, 2, 2); 6 76 6 77 /* END INCLUDE FILE...disk_pack.incl.pl1 */ 1085 1086 /* BEGIN INCLUDE FILE syserr_constants.incl.pl1 ... 11/11/80 W. Olin Sibert */ 7 2 /* 85-02-12, EJ Sharpe - Added sorting class constants, removed AIM_MESSAGE, added new action code names. */ 7 3 /* 85-04-24, G. Palter - Renamed SYSERR_UNUSED_10 to SYSERR_RING1_ERROR to reflect its actual use. */ 7 4 7 5 /* This include file has an ALM version. Keep 'em in sync! */ 7 6 7 7 dcl ( 7 8 7 9 /* The following constants define the message action codes. This indicates 7 10*how a message is to be handled. */ 7 11 7 12 SYSERR_CRASH_SYSTEM init (1), 7 13 CRASH init (1), /* Crash the system, and bleat plaintively. */ 7 14 7 15 SYSERR_TERMINATE_PROCESS init (2), 7 16 TERMINATE_PROCESS init (2), /* Terminate the process, print the message, and beep. */ 7 17 7 18 SYSERR_PRINT_WITH_ALARM init (3), 7 19 BEEP init (3), /* Beep and print the message on the console. */ 7 20 7 21 SYSERR_PRINT_ON_CONSOLE init (0), 7 22 ANNOUNCE init (0), /* Just print the message on the console. */ 7 23 7 24 SYSERR_LOG_OR_PRINT init (4), 7 25 LOG init (4), /* Log the message, or print it if it can't be logged */ 7 26 7 27 SYSERR_LOG_OR_DISCARD init (5), 7 28 JUST_LOG init (5), /* Just try to log the message, and discard it if it can't be */ 7 29 7 30 7 31 /* The following constants are added to the normal severities to indicate 7 32*different sorting classes of messages. */ 7 33 7 34 SYSERR_SYSTEM_ERROR init (00), /* indicates a standard level system error */ 7 35 SYSERR_RING1_ERROR init (10), /* indicates an error detected in ring 1 (mseg_, RCP) */ 7 36 SYSERR_COVERT_CHANNEL init (20), /* indicates covert channel audit trail message */ 7 37 SYSERR_UNSUCCESSFUL_ACCESS init (30), /* indicates access denial audit trail message */ 7 38 SYSERR_SUCCESSFUL_ACCESS init (40) /* indicates access grant audit trail message */ 7 39 ) fixed bin internal static options (constant); 7 40 7 41 /* END INCLUDE FILE syserr_constants.incl.pl1 */ 1086 1087 1088 /* BEGIN MESSAGE DOCUMENTATION 1089* 1090* Message: 1091* disk_table_: Added drive DSKX_NN 1092* 1093* S: $info 1094* 1095* T: $response 1096* 1097* M: The operator has added a storage system disk drive with adddev. 1098* 1099* A: $ignore 1100* 1101* Message: 1102* disk_table_: Deleted drive DSKX_NN 1103* 1104* S: $info 1105* 1106* T: $response 1107* 1108* M: The operator has deleted a storage system disk drive with deldev. 1109* 1110* A: $ignore 1111* 1112* Message: 1113* disk_table_: accepted PV PVNAME on DSKX_NN 1114* 1115* S: $log 1116* 1117* T: $response 1118* $init 1119* 1120* M: A storage system physical volume has been placed in use. 1121* The volume and drive name are identified. 1122* 1123* A: $ignore 1124* This message is provided for the benefit of 1125* automatic error analysis and logging. 1126* 1127* 1128* Message: 1129* disk_table_: Deleted root PV "PV_NAME" on DSKX_NN. 1130* 1131* S: $beep 1132* 1133* T: $init 1134* 1135* M: The specified drive did not appear in the ROOT config card. Thus, 1136* it was removed from the disk_table_. This will also occur when the 1137* volume is intentionally deleted. 1138* 1139* A: $notify 1140* 1141* 1142* Message: 1143* disk_table_: Root PV "PV_NAME" moved from DSKX_NN to DSKX_NN. 1144* 1145* S: $info 1146* 1147* T: $init 1148* 1149* M: The specified root volume has been moved to a different drive 1150* since the last shutdown. 1151* 1152* A: $ignore 1153* 1154* 1155* END MESSAGE DOCUMENTATION */ 1156 1157 end mdx; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 11/11/89 0803.2 mdx.pl1 >spec>install>1111>mdx.pl1 1080 1 07/24/86 2051.9 disk_table.incl.pl1 >ldd>include>disk_table.incl.pl1 1081 2 11/30/76 1555.4 lvt.incl.pl1 >ldd>include>lvt.incl.pl1 1082 3 05/27/82 1525.8 pvt.incl.pl1 >ldd>include>pvt.incl.pl1 1083 4 07/21/88 2036.0 pvte.incl.pl1 >ldd>include>pvte.incl.pl1 1084 5 07/21/88 2036.0 fs_vol_label.incl.pl1 >ldd>include>fs_vol_label.incl.pl1 1085 6 10/22/86 1450.1 disk_pack.incl.pl1 >ldd>include>disk_pack.incl.pl1 1086 7 05/17/85 0615.7 syserr_constants.incl.pl1 >ldd>include>syserr_constants.incl.pl1 NAMES DECLARED IN THIS COMPILATION. IDENTIFIER OFFSET LOC STORAGE CLASS DATA TYPE ATTRIBUTES AND REFERENCES (* indicates a set context) NAMES DECLARED BY DECLARE STATEMENT. ANNOUNCE 000032 constant fixed bin(17,0) initial dcl 7-7 set ref 589* 812* BEEP 000035 constant fixed bin(17,0) initial dcl 7-7 set ref 206* LABEL_ADDR 000032 constant fixed bin(17,0) initial dcl 6-54 set ref 434* LOG 000042 constant fixed bin(17,0) initial dcl 7-7 set ref 1003* Multics 500 based char(32) initial level 2 in structure "label" dcl 5-18 in procedure "mdx" ref 438 Multics 500 000116 automatic char(32) initial level 2 in structure "label_buffer" packed packed unaligned dcl 103 in procedure "mdx" set ref 103* Multics_ID_String 000000 constant char(32) initial packed unaligned dcl 5-92 ref 438 ROOT 000014 internal static char(168) initial packed unaligned dcl 62 set ref 137* 142* 1062* 1076* SL1 000066 internal static char(168) initial packed unaligned dcl 63 set ref 146* 1076* a_adding_drive parameter bit(1) dcl 566 ref 564 571 a_bit parameter bit(1) dcl 521 ref 519 529 542 551 552 a_device_name parameter char packed unaligned dcl 566 ref 564 577 589 a_dhv_act parameter fixed bin(17,0) dcl 668 ref 666 687 693 701 a_dtp parameter pointer dcl 133 set ref 131 154* a_from_ss parameter bit(1) packed unaligned dcl 602 ref 600 605 a_hvname parameter char packed unaligned dcl 498 ref 496 504 519 527 542 548 a_indx parameter fixed bin(17,0) dcl 262 set ref 259 267 319 323 337 341 349 355 374 383 401 406 408 412 415* 422 426 434* 772 774 a_lvx parameter fixed bin(17,0) dcl 668 ref 666 671 a_pvname parameter char packed unaligned dcl 261 set ref 259 275* 278 319 326* 329 349 359* 362 422 430* 442 481 488 a_pvtx parameter fixed bin(17,0) dcl 377 set ref 374 380 600 606 636 639 658* a_tpvtx parameter fixed bin(17,0) dcl 66 set ref 401 404* 417* aa 000140 internal static structure level 1 dcl 109 set ref 142 142 access_class 3 002251 automatic structure level 2 dcl 879 adding_drive 002125 automatic bit(1) packed unaligned dcl 569 set ref 571* 580 582 586 589 addr builtin function dcl 75 ref 142 142 159 165 175 176 183 184 196 245 246 268 290 324 342 356 382 383 406 426 433 447 474 487 576 608 639 651 672 709 748 774 808 823 848 849 881 883 893 915 915 941 950 1030 1032 admin_gate_$ioi_add_device 000154 constant entry external dcl 77 ref 582 admin_gate_$ioi_delete_device 000156 constant entry external dcl 78 ref 584 admin_gate_$syserr 000236 constant entry external dcl 101 ref 206 589 812 1003 adte based structure level 1 dcl 105 alve based structure level 1 dcl 106 aroot parameter char packed unaligned dcl 1074 set ref 1072 1076 1077* array 50 based fixed bin(71,0) level 2 in structure "pvt" dcl 3-13 in procedure "mdx" set ref 159 array 10 based structure array level 2 in structure "dt" dcl 1-23 in procedure "mdx" set ref 176 184 246 268 324 342 356 382 383 426 487 576 608 639 709 748 774 808 848 883 893 950 1032 aux_dtep 002116 automatic pointer dcl 107 set ref 748* 749 751 751 751 756 756 756 759* 760 760 760 762 762 808* 809 810 810 812 1032* 1033 1034 1035 1035 1035 aux_lvep 002120 automatic pointer dcl 107 set ref 1030* 1036 1043 1044 1046 1048 1049 b_dtep parameter pointer dcl 741 ref 739 749 759 765 b_dtx parameter fixed bin(17,0) dcl 726 set ref 722 729* b_ec parameter fixed bin(35,0) dcl 727 set ref 722 729* 730 b_pvname parameter char packed unaligned dcl 742 ref 739 751 756 760 bpk 002204 automatic fixed bin(17,0) dcl 743 set ref 749* 762* cu_$level_get 000162 constant entry external dcl 79 ref 619 1060 cu_$level_set 000160 constant entry external dcl 79 ref 511 620 628 1061 1064 deleted 2(13) based bit(1) level 2 packed packed unaligned dcl 1-35 set ref 190 199 199* 270 325 343 357 385 428 580 586* 623 627 789* demounted 2(15) based bit(1) level 2 in structure "dte" packed packed unaligned dcl 1-35 in procedure "mdx" set ref 187* 190* 219 972* 978* 988* 994* 1002* 1011 demounted 2(15) based bit(1) level 2 in structure "adte" packed packed unaligned dcl 105 in procedure "mdx" ref 756 762 1034 demounted_only 1(06) based bit(1) level 2 in structure "lve" packed packed unaligned dcl 1-58 in procedure "mdx" set ref 167* 211* 220* demounted_only 1(06) based bit(1) level 2 in structure "alve" packed packed unaligned dcl 106 in procedure "mdx" set ref 1036* 1043* demounted_only based bit(1) array level 3 in structure "dt" packed packed unaligned dcl 1-23 in procedure "mdx" set ref 980* 996* 1006* demounting 1(04) based bit(1) level 2 packed packed unaligned dcl 1-58 set ref 168* 408 653 674* 691* 698* 702 703* desired_lvx parameter fixed bin(17,0) dcl 876 ref 866 881 884 894 device_type 4 based fixed bin(8,0) level 2 in structure "pvte" packed packed unaligned dcl 4-26 in procedure "mdx" ref 198 device_type 2 based fixed bin(8,0) level 2 in structure "l_dte" packed packed unaligned dcl 844 in procedure "force_init_dte" set ref 856* device_type 2 based fixed bin(8,0) level 2 in structure "dte" packed packed unaligned dcl 1-35 in procedure "mdx" ref 198 device_type 4 based fixed bin(8,0) level 2 in structure "l_pvte" packed packed unaligned dcl 846 in procedure "force_init_dte" ref 856 devname 3 based char(4) level 2 in structure "l_pvte" dcl 846 in procedure "force_init_dte" ref 854 devname 3 based char(4) level 2 in structure "pvte" dcl 4-26 in procedure "mdx" ref 193 drive_name based char(8) level 2 in structure "adte" dcl 105 in procedure "mdx" set ref 812* drive_name based char(8) level 2 in structure "l_dte" dcl 844 in procedure "force_init_dte" set ref 854* 855* 855 drive_name based char(8) level 2 in structure "dte" dcl 1-35 in procedure "mdx" set ref 197 206* 577 582 584 623 627 812* 1003* dt based structure level 1 dcl 1-23 dte based structure level 1 dcl 1-35 dte_index parameter fixed bin(17,0) dcl 842 ref 839 848 849 dtep 002132 automatic pointer dcl 1-17 set ref 176* 177 179 184* 185 186 187 187 187 187 188 190 190 190 190 190 190 195 197 198 199 199 201 202 202* 204 206 206 212 215 218 218 219 246* 250* 268* 270 270 270 275* 278 279 280* 290 299 308 324* 325 325 325 326* 329 330* 342* 343 343 343 356* 357 357 357 359* 362 363* 365* 382* 385 385 385 426* 428 428 428 430* 443 444 446 447 448 458* 487* 488 488 488 576* 577 578 579 579 580 582 584 586 587 608* 610 614 614 621 623 623 623 623 627 627 630 639* 641 641 646 709* 710 710 729* 764 765* 767* 774* 788 789 790 791 792 793 794 796* 800 809 810 810 812 812 883* 884 884 893* 894 894 906 950* 951 951 951 953 972 972 972 972 978 978 978 978 979 980 980 980 987 987 987 988 994 994 994 995 996 996 996 1002 1002 1002 1003 1003 1003 1005 1006 1006 1006 1011 1011 1011 1011 1021 1024 dtp 002130 automatic pointer dcl 1-17 set ref 137* 138 144* 152 153* 154 161 162 164 165 176 184 196 215 215 230 238* 239 241 242 243 244 246 266* 268 290 322* 324 340* 342 354* 356 365* 381* 382 383 389* 405* 406 425* 426 445 445 445 447 448 449 449 474 474 475 486 487 503 504 504 504 512* 526 527 527 529 529 547 548 548 550 551 552 552 572* 575 576 607* 608 638* 639 647 651 670* 672 679 679 690 690 690 691 708 709 729* 747 748 773* 774 792 796* 803 808 823 825 848 881 882 883 892 893 941 941 949 950 980 980 996 996 1006 1006 1029 1030 1031 1032 1057* 1059 1062* 1063 dvn 000104 automatic char(8) packed unaligned dcl 65 set ref 193* 194* 194 197 ec parameter fixed bin(35,0) dcl 740 in procedure "verify_drive_vanish_pve" set ref 739 753* 760* 761* 763 ec parameter fixed bin(35,0) dcl 133 in procedure "mdx" set ref 131 135* 139* 148* 161* 197* 198* 227 231* 235* 259 265* 271* 275* 276 280* 281 285* 292* 293 294* 295* 297 299* 311* 312 319 321* 326* 327 330* 331 337 339* 349 353* 359* 360 363* 364 365* 366 369* 374 389* 390 395* 401 403* 413* 414 414 415* 422 424* 430* 431 434* 435 437* 441* 458* 459 466 473* 481 496 506* 508* 519 523* 531* 534* 542 544* 554* 557* 564 573* 579* 580* 582* 584* 585 600 611* 615* 631* 636 642* 648* 654* 658* 660 666 675* 681* 685* 696* 697 697* 706 796* 1062* ec parameter fixed bin(35,0) dcl 930 in procedure "check_lv_complete" set ref 925 942* 943 945* 947 958* 960 960* ec parameter fixed bin(35,0) dcl 876 in procedure "verify_whole_lv" set ref 866 885* 895* 896 897* 898* 901 906* 915* 916 error_table_$action_not_performed 000254 external static fixed bin(35,0) dcl 121 ref 580 642 648 675 681 error_table_$argerr 000252 external static fixed bin(35,0) dcl 120 ref 271 error_table_$bad_label 000250 external static fixed bin(35,0) dcl 119 ref 441 error_table_$fsdisk_not_salv 000242 external static fixed bin(35,0) dcl 116 ref 293 896 error_table_$invalid_state 000246 external static fixed bin(35,0) dcl 118 ref 611 error_table_$io_still_assnd 000256 external static fixed bin(35,0) dcl 122 ref 579 615 654 753 761 error_table_$logical_volume_not_defined 000260 external static fixed bin(35,0) dcl 123 ref 697 error_table_$mount_not_ready 000262 external static fixed bin(35,0) dcl 124 ref 506 534 557 error_table_$no_label 000244 external static fixed bin(35,0) dcl 117 ref 437 error_table_$private_volume 000264 external static fixed bin(35,0) dcl 125 ref 531 554 fixed builtin function dcl 75 ref 474 flags 7 002251 automatic structure level 2 packed packed unaligned dcl 879 found 000100 automatic bit(1) packed unaligned dcl 59 in procedure "mdx" set ref 485* 486 488* 502* 503 504* 506 525* 526 528* 534 546* 547 549* 557 found 002277 automatic bit(1) packed unaligned dcl 935 in procedure "check_lv_complete" set ref 948* 949 951* 954* 958 from_ss 002126 automatic bit(1) dcl 603 set ref 605* 610 614 623* 627* 629* 630 hc_accepted 2(17) based bit(1) level 2 packed packed unaligned dcl 1-35 set ref 179* 202 800* hcs_$add_acl_entries 000232 constant entry external dcl 99 ref 142 hcs_$initiate 000222 constant entry external dcl 95 ref 146 1062 hcs_$make_seg 000226 constant entry external dcl 97 ref 137 hcs_$terminate_noname 000224 constant entry external dcl 96 ref 512 hcs_$truncate_seg 000230 constant entry external dcl 98 ref 238 hold 002360 automatic bit(1) initial packed unaligned dcl 1018 set ref 1018* 1034* 1042 1047 hv_mounted 1(01) based bit(1) level 2 in structure "lve" packed packed unaligned dcl 1-58 in procedure "mdx" set ref 170* 291 408 674* 679 695 699* 834* 906 909 917* hv_mounted based bit(1) array level 3 in structure "dt" packed packed unaligned dcl 1-23 in procedure "mdx" set ref 504 i 000102 automatic fixed bin(17,0) dcl 64 in procedure "mdx" set ref 164* 165* 174* 175 176* 182* 183 184 207* 244* 245 246 247* 267* 268 285* 292* 294* 295* 308* 311* 323* 324 341* 342 355* 356 365* 369* 380* 382 389* 395* 445* 445 445* 446 486* 487* 503* 504 504 504* 526* 527 527 529 529* 547* 548 548 550 551 552 552* 575* 576* 606* 608 629* 690* 690 690* 691 708* 709* 792 796* i 002275 automatic fixed bin(17,0) dcl 934 in procedure "check_lv_complete" set ref 947* 951* i 002250 automatic fixed bin(17,0) dcl 878 in procedure "verify_whole_lv" set ref 882* 883 885* 886* 892* 893 895* 897* 898* 902* ii 002356 automatic fixed bin(17,0) dcl 1016 set ref 1031* 1032* initializer_gate_$accept_fs_disk 000176 constant entry external dcl 85 ref 292 295 895 898 initializer_gate_$add_pv_to_lv 000164 constant entry external dcl 80 ref 299 906 initializer_gate_$define_lv 000170 constant entry external dcl 82 ref 915 initializer_gate_$delete_lv 000172 constant entry external dcl 83 ref 696 initializer_gate_$demount_pv 000200 constant entry external dcl 86 ref 658 initializer_gate_$read_disk 000166 constant entry external dcl 81 ref 434 initializer_gate_$set_disk_table_loc 000174 constant entry external dcl 84 ref 144 initializer_gate_$ss_io_reconfigure 000204 constant entry external dcl 88 ref 629 initializer_gate_$vol_salv 000202 constant entry external dcl 87 ref 294 369 395 897 is_sub_vol 2(19) based bit(1) level 2 in structure "dte" packed packed unaligned dcl 1-35 in procedure "mdx" ref 621 is_sub_vol 2(19) based bit(1) level 2 in structure "l_dte" packed packed unaligned dcl 844 in procedure "force_init_dte" set ref 852* 855 is_sv 2(03) based bit(1) level 2 in structure "pvte" packed packed unaligned dcl 4-26 in procedure "mdx" ref 194 is_sv 2(03) based bit(1) level 2 in structure "l_pvte" packed packed unaligned dcl 846 in procedure "force_init_dte" ref 852 j 002276 automatic fixed bin(17,0) dcl 934 set ref 949* 950* k 002210 automatic fixed bin(17,0) dcl 745 set ref 747* 748 749 756* known 2(10) based bit(1) level 2 in structure "adte" packed packed unaligned dcl 105 in procedure "mdx" ref 751 760 1035 known 2(10) based bit(1) level 2 in structure "dte" packed packed unaligned dcl 1-35 in procedure "mdx" set ref 187* 190* 218 279 386 488 579 614 894 951 972* 978* 987* 995* 1002* 1011 l_dte based structure level 1 dcl 844 set ref 850* l_dtep 002236 automatic pointer dcl 843 set ref 848* 850 852 853 854 855 855 855 856 857 858 859 860 l_lvx 002357 automatic fixed bin(17,0) dcl 1017 set ref 1024* 1028* 1029 1029 1030 1033 l_pvte based structure level 1 dcl 846 l_pvtep 002240 automatic pointer dcl 845 set ref 849* 851 852 853 854 855 856 857 858 859 860 label based structure level 1 dcl 5-18 label_buffer 000116 automatic structure level 1 unaligned dcl 103 set ref 433 labelp 002144 automatic pointer dcl 5-16 set ref 433* 434* 438 439 440 442 443 444 445 451 452 453 454 455 local_lvte 002251 automatic structure level 1 dcl 879 set ref 910* 915 915 logical_area_number 4(09) based fixed bin(8,0) level 2 in structure "l_pvte" packed packed unaligned dcl 846 in procedure "force_init_dte" ref 851 logical_area_number 4(09) based fixed bin(8,0) level 2 in structure "pvte" packed packed unaligned dcl 4-26 in procedure "mdx" ref 192 lv_array based structure array level 2 dcl 1-23 set ref 165 196 290 406 447 474 651 672 823 881 941 1030 lv_name 531 based char(32) level 2 dcl 5-18 ref 445 451 lve based structure level 1 dcl 1-58 set ref 450* 826* lvep 002134 automatic pointer dcl 1-17 set ref 165* 166 167 168 169 170 171 196* 211 212 213 214 220 220 290* 291 299 310 406* 408 408 408 408 408 412 447* 450 451 452 453 454 455 456 651* 653 672* 673 674 674 674 679 679 688 689 691 694 695 696 698 699 702 703 712 714 823* 824 824 826 827 828 829 830 831 833 834 881* 906 906 909 911 912 913 914 917 918 942 lvid 542 based bit(36) level 2 in structure "label" dcl 5-18 in procedure "mdx" ref 452 lvid based bit(36) level 2 in structure "lve" dcl 1-58 in procedure "mdx" set ref 299* 452* 696* 828* 906* 911 lvid 1 based bit(36) level 2 in structure "pvte" dcl 4-26 in procedure "mdx" ref 828 lvid 2 002251 automatic bit(36) level 2 in structure "local_lvte" dcl 879 in procedure "verify_whole_lv" set ref 911* lvid based bit(36) level 2 in structure "alve" dcl 106 in procedure "mdx" set ref 1049* lvname 2 based char(32) level 2 in structure "lve" dcl 1-58 in procedure "mdx" set ref 451* 824 829* 942 lvname based char(32) array level 3 in structure "dt" dcl 1-23 in procedure "mdx" set ref 445 504 527 548 lvte based structure level 1 dcl 2-18 lvx 12(23) based fixed bin(11,0) array level 3 in structure "dt" packed packed unaligned dcl 1-23 in procedure "mdx" set ref 679 690 lvx 000107 automatic fixed bin(17,0) dcl 67 in procedure "mdx" set ref 195* 196 200 646* 647 647 651 671* 672 679 690 710 1028 lvx 2(23) based fixed bin(11,0) level 2 in structure "adte" packed packed unaligned dcl 105 in procedure "mdx" ref 1033 lvx 2(23) based fixed bin(11,0) level 2 in structure "dte" packed packed unaligned dcl 1-35 in procedure "mdx" set ref 195 204 212 215 290 308 446* 447 448 646 710 793* 884 894 980 980 980 996 996 996 1006 1006 1006 1021* 1024 max builtin function dcl 75 in procedure "mdx" ref 215 max 5 002251 automatic bit(72) level 3 in structure "local_lvte" dcl 879 in procedure "verify_whole_lv" set ref 913* max_access_class 14 based bit(72) level 2 in structure "lve" dcl 1-58 in procedure "mdx" set ref 453* 831* 913 max_access_class 552 based bit(72) level 2 in structure "label" dcl 5-18 in procedure "mdx" ref 453 max_n_entries 1 based fixed bin(17,0) level 2 in structure "dt" dcl 1-23 in procedure "mdx" set ref 165 196 242* 290 406 445 445 447 474 504 504 504 527 527 529 529 548 548 550 551 552 552 651 672 823 881 941 941 980 996 1006 1030 max_n_entries 1 based fixed bin(17,0) level 2 in structure "pvt" dcl 3-13 in procedure "mdx" ref 242 min 3 002251 automatic bit(72) level 3 dcl 879 set ref 912* min_access_class 12 based bit(72) level 2 in structure "lve" dcl 1-58 in procedure "mdx" set ref 454* 830* 912 min_access_class 554 based bit(72) level 2 in structure "label" dcl 5-18 in procedure "mdx" ref 454 mounting 1(03) based bit(1) level 2 in structure "alve" packed packed unaligned dcl 106 in procedure "mdx" ref 1046 mounting 1(03) based bit(1) level 2 in structure "lve" packed packed unaligned dcl 1-58 in procedure "mdx" set ref 166* 212* 310 408 412* 674* 688 689* 694 714* 918* move_len 002124 automatic fixed bin(18,0) dcl 469 set ref 474* 475 move_table based fixed bin(35,0) array dcl 470 set ref 475* 475 mrpve_pvtx 002220 automatic fixed bin(17,0) dcl 782 set ref 803* 808 814* must_term 000101 automatic bit(1) initial packed unaligned dcl 60 set ref 60* 509 1058* 1067* n_entries based fixed bin(17,0) level 2 in structure "dt" dcl 1-23 in procedure "mdx" set ref 162 230 241* 244 486 575 690 691 708 747 803 882 892 949 1031 n_entries based fixed bin(17,0) level 2 in structure "pvt" dcl 3-13 in procedure "mdx" ref 158 n_lv_entries 5 based fixed bin(17,0) level 2 dcl 1-23 set ref 164 215* 215 243* 445 448 449* 449 474 503 526 547 647 825* 980 996 1006 1029 need_salvage 2(16) based bit(1) level 2 packed packed unaligned dcl 1-35 set ref 185* new parameter bit(1) packed unaligned dcl 133 set ref 131 136* 240* npv 002274 automatic fixed bin(17,0) dcl 933 set ref 942* 947 null builtin function dcl 75 ref 138 147 1059 1063 num_of_sv 3(18) based fixed bin(17,0) level 2 in structure "dte" packed packed unaligned dcl 1-35 in procedure "mdx" ref 623 num_of_sv 3(18) based fixed bin(17,0) level 2 in structure "l_dte" packed packed unaligned dcl 844 in procedure "force_init_dte" set ref 859* num_of_svs 12 based fixed bin(17,0) level 2 dcl 846 ref 859 num_pic 000112 automatic picture(2) packed unaligned dcl 70 set ref 192* 193 851* 854 oldlev 000111 automatic fixed bin(17,0) dcl 69 set ref 511* 619* 628* 1060* 1064* opt parameter bit(36) dcl 351 set ref 349 369* 374 395* pdirs_ok 1(07) based bit(1) level 2 in structure "lve" packed packed unaligned dcl 1-58 in procedure "mdx" set ref 171* 679 pdirs_ok based bit(1) array level 3 in structure "dt" packed packed unaligned dcl 1-23 in procedure "mdx" set ref 529* 552 552* permanent 2(12) based bit(1) level 2 in structure "l_dte" packed packed unaligned dcl 844 in procedure "force_init_dte" set ref 858* permanent 4(20) based bit(1) level 2 in structure "l_pvte" packed packed unaligned dcl 846 in procedure "force_init_dte" ref 858 permanent 2(12) based bit(1) level 2 in structure "dte" packed packed unaligned dcl 1-35 in procedure "mdx" set ref 794* pre_accepted 2(35) based bit(1) level 2 in structure "dte" packed packed unaligned dcl 1-35 in procedure "mdx" set ref 187* 190* 218 710 884 953 972* 979* 987* 994* 1002* 1011 pre_accepted 2(35) based bit(1) level 2 in structure "adte" packed packed unaligned dcl 105 in procedure "mdx" ref 756 762 1035 prev_bootload 1(08) based bit(1) level 2 in structure "lve" packed packed unaligned dcl 1-58 in procedure "mdx" set ref 213* 408 prev_bootload 1(08) based bit(1) level 2 in structure "alve" packed packed unaligned dcl 106 in procedure "mdx" set ref 1044* prev_state 000110 automatic bit(1) packed unaligned dcl 68 set ref 986* 1011* 1020 private 551(01) based bit(1) level 2 packed packed unaligned dcl 5-18 ref 455 public 1(02) based bit(1) level 2 in structure "lve" packed packed unaligned dcl 1-58 in procedure "mdx" set ref 455* 827* 914 public 7 002251 automatic bit(1) level 3 in structure "local_lvte" packed packed unaligned dcl 879 in procedure "verify_whole_lv" set ref 914* public based bit(1) array level 3 in structure "dt" packed packed unaligned dcl 1-23 in procedure "mdx" set ref 529 550 pv_name 521 based char(32) level 2 dcl 5-18 ref 442 443 pva based structure array level 1 dcl 936 pvap 002272 automatic pointer dcl 932 set ref 941* 942* 951 pvid 5 based bit(36) level 2 in structure "adte" dcl 105 in procedure "mdx" ref 810 pvid based bit(36) level 2 in structure "pvte" dcl 4-26 in procedure "mdx" ref 791 pvid 5 based bit(36) level 2 in structure "dte" dcl 1-35 in procedure "mdx" set ref 299* 444* 791* 810 906* pvid 541 based bit(36) level 2 in structure "label" dcl 5-18 in procedure "mdx" ref 444 pvname based char(32) array level 2 in structure "pva" dcl 936 in procedure "check_lv_complete" ref 951 pvname 6 based char(32) level 2 in structure "adte" dcl 105 in procedure "mdx" ref 751 756 760 810 pvname 6 based char(32) level 2 in structure "dte" dcl 1-35 in procedure "mdx" set ref 206* 278* 329* 362* 443* 488 810 812* 951 1003* pvt based structure level 1 dcl 3-13 pvt_array based structure array level 1 dcl 4-24 set ref 175 183 245 849 pvt_arrayp 002140 automatic pointer dcl 4-21 set ref 159* 175 183 245 849 pvt_n_entries 000113 automatic fixed bin(17,0) dcl 71 set ref 158* 162 174 182 241 pvte based structure level 1 dcl 4-26 pvtep 002142 automatic pointer dcl 4-22 set ref 175* 178 183* 186 188 192 193 194 194 198 245* 248 790 791 828 pvtp 002136 automatic pointer dcl 3-9 set ref 146* 147 151 158 159 242 rcp_control_$ss_io_interchange 000234 constant entry external dcl 100 ref 623 627 rdtep 002122 automatic pointer dcl 377 set ref 383* 386 386 389* ready 002300 automatic bit(1) packed unaligned dcl 935 set ref 946* 955* 960 reasonable_time 000010 constant fixed bin(71,0) initial dcl 73 ref 440 rel builtin function dcl 75 ref 474 rpv 2(14) based bit(1) level 2 in structure "dte" packed packed unaligned dcl 1-35 in procedure "mdx" set ref 177* 790* 792 rpv 4(26) based bit(1) level 2 in structure "pvte" packed packed unaligned dcl 4-26 in procedure "mdx" ref 790 rpvx 3 based fixed bin(17,0) level 2 dcl 1-23 set ref 679 792* rtrim builtin function dcl 75 ref 194 194 855 855 save_dtep 002206 automatic pointer dcl 744 set ref 764* 767 sdtp 000010 internal static pointer initial dcl 61 set ref 152* 266 322 340 354 381 405 425 572 607 638 670 773 1057 spacep parameter pointer dcl 468 ref 466 475 stat_pvtp 000012 internal static pointer initial dcl 61 set ref 151* storage_system 4(19) based bit(1) level 2 in structure "l_pvte" packed packed unaligned dcl 846 in procedure "force_init_dte" ref 857 storage_system 2(11) based bit(1) level 2 in structure "dte" packed packed unaligned dcl 1-35 in procedure "mdx" set ref 186 188* 190 270 325 343 357 385 428 578 587 610 630* 641 788* storage_system 4(19) based bit(1) level 2 in structure "pvte" packed packed unaligned dcl 4-26 in procedure "mdx" ref 186 188 storage_system 2(11) based bit(1) level 2 in structure "l_dte" packed packed unaligned dcl 844 in procedure "force_init_dte" set ref 857* substr builtin function dcl 75 ref 623 sv_name 15 based char(2) level 2 in structure "l_pvte" dcl 846 in procedure "force_init_dte" ref 855 860 sv_name 4 based char(2) level 2 in structure "l_dte" dcl 844 in procedure "force_init_dte" set ref 860* sv_name 15 based char(2) level 2 in structure "pvte" dcl 4-26 in procedure "mdx" ref 194 sv_num 3 based fixed bin(17,0) level 2 in structure "l_dte" packed packed unaligned dcl 844 in procedure "force_init_dte" set ref 853* sv_num 11 based fixed bin(17,0) level 2 in structure "l_pvte" dcl 846 in procedure "force_init_dte" ref 853 sv_num 3 based fixed bin(17,0) level 2 in structure "dte" packed packed unaligned dcl 1-35 in procedure "mdx" ref 623 sys_info$access_class_ceiling 000240 external static bit(72) packed unaligned dcl 115 ref 831 time_registered 544 based fixed bin(71,0) level 2 dcl 5-18 ref 440 took parameter bit(1) packed unaligned dcl 263 set ref 259 269* 304* 312* tpvtx 000106 automatic fixed bin(17,0) dcl 66 set ref 404* 417 886* 902* true_if_found parameter bit(1) dcl 566 set ref 564 574* 578* unspec builtin function dcl 75 set ref 450* 826* 850* 910* used based bit(1) array level 3 in structure "dt" packed packed unaligned dcl 1-23 in procedure "mdx" set ref 445 504 527 548 used 1 based bit(1) level 2 in structure "alve" packed packed unaligned dcl 106 in procedure "mdx" set ref 1048* used 2(09) based bit(1) level 2 in structure "adte" packed packed unaligned dcl 105 in procedure "mdx" ref 751 760 1035 used 1 based bit(1) level 2 in structure "lve" packed packed unaligned dcl 1-58 in procedure "mdx" set ref 169* 214* 220 408 456* 673 712 824 833* used 12(09) based bit(1) array level 3 in structure "dt" packed packed unaligned dcl 1-23 in procedure "mdx" set ref 690 used 2(09) based bit(1) level 2 in structure "dte" packed packed unaligned dcl 1-35 in procedure "mdx" set ref 187* 190* 201 270 325 343 357 385 386 428 488 579 614 641 951 972* 978* 978* 987* 994* 1003 1005* 1011 used 4(18) based bit(1) level 2 in structure "pvte" packed packed unaligned dcl 4-26 in procedure "mdx" ref 178 248 vacate_pdirs based bit(1) array level 3 packed packed unaligned dcl 1-23 set ref 551* verify_label_ 000206 constant entry external dcl 89 ref 365 389 729 796 version 510 based fixed bin(17,0) level 2 in structure "label" dcl 5-18 in procedure "mdx" ref 439 version 4 based fixed bin(17,0) initial level 2 in structure "dt" dcl 1-23 in procedure "mdx" set ref 161 239* volume_registration_mgr_$check_volume_registration 000214 constant entry external dcl 92 ref 202 250 458 volume_registration_mgr_$find 000220 constant entry external dcl 94 ref 280 330 363 volume_registration_mgr_$get_lv_pvinfo 000216 constant entry external dcl 93 ref 942 volume_registration_mgr_$init 000210 constant entry external dcl 90 ref 153 volume_registration_mgr_$test 000212 constant entry external dcl 91 ref 1077 xec 000114 automatic fixed bin(35,0) dcl 72 set ref 137* 139 142* 144* 146* 148 202* 238* 250* 301* 302 303* 304 309* 310 609* 623* 627* 629 629* 630 631 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. CRASH internal static fixed bin(17,0) initial dcl 7-7 DEFAULT_HCPART_SIZE internal static fixed bin(17,0) initial dcl 6-54 DUMPER_BIT_MAP_ADDR internal static fixed bin(17,0) initial dcl 6-54 JUST_LOG internal static fixed bin(17,0) initial dcl 7-7 MAX_VTOCE_PER_PACK internal static fixed bin(17,0) initial dcl 6-54 PAGE_SIZE internal static fixed bin(17,0) initial dcl 6-67 SECTORS_PER_RECORD internal static fixed bin(17,0) initial array dcl 6-74 SECTORS_PER_VTOCE internal static fixed bin(17,0) initial array dcl 6-70 SYSERR_COVERT_CHANNEL internal static fixed bin(17,0) initial dcl 7-7 SYSERR_CRASH_SYSTEM internal static fixed bin(17,0) initial dcl 7-7 SYSERR_LOG_OR_DISCARD internal static fixed bin(17,0) initial dcl 7-7 SYSERR_LOG_OR_PRINT internal static fixed bin(17,0) initial dcl 7-7 SYSERR_PRINT_ON_CONSOLE internal static fixed bin(17,0) initial dcl 7-7 SYSERR_PRINT_WITH_ALARM internal static fixed bin(17,0) initial dcl 7-7 SYSERR_RING1_ERROR internal static fixed bin(17,0) initial dcl 7-7 SYSERR_SUCCESSFUL_ACCESS internal static fixed bin(17,0) initial dcl 7-7 SYSERR_SYSTEM_ERROR internal static fixed bin(17,0) initial dcl 7-7 SYSERR_TERMINATE_PROCESS internal static fixed bin(17,0) initial dcl 7-7 SYSERR_UNSUCCESSFUL_ACCESS internal static fixed bin(17,0) initial dcl 7-7 TERMINATE_PROCESS internal static fixed bin(17,0) initial dcl 7-7 VOLMAP_ADDR internal static fixed bin(17,0) initial dcl 6-54 VOLMAP_ASYNC_IDLE internal static fixed bin(17,0) initial dcl 4-113 VOLMAP_ASYNC_READ internal static fixed bin(17,0) initial dcl 4-113 VOLMAP_ASYNC_WRITE internal static fixed bin(17,0) initial dcl 4-113 VTOCES_PER_RECORD internal static fixed bin(17,0) initial array dcl 6-72 VTOCE_SIZE internal static fixed bin(17,0) initial dcl 6-68 VTOC_MAP_ADDR internal static fixed bin(17,0) initial dcl 6-54 VTOC_ORIGIN internal static fixed bin(17,0) initial dcl 6-54 lvt based structure level 1 dcl 2-10 lvt$ external static fixed bin(17,0) dcl 2-6 lvtep automatic pointer dcl 2-8 lvtp automatic pointer dcl 2-7 pvt$ external static fixed bin(17,0) dcl 3-9 pvt$array external static fixed bin(17,0) dcl 4-18 pvt$max_n_entries external static fixed bin(17,0) dcl 4-19 NAMES DECLARED BY EXPLICIT CONTEXT. add_del 003461 constant entry external dcl 564 assert 001550 constant entry external dcl 319 check_lv 002766 constant entry external dcl 496 check_lv_complete 005655 constant entry internal dcl 925 ref 301 309 413 check_pv 002702 constant entry external dcl 481 demount_lv 004263 constant entry external dcl 666 demount_pv 004162 constant entry external dcl 636 develop_lve_status 006316 constant entry internal dcl 1014 ref 973 989 develop_lve_status_anon 006336 constant entry internal dcl 1027 ref 715 estab_lv 001036 constant label dcl 210 ref 218 fail 001272 constant label dcl 271 ref 325 343 357 385 386 408 428 688 694 695 702 force_init_dte 005231 constant entry internal dcl 839 ref 207 247 814 forget 001667 constant entry external dcl 337 forgetter 004523 constant entry external dcl 772 ref 756 762 found_exit 003101 constant label dcl 506 ref 491 get_it_known 004616 constant entry internal dcl 722 ref 285 885 get_local_dtp 006441 constant entry internal dcl 1055 ref 472 483 500 524 545 hold_status 006265 constant entry internal dcl 1010 ref 971 init 000160 constant entry external dcl 131 join 006342 constant label dcl 1029 ref 1025 make_assumed 006054 constant entry internal dcl 976 ref 210 331 887 make_blank 006037 constant entry internal dcl 969 ref 332 344 392 588 618 766 775 make_demounted 006115 constant entry internal dcl 984 ref 282 286 660 710 make_known 006133 constant entry internal dcl 992 ref 367 460 731 make_root_lve 005161 constant entry internal dcl 821 ref 795 make_root_pve 005015 constant entry internal dcl 779 ref 178 249 make_used 006172 constant entry internal dcl 1000 ref 298 801 905 mdx 000145 constant entry external dcl 23 mhv 002211 constant entry external dcl 401 read_disk_table 002632 constant entry external dcl 466 reregister 002324 constant entry external dcl 422 rlvolcheck 002102 constant entry external dcl 374 set_lv_pdir_bit 003140 constant entry external dcl 519 set_vacate_pdirs_bit 003301 constant entry external dcl 542 skip_lv 001105 constant label dcl 225 ref 200 ss_io_reconfig 003713 constant entry external dcl 600 suggest_lv 001054 constant label dcl 214 ref 221 take 001224 constant entry external dcl 259 term_exit 003110 constant label dcl 509 ref 476 test 004551 constant entry external dcl 1072 verify_drive_vanish_pve 004655 constant entry internal dcl 739 ref 275 326 359 430 verify_whole_lv 005376 constant entry internal dcl 866 ref 303 311 415 volsalv 001731 constant entry external dcl 349 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 7474 7762 6650 7504 Length 10436 6650 266 437 624 144 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME mdx 1522 external procedure is an external procedure. get_it_known internal procedure shares stack frame of external procedure mdx. verify_drive_vanish_pve internal procedure shares stack frame of external procedure mdx. make_root_pve internal procedure shares stack frame of external procedure mdx. make_root_lve internal procedure shares stack frame of external procedure mdx. force_init_dte internal procedure shares stack frame of external procedure mdx. verify_whole_lv internal procedure shares stack frame of external procedure mdx. check_lv_complete internal procedure shares stack frame of external procedure mdx. make_blank internal procedure shares stack frame of external procedure mdx. make_assumed internal procedure shares stack frame of external procedure mdx. make_demounted internal procedure shares stack frame of external procedure mdx. make_known internal procedure shares stack frame of external procedure mdx. make_used internal procedure shares stack frame of external procedure mdx. hold_status internal procedure shares stack frame of external procedure mdx. develop_lve_status internal procedure shares stack frame of external procedure mdx. get_local_dtp internal procedure shares stack frame of external procedure mdx. STORAGE FOR INTERNAL STATIC VARIABLES. LOC IDENTIFIER BLOCK NAME 000010 sdtp mdx 000012 stat_pvtp mdx 000014 ROOT mdx 000066 SL1 mdx 000140 aa mdx STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME mdx 000100 found mdx 000101 must_term mdx 000102 i mdx 000104 dvn mdx 000106 tpvtx mdx 000107 lvx mdx 000110 prev_state mdx 000111 oldlev mdx 000112 num_pic mdx 000113 pvt_n_entries mdx 000114 xec mdx 000116 label_buffer mdx 002116 aux_dtep mdx 002120 aux_lvep mdx 002122 rdtep mdx 002124 move_len mdx 002125 adding_drive mdx 002126 from_ss mdx 002130 dtp mdx 002132 dtep mdx 002134 lvep mdx 002136 pvtp mdx 002140 pvt_arrayp mdx 002142 pvtep mdx 002144 labelp mdx 002204 bpk verify_drive_vanish_pve 002206 save_dtep verify_drive_vanish_pve 002210 k verify_drive_vanish_pve 002220 mrpve_pvtx make_root_pve 002236 l_dtep force_init_dte 002240 l_pvtep force_init_dte 002250 i verify_whole_lv 002251 local_lvte verify_whole_lv 002272 pvap check_lv_complete 002274 npv check_lv_complete 002275 i check_lv_complete 002276 j check_lv_complete 002277 found check_lv_complete 002300 ready check_lv_complete 002356 ii develop_lve_status 002357 l_lvx develop_lve_status 002360 hold develop_lve_status THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_e_as alloc_char_temp call_ext_in call_ext_out_desc call_ext_out return_mac shorten_stack ext_entry ext_entry_desc THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. admin_gate_$ioi_add_device admin_gate_$ioi_delete_device admin_gate_$syserr cu_$level_get cu_$level_set hcs_$add_acl_entries hcs_$initiate hcs_$make_seg hcs_$terminate_noname hcs_$truncate_seg initializer_gate_$accept_fs_disk initializer_gate_$add_pv_to_lv initializer_gate_$define_lv initializer_gate_$delete_lv initializer_gate_$demount_pv initializer_gate_$read_disk initializer_gate_$set_disk_table_loc initializer_gate_$ss_io_reconfigure initializer_gate_$vol_salv rcp_control_$ss_io_interchange verify_label_ volume_registration_mgr_$check_volume_registration volume_registration_mgr_$find volume_registration_mgr_$get_lv_pvinfo volume_registration_mgr_$init volume_registration_mgr_$test THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$action_not_performed error_table_$argerr error_table_$bad_label error_table_$fsdisk_not_salv error_table_$invalid_state error_table_$io_still_assnd error_table_$logical_volume_not_defined error_table_$mount_not_ready error_table_$no_label error_table_$private_volume sys_info$access_class_ceiling LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 60 000136 103 000137 23 000144 131 000153 135 000171 136 000172 137 000177 138 000242 139 000246 140 000250 142 000251 144 000312 146 000323 147 000371 148 000375 149 000377 151 000400 152 000403 153 000405 154 000413 158 000416 159 000420 161 000423 162 000431 164 000434 165 000443 166 000454 167 000456 168 000460 169 000462 170 000464 171 000466 172 000470 174 000472 175 000501 176 000505 177 000512 178 000514 179 000521 180 000523 182 000525 183 000535 184 000541 185 000546 186 000550 187 000561 188 000571 190 000576 192 000614 193 000630 194 000641 195 000707 196 000714 197 000726 198 000736 199 000750 200 000756 201 000760 202 000763 204 001000 206 001003 207 001033 208 001035 210 001036 211 001037 212 001042 213 001052 214 001054 215 001057 217 001070 218 001071 219 001074 220 001077 221 001104 225 001105 227 001107 228 001111 230 001112 231 001114 232 001116 235 001117 238 001121 239 001135 240 001140 241 001145 242 001147 243 001152 244 001153 245 001163 246 001167 247 001174 248 001176 249 001202 250 001203 253 001214 255 001216 259 001217 265 001245 266 001246 267 001251 268 001253 269 001257 270 001264 271 001272 272 001275 275 001276 276 001317 278 001321 279 001330 280 001333 281 001344 282 001346 283 001347 285 001350 286 001365 287 001366 290 001367 291 001405 292 001410 293 001421 294 001425 295 001441 297 001452 298 001454 299 001455 301 001471 302 001473 303 001475 304 001501 306 001511 308 001512 309 001514 310 001516 311 001524 312 001534 315 001543 319 001544 321 001571 322 001572 323 001575 324 001577 325 001603 326 001611 327 001633 329 001635 330 001644 331 001655 332 001661 333 001662 337 001663 339 001702 340 001703 341 001706 342 001710 343 001714 344 001722 345 001723 349 001724 353 001752 354 001753 355 001756 356 001760 357 001764 359 001772 360 002014 362 002016 363 002025 364 002036 365 002040 366 002055 367 002057 369 002060 370 002074 374 002075 380 002117 381 002121 382 002124 383 002130 385 002135 386 002146 389 002151 390 002165 392 002167 395 002170 397 002204 401 002205 403 002224 404 002225 405 002230 406 002233 408 002245 412 002267 413 002274 414 002302 415 002306 417 002316 418 002321 422 002322 424 002345 425 002346 426 002351 428 002356 430 002364 431 002406 433 002410 434 002412 435 002427 437 002431 438 002434 439 002441 440 002444 441 002450 442 002452 443 002461 444 002465 445 002467 445 002525 446 002527 447 002535 448 002552 449 002555 450 002556 451 002561 452 002565 453 002567 454 002573 455 002577 456 002607 458 002611 459 002622 460 002624 461 002625 466 002626 472 002643 473 002650 474 002651 475 002666 476 002675 481 002676 483 002721 485 002726 486 002727 487 002741 488 002745 490 002761 491 002763 496 002764 500 003005 502 003012 503 003013 504 003025 505 003077 506 003101 508 003107 509 003110 511 003112 512 003121 514 003133 519 003134 523 003157 524 003160 525 003165 526 003166 527 003201 528 003232 529 003234 531 003264 533 003267 534 003271 536 003276 542 003277 544 003320 545 003321 546 003326 547 003327 548 003341 549 003372 550 003374 551 003414 552 003423 553 003440 554 003441 556 003444 557 003446 559 003453 564 003454 571 003500 572 003504 573 003507 574 003510 575 003511 576 003521 577 003525 578 003534 579 003540 580 003547 582 003560 584 003603 585 003623 586 003625 587 003634 588 003637 589 003640 591 003703 595 003704 596 003706 600 003707 605 003726 606 003734 607 003736 608 003741 609 003745 610 003746 611 003756 612 003760 614 003761 615 003766 616 003770 618 003771 619 003772 620 004001 621 004012 623 004016 626 004063 627 004064 628 004117 629 004126 630 004143 631 004155 632 004157 636 004160 638 004175 639 004200 641 004205 642 004211 643 004213 646 004214 647 004220 648 004224 649 004226 651 004227 653 004237 654 004242 655 004244 658 004245 660 004255 662 004260 666 004261 670 004274 671 004277 672 004302 673 004313 674 004316 675 004324 676 004326 679 004327 681 004350 682 004352 685 004353 687 004354 688 004357 689 004362 690 004364 690 004406 691 004410 692 004416 693 004417 694 004421 695 004424 696 004426 697 004436 698 004443 699 004446 700 004450 701 004451 702 004453 703 004456 706 004460 708 004462 709 004471 710 004475 711 004506 712 004510 714 004514 715 004516 717 004517 772 004520 773 004534 774 004537 775 004544 776 004545 1072 004546 1076 004565 1077 004603 1078 004615 722 004616 729 004620 730 004636 731 004641 732 004642 734 004650 739 004655 747 004666 748 004675 749 004701 751 004711 753 004724 754 004727 756 004730 758 004743 759 004745 760 004751 761 004764 762 004770 763 005001 764 005004 765 005006 766 005011 767 005012 769 005014 779 005015 788 005016 789 005021 790 005023 791 005031 792 005033 793 005041 794 005045 795 005047 796 005050 800 005065 801 005070 803 005071 808 005101 809 005105 810 005111 812 005121 814 005154 817 005156 818 005160 821 005161 823 005162 824 005167 825 005176 826 005200 827 005203 828 005205 829 005210 830 005213 831 005216 833 005224 834 005226 836 005230 839 005231 848 005233 849 005240 850 005245 851 005250 852 005264 853 005271 854 005274 855 005306 856 005354 857 005357 858 005364 859 005371 860 005373 861 005375 866 005376 881 005400 882 005412 883 005421 884 005425 885 005436 886 005453 887 005455 888 005456 891 005457 892 005461 893 005471 894 005475 895 005506 896 005517 897 005524 898 005540 901 005552 902 005555 903 005557 905 005560 906 005561 908 005602 909 005604 910 005610 911 005613 912 005615 913 005620 914 005623 915 005630 916 005644 917 005647 918 005652 922 005654 925 005655 941 005657 942 005672 943 005730 945 005734 946 005735 947 005737 948 005752 949 005753 950 005765 951 005771 953 006010 954 006013 955 006015 957 006016 958 006020 959 006025 960 006027 962 006036 969 006037 971 006040 972 006041 973 006052 974 006053 976 006054 978 006055 979 006066 980 006070 982 006114 984 006115 986 006116 987 006120 988 006127 989 006131 990 006132 992 006133 994 006134 995 006143 996 006145 998 006171 1000 006172 1002 006173 1003 006202 1005 006235 1006 006240 1008 006264 1010 006265 1011 006266 1012 006311 1018 006313 1014 006316 1020 006320 1021 006322 1022 006327 1024 006330 1025 006335 1027 006336 1028 006340 1029 006342 1030 006347 1031 006357 1032 006367 1033 006373 1034 006400 1035 006406 1036 006411 1037 006414 1040 006415 1042 006417 1043 006421 1044 006424 1046 006426 1047 006433 1048 006435 1049 006437 1052 006440 1055 006441 1057 006443 1058 006446 1059 006447 1060 006453 1061 006461 1062 006472 1063 006542 1064 006546 1065 006555 1067 006563 1069 006565 ----------------------------------------------------------- Historical Background This edition of the Multics software materials and documentation is provided and donated to Massachusetts Institute of Technology by Group BULL including BULL HN Information Systems Inc. as a contribution to computer science knowledge. This donation is made also to give evidence of the common contributions of Massachusetts Institute of Technology, Bell Laboratories, General Electric, Honeywell Information Systems Inc., Honeywell BULL Inc., Groupe BULL and BULL HN Information Systems Inc. to the development of this operating system. Multics development was initiated by Massachusetts Institute of Technology Project MAC (1963-1970), renamed the MIT Laboratory for Computer Science and Artificial Intelligence in the mid 1970s, under the leadership of Professor Fernando Jose Corbato. Users consider that Multics provided the best software architecture for managing computer hardware properly and for executing programs. Many subsequent operating systems incorporated Multics principles. Multics was distributed in 1975 to 2000 by Group Bull in Europe , and in the U.S. by Bull HN Information Systems Inc., as successor in interest by change in name only to Honeywell Bull Inc. and Honeywell Information Systems Inc. . ----------------------------------------------------------- Permission to use, copy, modify, and distribute these programs and their documentation for any purpose and without fee is hereby granted,provided that the below copyright notice and historical background appear in all copies and that both the copyright notice and historical background and this permission notice appear in supporting documentation, and that the names of MIT, HIS, BULL or BULL HN not be used in advertising or publicity pertaining to distribution of the programs without specific prior written permission. Copyright 1972 by Massachusetts Institute of Technology and Honeywell Information Systems Inc. Copyright 2006 by BULL HN Information Systems Inc. Copyright 2006 by Bull SAS All Rights Reserved