COMPILATION LISTING OF SEGMENT vtoc_man 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 0953.1 mst Sat Options: optimize list 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Bull Inc., 1987 * 4* * * 5* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 6* * * 7* * Copyright (c) 1972 by Massachusetts Institute of * 8* * Technology and Honeywell Information Systems, Inc. * 9* * * 10* *********************************************************** */ 11 12 13 /* 14* vtoc_man$get_vtoce 15* $read_ahead_vtoce 16* $put_vtoce 17* $alloc_and_put_vtoce 18* $free_vtoce 19* $free_vtoce_for_scavenge 20* $cleanup_pv 21* $stabilize 22* $crawlout 23* 24* The specification of each function is given with the entry point declaration. 25* 26* Modified by : 27* 08/14/75 Andre Bensoussan - Written for the new storage system. 28* 06/02/76 by Bernard Greenberg for non-fatal write errors (hot buffers). 29* 06/07/76 by Bernard Greenberg for vtoc_man$stabilize. 30* 09/17/76 by R. Bratt to add per-process meters. 31* 03/12/80 by J. A. Bush to fix "out of buffers" bug 32* 04/16/81 by J. Bongiovanni to recover on crawlout with vtoc buffer lock , 33* bug in cleanup_pv (vtoce 4 trashing), validate vtoc index 34* 03/08/82 by J. Bongiovanni for new PVTE and stocks 35* 07/07/82 by J. Bongiovanni - rewritten for new buffer strategy 36* (almost always read entire VTOCE, do write in 1 I/O). 37* 07/26/82 by J. Bongiovanni to add free_vtoce_for_scavenge and 38* read_ahead_vtoce 39* 11/06/82 by J. Bongiovanni to add pseudo-clock for scavenger race 40* 09/20/83 by E. N. Kittlitz to implement the former's last request: clear pad when writing 41* 01/17/84 by Jeffrey I. Schiller to requeue I/O for "hot" buffers. 42* */ 43 44 45 /****^ HISTORY COMMENTS: 46* 1) change(86-01-16,Fawcett), approve(86-04-11,MCR7383), 47* audit(86-06-02,GDixon), install(86-07-17,MR12.0-1097): 48* Add support for 512_WORD_IO devices, (one vtoce per sector), and add 49* software RAR. 50* END HISTORY COMMENTS */ 51 52 53 /* format: style3 */ 54 vtoc_man$get_vtoce: 55 proc (Pvid, Pvtx, Vtocx, Parts, Copy_Vtocep, Code); 56 57 /* Parameter */ 58 59 dcl Copy_Vtocep ptr; /* Pointer to copy of VTOCE to be written or read into */ 60 dcl Code fixed bin (35); /* Status code */ 61 dcl Parts bit (3); /* Mask of parts of interest */ 62 dcl Pvid bit (36) aligned; /* Physical Volume ID */ 63 dcl Pvtx fixed bin; /* PVTE index */ 64 dcl Vtocx fixed bin; /* VTOCE index on volume */ 65 66 /* Automatic */ 67 68 dcl bufx fixed bin; 69 dcl code fixed bin (35); 70 dcl dev_type fixed bin; 71 dcl hot_buffer_tried bit (1); 72 dcl 1 local_vtoce_buffer 73 aligned like vtoce_buffer; 74 dcl old_pseudo_clock fixed bin (35); 75 dcl p99 pic "99"; 76 dcl parts bit (3) aligned; 77 dcl parts_to_write bit (3) aligned; 78 dcl pvid bit (36) aligned; 79 dcl pvtx fixed bin; 80 dcl return_vtocx fixed bin; 81 dcl sector_read_required 82 bit (1) aligned; 83 dcl vtocx fixed bin; 84 dcl wait_event bit (36) aligned; 85 86 /* Static */ 87 88 dcl ALL_PARTS bit (3) aligned int static options (constant) init ("111"b); 89 dcl CORE_OFFSET (0:7) fixed bin int static options (constant) init (0, 128, 64, 64, 0, 0, 0, 0); 90 dcl MAX_PSEUDO_CLOCK fixed bin (35) int static options (constant) init (1000000); 91 dcl MAX_STEPS fixed bin int static options (constant) init (10000); 92 dcl SECTOR_OFFSET (0:7) fixed bin int static options (constant) init (0, 2, 1, 1, 0, 0, 0, 0); 93 dcl SECTORS_TO_WRITE (0:7) fixed bin int static options (constant) init (0, 1, 1, 2, 1, 0, 2, 3); 94 dcl VALID_WRITE (0:7) bit (1) aligned int static options (constant) 95 init ("0"b, "1"b, "1"b, "1"b, "1"b, "0"b, "1"b, "1"b); 96 97 /* Based */ 98 99 dcl 1 Copy_Vtoce aligned like vtoce_buffer based (Copy_Vtocep); 100 101 /* External */ 102 103 dcl error_table_$invalid_pvtx 104 fixed bin (35) external; 105 dcl error_table_$invalid_vtocx 106 fixed bin (35) external; 107 dcl error_table_$pvid_not_found 108 fixed bin (35) external; 109 dcl error_table_$vtoc_io_err 110 fixed bin (35) external; 111 dcl error_table_$vtoce_free 112 fixed bin (35) external; 113 dcl pds$processid bit (36) aligned external; 114 dcl pds$process_group_id 115 char (32) aligned external; 116 dcl pds$vtoc_reads fixed bin (35) external; 117 dcl pds$vtoc_writes fixed bin (35) external; 118 dcl pvt$n_entries fixed bin external; 119 120 /* Entry */ 121 122 dcl dctl$read_sectors entry (fixed bin, fixed bin (24), bit (18) aligned, fixed bin, fixed bin); 123 dcl dctl$write_sectors entry (fixed bin, fixed bin (24), bit (18) aligned, fixed bin, fixed bin); 124 dcl disk_run entry; 125 dcl lock$lock_fast entry (ptr); 126 dcl lock$unlock_fast entry (ptr); 127 dcl pxss$addevent entry (bit (36) aligned); 128 dcl pxss$delevent entry (bit (36) aligned); 129 dcl pxss$wait entry; 130 dcl syserr entry options (variable); 131 dcl vtoc_search$hash_in entry (ptr); 132 dcl vtoc_search$hash_out 133 entry (ptr); 134 dcl vtoc_search$search entry (fixed bin, fixed bin, ptr); 135 dcl vtoce_stock_man$check_in_use 136 entry (ptr, fixed bin, fixed bin (35)); 137 dcl vtoce_stock_man$get_free_vtoce 138 entry (ptr, fixed bin); 139 dcl vtoce_stock_man$return_if_not_free 140 entry (ptr, fixed bin, fixed bin (35)); 141 dcl vtoce_stock_man$return_free_vtoce 142 entry (ptr, fixed bin); 143 144 /* Builtin */ 145 146 dcl addr builtin; 147 dcl bin builtin; 148 dcl bit builtin; 149 dcl convert builtin; 150 dcl divide builtin; 151 dcl mod builtin; 152 dcl null builtin; 153 dcl ptr builtin; 154 dcl rel builtin; 155 dcl size builtin; 156 dcl substr builtin; 157 dcl unspec builtin; 158 159 /* GET_VTOCE 160* 161* FUNCTION - This procedure copies the vtoc entry defined by the 162* input arguments (pvtx,vtocx) into the caller's area pointed to by 163* (copy_vtocep). The argument (parts) specifies what portions of the 164* vtoc entry is to be copied. The 64-word portion number i of the vtoce 165* is copied into the user area only if bit number i is ON in the 166* argument parts. Three error code may be returned: pvid_not_found, 167* vtoc_io_err, or invalid_vtocx. */ 168 169 pvid = Pvid; 170 pvtx = Pvtx; 171 vtocx = Vtocx; 172 parts = Parts; 173 Code = 0; 174 175 call SETUP_LOCK (pvtx, code); 176 if code ^= 0 177 then goto GET_VTOCE_RETURNS; 178 179 call VALIDATE_VTOCX (vtocx, code); 180 if code ^= 0 181 then goto GET_VTOCE_RETURNS; 182 183 184 call READ (pvtx, vtocx, parts, vtoc_buf_descp, vtoc_bufp, sector_read_required, code); 185 if code ^= 0 186 then goto GET_VTOCE_RETURNS; 187 188 unspec (local_vtoce_buffer) = unspec (vtoce_buffer); 189 190 GET_VTOCE_RETURNS: 191 call UNLOCK; 192 vtoc_buffer.meters.call_get = vtoc_buffer.meters.call_get + 1; 193 194 if code = 0 195 then call COPY_PARTS (parts, addr (local_vtoce_buffer), Copy_Vtocep); 196 197 Code = code; 198 199 return; 200 201 /* READ_AHEAD_VTOCE - 202* 203* FUNCTION - This procedure initiates a read to a specified VTOC entry, 204* unless the VTOC entry is already in a VTOC buffer. It is similar to 205* get_vtoce, except that it does not wait, and it returns no data 206* to the caller. It is intended for routines which scan the VTOC 207* sequentially (or in any predetermined order), to overlap VTOC I/O 208* with processing. Three error codes may be returned: pvid_not_found, 209* vtoc_io_err, or invalid_vtocx. */ 210 211 read_ahead_vtoce: 212 entry (Pvid, Pvtx, Vtocx, Parts, Code); 213 214 pvid = Pvid; 215 pvtx = Pvtx; 216 vtocx = Vtocx; 217 parts = Parts; 218 Code = 0; 219 220 call SETUP_LOCK (pvtx, code); 221 if code ^= 0 222 then goto READ_AHEAD_VTOCE_RETURNS; 223 224 call VALIDATE_VTOCX (vtocx, code); 225 if code ^= 0 226 then goto READ_AHEAD_VTOCE_RETURNS; 227 228 call READ_AHEAD (pvtx, vtocx, parts, vtoc_buf_descp, vtoc_bufp, sector_read_required, code); 229 230 READ_AHEAD_VTOCE_RETURNS: 231 call UNLOCK; 232 233 234 Code = code; 235 236 return; 237 238 239 240 /* PUT_VTOCE - 241* 242* FUNCTION - This procedure copies the vtoc entry from the user's 243* area located at (copy_vtocep) into the real vtoc entry defined by the 244* (pvtx,vtocx) pair. The argument (parts) specifies what portions of the 245* user's area is to be copied into the real vtoc entry. The 64-word 246* portion number i of the user's vtoce is copied into the real vtoce 247* only if bit number i is ON in the input argument parts. Three error 248* codes may be returned: pvid_not_found, vtoc_io_err, or invalid_vtocx. */ 249 250 put_vtoce: 251 entry (Pvid, Pvtx, Vtocx, Parts, Copy_Vtocep, Code); 252 253 pvid = Pvid; 254 pvtx = Pvtx; 255 vtocx = Vtocx; 256 parts = Parts; 257 Code = 0; 258 sector_read_required = "0"b; 259 parts_to_write = parts; 260 call COPY_PARTS (parts, Copy_Vtocep, addr (local_vtoce_buffer)); 261 /* Avoid segfault with buffers locked */ 262 263 call SETUP_LOCK (pvtx, code); 264 if code ^= 0 265 then goto PUT_VTOCE_RETURNS; 266 267 call VALIDATE_VTOCX (vtocx, code); 268 if code ^= 0 269 then goto PUT_VTOCE_RETURNS; 270 271 vtoc_buffer.unsafe_pvtx = pvtx; /* Update in progress */ 272 if (SECTORS_PER_VTOCE (pvte.device_type) = 1) & (parts ^= ALL_PARTS) 273 then do; /* 512_word sector device and not all parts */ 274 call READ (pvtx, vtocx, ALL_PARTS, vtoc_buf_descp, vtoc_bufp, sector_read_required, code); 275 if code ^= 0 276 then goto PUT_VTOCE_RETURNS; 277 parts_to_write = ALL_PARTS; 278 end; 279 280 else call GET_BUFFER (pvtx, vtocx, vtoc_buf_descp, vtoc_bufp, code); 281 /* Get a buffer, wait until not out-of-service */ 282 if code ^= 0 283 then goto PUT_VTOCE_RETURNS; 284 call CLEAR_PAD (addr (local_vtoce_buffer), parts);/* No dirty bits */ 285 call COPY_PARTS (parts, addr (local_vtoce_buffer), vtoc_bufp); 286 /* Update the buffer */ 287 288 call WRITE (parts_to_write, vtoc_buf_descp); /* Write it out */ 289 if sector_read_required 290 then vtoc_buffer.meters.soft_rar = vtoc_buffer.meters.soft_rar + 1; 291 PUT_VTOCE_RETURNS: 292 vtoc_buffer.unsafe_pvtx = 0; 293 call UNLOCK; 294 vtoc_buffer.meters.call_put = vtoc_buffer.meters.call_put + 1; 295 Code = code; 296 return; 297 298 /* ALLOC_AND_PUT_VTOCE - 299* 300* FUNCTION - This procedure removes a vtoc entry from the free pool 301* for the physical volume defined by (pvtx), initializes the allocated 302* VTOC entry with the data for the segment being created and returns the 303* VTOC index of that entry. If there is no more free VTOC entry in the 304* specified physical volume, it returns the value (-1). Three error code 305* may be returned: pvid_not_found, vtoc_io_err, or invalid_vtocx. Whenever 306* a non zero code is returned, the returned vtoc index is (-1). */ 307 308 alloc_and_put_vtoce: 309 entry (Pvid, Pvtx, Copy_Vtocep, Code) returns (fixed bin (17)); 310 311 pvid = Pvid; 312 pvtx = Pvtx; 313 Code = 0; 314 return_vtocx = -1; 315 316 unspec (local_vtoce_buffer) = unspec (Copy_Vtoce);/* Avoid segfaults with buffers locked */ 317 318 call SETUP_LOCK (pvtx, code); 319 if code ^= 0 320 then goto ALLOC_PUT_RETURNS; 321 322 RETRY_ALLOC: 323 old_pseudo_clock = vtoc_buffer.scavenger_free_p_clock; 324 325 call vtoce_stock_man$get_free_vtoce (pvtep, vtocx); 326 if vtocx = -1 327 then goto ALLOC_PUT_RETURNS; /* None left */ 328 329 call VALIDATE_VTOCX (vtocx, code); /* Make sure a valid index */ 330 if code ^= 0 331 then do; 332 call SET_VOL_TROUBLE (pvtep, vtocx, "Invalid free"); 333 goto RETRY_ALLOC; /* Might win */ 334 end; 335 336 call READ (pvtx, vtocx, ALL_PARTS, vtoc_buf_descp, vtoc_bufp, sector_read_required, code); 337 if code ^= 0 338 then goto ALLOC_PUT_RETURNS; 339 vtocep = vtoc_bufp; 340 if vtoce.uid ^= ""b 341 then do; 342 call SET_VOL_TROUBLE (pvtep, vtocx, "UID ^= 0 in free VTOCE"); 343 goto RETRY_ALLOC; 344 end; 345 346 if vtoc_buffer.scavenger_free_p_clock ^= old_pseudo_clock 347 then do; /* Scavenger has freed a VTOCE - better make sure it isn't this one */ 348 vtoc_buffer.meters.scavenger_free_checks = vtoc_buffer.meters.scavenger_free_checks + 1; 349 call vtoce_stock_man$check_in_use (pvtep, vtocx, code); 350 if code ^= 0 351 then do; /* Lost race */ 352 vtoc_buffer.meters.scavenger_free_losses = vtoc_buffer.meters.scavenger_free_losses + 1; 353 goto RETRY_ALLOC; 354 end; 355 end; 356 357 vtoc_buffer.unsafe_pvtx = pvtx; /* Update in progress */ 358 359 call CLEAR_PAD (addr (local_vtoce_buffer), ALL_PARTS); 360 /* wash the naughty bits */ 361 unspec (vtoce_buffer) = unspec (local_vtoce_buffer); 362 call WRITE (ALL_PARTS, vtoc_buf_descp); 363 364 return_vtocx = vtocx; 365 366 ALLOC_PUT_RETURNS: 367 vtoc_buffer.unsafe_pvtx = 0; 368 call UNLOCK; 369 vtoc_buffer.meters.call_alloc = vtoc_buffer.meters.call_alloc + 1; 370 371 Code = code; 372 return (return_vtocx); 373 374 /* FREE_VTOCE - 375* 376* FUNCTION - This procedure zeros the vtoc entry defined by the input 377* arguments (pvtx,vtocx). Then it adds that vtoc entry in the free pool 378* for the physical volume defined by (pvtx). Three error codes may be 379* returned: pvid_not_found, vtoc_io_err, or invalid_vtocx. */ 380 381 free_vtoce: 382 entry (Pvid, Pvtx, Vtocx, Code); 383 384 pvid = Pvid; 385 pvtx = Pvtx; 386 vtocx = Vtocx; 387 Code = 0; 388 389 call SETUP_LOCK (pvtx, code); 390 if code ^= 0 391 then goto FREE_VTOCE_RETURNS; 392 393 call VALIDATE_VTOCX (vtocx, code); 394 if code ^= 0 395 then goto FREE_VTOCE_RETURNS; 396 397 call GET_BUFFER (pvtx, vtocx, vtoc_buf_descp, vtoc_bufp, code); 398 /* Get a buffer, wait for not out-of-service */ 399 if code ^= 0 400 then goto FREE_VTOCE_RETURNS; 401 402 unspec (vtoce_buffer.parts) = ""b; /* Mark it free - the whole thing */ 403 call WRITE (ALL_PARTS, vtoc_buf_descp); 404 405 call vtoce_stock_man$return_free_vtoce (pvtep, vtocx); 406 /* Return it to the stock */ 407 408 FREE_VTOCE_RETURNS: 409 call UNLOCK; 410 vtoc_buffer.meters.call_free = vtoc_buffer.meters.call_free + 1; 411 412 Code = code; 413 return; 414 415 /* FREE_VTOCE_FOR_SCAVENGE - 416* 417* FUNCTION - frees a VTOCE that the volume scavenger thinks is lost 418* (free but not in map). Under appropriate locks, it checks that the 419* VTOCE is still free. It calls a special entry in vtoce_stock_man 420* that frees it only if it is not already free. Four error codes may 421* be returned: pvid_not_found, vtoc_io_err, invalid_vtocx, or 422* vtoce_free. 423* 424* There is a race here, but it is safe. The VTOCE being freed could 425* be in allocation, with the allocating process waiting for the 426* read to complete. If we see the read completing before the 427* allocating process, we will think that the VTOCE is free and 428* mark it as such in the map. This is safe, since the VTOCE will 429* never be allocated with a non-zero UID. 430* 431* On the other hand, it is annoying, since it causes spurious volume 432* inconsistencies. The race is avoided by using a pseudo-clock, which 433* is incremented under the VTOC Buffer Lock each time we free a 434* VTOCE for the scavenger. VTOCE allocation checks the value of this 435* pseudo-clock when it is given a vtocx and after the VTOCE read 436* completes. If it has changed, it makes sure that the vtocx is 437* in-use. 438**/ 439 440 free_vtoce_for_scavenge: 441 entry (Pvid, Pvtx, Vtocx, Code); 442 443 444 pvid = Pvid; 445 pvtx = Pvtx; 446 vtocx = Vtocx; 447 Code = 0; 448 449 call SETUP_LOCK (pvtx, code); 450 if code ^= 0 451 then goto FREE_FOR_SCAVENGE_RETURNS; 452 453 call VALIDATE_VTOCX (vtocx, code); 454 if code ^= 0 455 then goto FREE_FOR_SCAVENGE_RETURNS; 456 457 call READ (pvtx, vtocx, ALL_PARTS, vtoc_buf_descp, vtoc_bufp, sector_read_required, code); 458 if code ^= 0 459 then goto FREE_FOR_SCAVENGE_RETURNS; 460 461 vtocep = vtoc_bufp; 462 if vtoce.uid ^= ""b 463 then do; 464 code = error_table_$vtoce_free; /* Someone else did it */ 465 goto FREE_FOR_SCAVENGE_RETURNS; 466 end; 467 468 unspec (vtoce) = ""b; 469 call WRITE (ALL_PARTS, vtoc_buf_descp); 470 471 call vtoce_stock_man$return_if_not_free (pvtep, vtocx, code); 472 473 vtoc_buffer.scavenger_free_p_clock = vtoc_buffer.scavenger_free_p_clock + 1; 474 if vtoc_buffer.scavenger_free_p_clock > MAX_PSEUDO_CLOCK 475 then vtoc_buffer.scavenger_free_p_clock = 0; 476 477 FREE_FOR_SCAVENGE_RETURNS: 478 call UNLOCK; 479 480 Code = code; 481 return; 482 483 484 485 /* AWAIT_VTOCE - 486* 487* FUNCTION - This procedure is called by programs which update vtoces 488* and subsequently deposit addresses. It awaits all pendant I/O on a sel- 489* ected vtoce, so that the addresses to be deposited will not be avail- 490* able for reassignment until it is known that they no longer appear in 491* the old vtoce. This is solely for unrecoverable disk failures. The error 492* codes which may be returned are pvid_not_found, vtoc_io_err, and invalid_vtocx. */ 493 494 await_vtoce: 495 entry (Pvid, Pvtx, Vtocx, Code); 496 497 pvid = Pvid; 498 pvtx = Pvtx; 499 vtocx = Vtocx; 500 Code = 0; 501 502 call SETUP_LOCK (pvtx, code); 503 if code ^= 0 504 then goto AWAIT_RETURNS; 505 506 call VALIDATE_VTOCX (vtocx, code); 507 if code ^= 0 508 then goto AWAIT_RETURNS; 509 510 RETRY_AWAIT: 511 call vtoc_search$search (pvtx, vtocx, vtoc_buf_descp); 512 /* See if the VTOCE still has a buffer */ 513 if vtoc_buf_descp = null () 514 then goto AWAIT_RETURNS; /* No - easy case */ 515 516 if vtoc_buf_desc.os 517 then do; 518 call WAIT (vtoc_buf_descp, code); /* Wait until not out-of-service */ 519 if code ^= 0 520 then goto AWAIT_RETURNS; /* Might have disappeared */ 521 goto RETRY_AWAIT; 522 end; 523 524 if vtoc_buf_desc.write_sw & vtoc_buf_desc.err /* Hot buffer */ 525 then code = error_table_$vtoc_io_err; 526 527 AWAIT_RETURNS: 528 call UNLOCK; 529 vtoc_buffer.meters.call_await = vtoc_buffer.meters.call_await + 1; 530 531 Code = code; 532 return; 533 534 /* CLEANUP_PV - 535* 536* FUNCTION - Guarantees that the physical volume supplied does not have 537* any portion of its VTOC in the vtoc_buffers. If it does, and nothing can be 538* done about it (hot buffer, hard I/O error), the volume inconsistency 539* count is increased. */ 540 541 cleanup_pv: 542 entry (Pvtx, Code); 543 544 pvid = ""b; 545 pvtx = Pvtx; 546 vtocx = -1; 547 Code = 0; 548 549 call SETUP_LOCK (pvtx, code); /* Will get non-zero code during demount */ 550 551 do bufx = 1 to vtoc_buffer.n_bufs; /* Requeue writes on hot buffers */ 552 vtoc_buf_descp = addr (vtoc_buf_desc_array (bufx)); 553 if vtoc_buf_desc.pvtx = pvtx & vtoc_buf_desc.used = "1"b /* This volume, Buffer in use */ 554 & vtoc_buf_desc.err & vtoc_buf_desc.write_sw & ^vtoc_buf_desc.os 555 /* Hot buffer */ 556 then call WRITE ((vtoc_buf_desc.parts_used), vtoc_buf_descp); 557 end; 558 559 do bufx = 1 to vtoc_buffer.n_bufs; /* Wait for all out-of-service */ 560 vtoc_buf_descp = addr (vtoc_buf_desc_array (bufx)); 561 do while (vtoc_buf_desc.pvtx = pvtx & vtoc_buf_desc.used /* This volume, Buffer in use */ 562 & vtoc_buf_desc.os); /* Out-of-service */ 563 call WAIT (vtoc_buf_descp, code); 564 end; 565 end; 566 567 code = 0; 568 do bufx = 1 to vtoc_buffer.n_bufs; /* Flush buffers, abandon hot buffers */ 569 vtoc_buf_descp = addr (vtoc_buf_desc_array (bufx)); 570 if vtoc_buf_desc.pvtx = pvtx & vtoc_buf_desc.used 571 /* This volume, Buffer in use */ 572 then do; 573 if vtoc_buf_desc.os 574 then call syserr (CRASH, "vtoc_man: Buffer out-of-service during cleanup"); 575 if vtoc_buf_desc.write_sw & vtoc_buf_desc.err 576 /* Hot buffer */ 577 then do; 578 call SET_VOL_TROUBLE (pvtep, (vtoc_buf_desc.vtocx), 579 "Hot buffer abandoned during cleanup"); 580 code = error_table_$vtoc_io_err; 581 end; 582 call FLUSH_BUFFER (vtoc_buf_descp); 583 end; 584 end; 585 586 call UNLOCK; 587 588 Code = code; 589 return; 590 591 /* STABILIZE - 592* 593* FUNCTION - This entry is called only during emergency shutdown. It 594* makes the vtoc_buffer consistent so that shutdown can succeed. This 595* process includes busting the lock, rethreading all buffers into 596* the hash table, abandoning in-progress reads, and setting in-progress 597* writes to "hot". */ 598 599 stabilize: 600 entry; 601 602 pvid = ""b; 603 pvtx = -1; 604 vtocx = -1; 605 606 vtoc_buffer_segp = addr (vtoc_buffer_seg$); 607 vtoc_buffer.lock.processid = ""b; /* Bust the lock */ 608 609 call SETUP_LOCK (pvtx, code); 610 611 call RETHREAD; 612 613 do bufx = 1 to vtoc_buffer.n_bufs; 614 vtoc_buf_descp = addr (vtoc_buf_desc_array (bufx)); 615 if vtoc_buf_desc.used & vtoc_buf_desc.os /* Buffer in use, I/O in progress */ 616 then if vtoc_buf_desc.write_sw 617 then do; /* Write */ 618 vtoc_buf_desc.err = "1"b; /* Make hot */ 619 vtoc_buf_desc.os = "0"b; 620 end; 621 else call FLUSH_BUFFER (vtoc_buf_descp); 622 end; 623 624 call UNLOCK; 625 626 return; 627 628 /* CRAWLOUT - 629* 630* FUNCTION - This entry is called only by verify_lock when it has 631* found the vtoc buffer lock held by the process. It checks for 632* inconsistent buffer states and corrects them (specifically, 633* out-of-service but no I/O queued). Before doing this, it waits 634* for the associated event, to cover the case where the I/O 635* was queued successfully, but the crawlout occurred afterwards. 636* If the I/O was not queued successfully, the wait will end 637* via notify-time-out. If a physical volume is 638* potentially inconsistent ("unsafe"), the volume inconsistency 639* count is increased. Note that the vtoc buffer lock is left locked 640* on exit - verify_lock busts it for us. */ 641 642 crawlout: 643 entry; 644 645 646 vtoc_buffer_segp = addr (vtoc_buffer_seg$); 647 vtoc_buf_desc_arrayp = ptr (vtoc_buffer_segp, vtoc_buffer.buf_desc_offset); 648 vtoc_buf_arrayp = ptr (vtoc_buffer_segp, vtoc_buffer.buf_offset); 649 pvt_arrayp = addr (pvt$array); 650 651 if vtoc_buffer.lock.processid ^= pds$processid 652 then return; /* Invalid call */ 653 654 call RETHREAD; /* May be inconsistent */ 655 656 if vtoc_buffer.unsafe_pvtx ^= 0 657 then do; /* Update in progress */ 658 pvtep = addr (pvt_array (vtoc_buffer.unsafe_pvtx)); 659 call SET_VOL_TROUBLE (pvtep, -1, "Update in progress on crawlout by " || pds$process_group_id); 660 end; 661 662 do bufx = 1 to vtoc_buffer.n_bufs; /* Look for inconsistent buffers */ 663 vtoc_buf_descp = addr (vtoc_buf_desc_array (bufx)); 664 if vtoc_buf_desc.used & vtoc_buf_desc.os & ^vtoc_buf_desc.ioq 665 /* buffer in use, out-of-service, not queued */ 666 then do; 667 pvtx = vtoc_buf_desc.pvtx; 668 vtocx = vtoc_buf_desc.vtocx; 669 wait_event = bit (bin (vtoc_buffer.wait_event_constant + vtoc_buf_desc.wait_index, 36), 36); 670 call pxss$addevent (wait_event); 671 call lock$unlock_fast (addr (vtoc_buffer.lock)); 672 call pxss$wait; /* Wait 1 NTO interval */ 673 call lock$lock_fast (addr (vtoc_buffer.lock)); 674 if vtoc_buf_desc.used & vtoc_buf_desc.os 675 & ^vtoc_buf_desc.ioq /* Buffer in use, out-of-service, not queued */ 676 & vtoc_buf_desc.pvtx = pvtx & vtoc_buf_desc.vtocx = vtocx 677 /* Still the same one */ 678 then do; 679 pvtep = addr (pvt_array (pvtx)); 680 if vtoc_buf_desc.write_sw 681 then do; /* Write */ 682 call syserr (LOG, 683 "vtoc_man: write I/O recovered on crawlout by ^a for ^a_^a^a vtocx ^o", 684 pds$process_group_id, pvte.devname, 685 convert (p99, pvte.logical_area_number), pvte.sv_name, vtocx); 686 vtoc_buf_desc.os = "0"b; 687 call WRITE ((vtoc_buf_desc.parts_used), vtoc_buf_descp); 688 end; 689 else do; /* Read */ 690 call syserr (LOG, 691 "vtoc_man: read reset on crawlout by ^a for ^a_^a^a vtocx ^o", 692 pds$process_group_id, pvte.devname, 693 convert (p99, pvte.logical_area_number), pvte.sv_name, vtocx); 694 call FLUSH_BUFFER (vtoc_buf_descp); 695 end; 696 end; 697 end; 698 end; 699 700 701 return; 702 703 /* CLEAR_PAD - clears pad fields in the vtoce prior to copying to buffer for write. */ 704 705 CLEAR_PAD: 706 proc (Clear_ptr, Parts); 707 708 dcl Clear_ptr ptr; 709 dcl Parts bit (3) aligned; 710 711 dcl 1 Clear_vtoce aligned like vtoce based (Clear_ptr); 712 713 if (Parts & "100"b) 714 then do; 715 Clear_vtoce.pad_free_vtoce_chain = ""b; 716 Clear_vtoce.pad2 = ""b; 717 Clear_vtoce.pad3 = ""b; 718 Clear_vtoce.pad4 = ""b; 719 end; 720 if (Parts & "001"b) 721 then do; 722 unspec (Clear_vtoce.pad6) = ""b; 723 Clear_vtoce.pad7 = ""b; 724 Clear_vtoce.pad8 = ""b; 725 Clear_vtoce.pad9 = ""b; 726 end; 727 728 end CLEAR_PAD; 729 730 /* COPY_PARTS - copies VTOCE parts between two buffers as specified 731* by a mask. 732**/ 733 734 COPY_PARTS: 735 proc (Parts, From_ptr, To_ptr); 736 737 dcl Parts bit (3) aligned; 738 dcl From_ptr ptr; 739 dcl To_ptr ptr; 740 741 dcl partsx fixed bin; 742 743 dcl 1 From_Vtoce_Buffer aligned like vtoce_buffer based (From_ptr); 744 dcl 1 To_Vtoce_Buffer aligned like vtoce_buffer based (To_ptr); 745 746 do partsx = 1 to N_PARTS_PER_VTOCE; 747 if substr (Parts, partsx, 1) = "1"b 748 then unspec (To_Vtoce_Buffer.parts (partsx)) = unspec (From_Vtoce_Buffer.parts (partsx)); 749 end; 750 751 end COPY_PARTS; 752 753 /* Routines to compute parameters needed by disk control 754* 755* CORE - computes the absolute memory address 756* 757* RECORD - computes the Multics record number 758* 759* SECTOR - computes the sector within record 760**/ 761 762 CORE: 763 proc (Vtoc_buf_descp) returns (fixed bin (24)); 764 765 dcl Vtoc_buf_descp ptr; 766 dcl 1 Vtoc_buf_desc aligned like vtoc_buf_desc based (Vtoc_buf_descp); 767 768 return (vtoc_buffer.abs_addr + bin (Vtoc_buf_desc.buf_rel)); 769 770 end CORE; 771 772 773 774 RECORD: 775 proc (Vtoc_buf_descp) returns (bit (18) aligned); 776 777 dcl Vtoc_buf_descp ptr; 778 dcl 1 Vtoc_buf_desc aligned like vtoc_buf_desc based (Vtoc_buf_descp); 779 780 return (bit (bin (VTOC_ORIGIN + divide (Vtoc_buf_desc.vtocx, VTOCES_PER_RECORD (dev_type), 17), 18), 18)); 781 782 end RECORD; 783 784 785 SECTOR: 786 proc (Vtoc_buf_descp) returns (fixed bin (17)); 787 788 dcl Vtoc_buf_descp ptr; 789 dcl 1 Vtoc_buf_desc aligned like vtoc_buf_desc based (Vtoc_buf_descp); 790 791 792 return (mod (Vtoc_buf_desc.vtocx, VTOCES_PER_RECORD (dev_type)) * SECTORS_PER_VTOCE (dev_type)); 793 794 end SECTOR; 795 796 797 798 /* SET_VOL_TROUBLE - increments the count of volume inconsistencies 799* and logs a message into syserr. 800**/ 801 802 SET_VOL_TROUBLE: 803 proc (Pvtep, Vtocx, Msg); 804 805 dcl Pvtep ptr; 806 dcl Vtocx fixed bin; 807 dcl Msg char (*); 808 809 dcl 1 Pvte aligned like pvte based (Pvtep); 810 811 Pvte.vol_trouble_count = Pvte.vol_trouble_count + 1; 812 813 call syserr (LOG, "vtoc_man: ^a ^[vtocx ^o ^;^1s^]on ^a_^a^a", Msg, (Vtocx ^= -1), Vtocx, Pvte.devname, 814 convert (p99, Pvte.logical_area_number), Pvte.sv_name); 815 816 end SET_VOL_TROUBLE; 817 818 /* RETHREAD - procedure to walk the vtoc_buffer linearly and 819* thread all in-use buffers into the hash table. This is called 820* if damage is suspected. 821**/ 822 823 RETHREAD: 824 proc; 825 826 unspec (vtoc_buffer.hash_table) = ""b; /* Clear out the old hash table */ 827 828 do bufx = 1 to vtoc_buffer.n_bufs; 829 vtoc_buf_descp = addr (vtoc_buf_desc_array (bufx)); 830 if vtoc_buf_desc.used 831 then call vtoc_search$hash_in (vtoc_buf_descp); 832 end; 833 834 end RETHREAD; 835 836 /* FLUSH_BUFFER - procedure to clear a buffer descriptor and thread 837* it out of the hash table. 838**/ 839 840 FLUSH_BUFFER: 841 proc (Vtoc_buf_descp); 842 843 dcl Vtoc_buf_descp ptr; 844 dcl 1 Vtoc_buf_desc aligned like vtoc_buf_desc based (Vtoc_buf_descp); 845 846 call vtoc_search$hash_out (Vtoc_buf_descp); 847 848 vtoc_buffer.search_index = 849 divide (bin (rel (Vtoc_buf_descp)) - bin (rel (vtoc_buf_desc_arrayp)), size (vtoc_buf_desc), 17) + 1; 850 /* Set to look at this one first */ 851 852 unspec (Vtoc_buf_desc) = ""b; 853 854 855 end FLUSH_BUFFER; 856 857 /* GET_BUFFER - procedure to find a buffer given a pvtx and vtocx. 858* If the VTOCE so defined already has a buffer, it is returned. 859* Otherwise, one is allocated. This routine does not return until 860* the buffer is not out-of-service. 861* 862* GET_BUFFER_NOWAIT - identical to GET_BUFFER, except that it does 863* not wait for the buffer to be not out-of-service. 864**/ 865 866 GET_BUFFER: 867 proc (Pvtx, Vtocx, Vtoc_buf_descp, Vtoc_bufp, Code); 868 869 dcl Pvtx fixed bin; 870 dcl Vtocx fixed bin; 871 dcl Vtoc_buf_descp ptr; 872 dcl Vtoc_bufp ptr; 873 dcl Code fixed bin (35); 874 875 dcl first_time bit (1) aligned; 876 dcl skip_waiting bit (1) aligned; 877 dcl steps fixed bin; 878 dcl wait_sw bit (1) aligned; 879 dcl 1 Vtoc_buf_desc aligned like vtoc_buf_desc based (Vtoc_buf_descp); 880 881 882 wait_sw = "1"b; 883 goto GET_BUFFER_JOIN; 884 885 886 GET_BUFFER_NOWAIT: 887 entry (Pvtx, Vtocx, Vtoc_buf_descp, Vtoc_bufp, Code); 888 889 wait_sw = "0"b; 890 891 GET_BUFFER_JOIN: 892 Code = 0; 893 vtoc_buffer.meters.get_buffer_calls = vtoc_buffer.meters.get_buffer_calls + 1; 894 first_time = "1"b; 895 896 897 GET_BUFFER_RETRY: 898 call vtoc_search$search (Pvtx, Vtocx, Vtoc_buf_descp); 899 /* Look for existing buffer with this VTOCE */ 900 if Vtoc_buf_descp ^= null () & first_time 901 then vtoc_buffer.meters.get_buffer_hits = vtoc_buffer.meters.get_buffer_hits + 1; 902 first_time = "0"b; 903 904 if Vtoc_buf_descp = null () 905 then do; /* Not there */ 906 steps = 0; 907 skip_waiting = "1"b; /* Skip those with notify_sw the first pass */ 908 bufx = vtoc_buffer.search_index; /* Roving pointer */ 909 do while ("1"b); 910 vtoc_buffer.meters.steps = vtoc_buffer.meters.steps + 1; 911 steps = steps + 1; 912 Vtoc_buf_descp = addr (vtoc_buf_desc_array (bufx)); 913 914 if ^Vtoc_buf_desc.used 915 then goto FOUND; 916 917 if Vtoc_buf_desc.os 918 then vtoc_buffer.meters.skip_os = vtoc_buffer.meters.skip_os + 1; 919 else if Vtoc_buf_desc.write_sw & Vtoc_buf_desc.err 920 then vtoc_buffer.meters.skip_hot = vtoc_buffer.meters.skip_hot + 1; 921 else if Vtoc_buf_desc.notify_sw & skip_waiting 922 then vtoc_buffer.meters.skip_wait = vtoc_buffer.meters.skip_wait + 1; 923 else goto FOUND; /* Nemine contradiscente */ 924 925 if steps > MAX_STEPS 926 then call syserr (CRASH, "vtoc_man: Out of buffers"); 927 bufx = bufx + 1; 928 if bufx > vtoc_buffer.n_bufs 929 then bufx = 1; 930 if bufx = vtoc_buffer.search_index 931 then do; /* Went around once more */ 932 skip_waiting = "0"b; /* Only skip these on first pass */ 933 call disk_run; /* Poll for lost interrupts */ 934 end; 935 end; 936 937 FOUND: 938 if bufx >= vtoc_buffer.n_bufs 939 then vtoc_buffer.search_index = 1; 940 else vtoc_buffer.search_index = bufx + 1; 941 /* Set to look at next first */ 942 943 if Vtoc_buf_desc.used 944 then call FLUSH_BUFFER (Vtoc_buf_descp); 945 946 Vtoc_buf_desc.pvtx = Pvtx; 947 Vtoc_buf_desc.vtocx = Vtocx; 948 Vtoc_buf_desc.used = "1"b; 949 Vtoc_buf_desc.wait_index = bufx; 950 Vtoc_buf_desc.buf_rel = rel (addr (vtoce_buffer_array (bufx))); 951 952 call vtoc_search$hash_in (Vtoc_buf_descp); 953 954 end; 955 956 if Vtoc_buf_desc.os & wait_sw 957 then do; 958 call WAIT (Vtoc_buf_descp, Code); 959 if Code ^= 0 960 then do; 961 Vtoc_buf_descp = null (); 962 Vtoc_bufp = null (); 963 return; 964 end; 965 goto GET_BUFFER_RETRY; 966 end; 967 968 969 Vtoc_bufp = ptr (vtoc_buffer_segp, Vtoc_buf_desc.buf_rel); 970 971 end GET_BUFFER; 972 973 974 /* READ - Routine to read a VTOCE. It gets a buffer (possibly containing 975* part of all of the VTOCE in question). If the parts desired are 976* in the buffer, it returns with the buffer. If not, it reads the 977* entire VTOCE and waits for the completion of the read. Note that 978* the buffer can disappear if READ waits for an I/O (since it unlocks 979* the vtoc buffers, waits, and relocks). 980* 981* READ_AHEAD - Similar to READ, except that it does not wait. 982**/ 983 984 READ: 985 proc (Pvtx, Vtocx, Parts, Vtoc_buf_descp, Vtoc_bufp, Sector_read_required, Code); 986 987 dcl Pvtx fixed bin; 988 dcl Vtocx fixed bin; 989 dcl Parts bit (3) aligned; 990 dcl Vtoc_buf_descp ptr; 991 dcl Vtoc_bufp ptr; 992 dcl Sector_read_required 993 bit (1) aligned; 994 dcl Code fixed bin (35); 995 996 dcl wait_sw bit (1) aligned; 997 998 dcl 1 Vtoc_buf_desc aligned like vtoc_buf_desc based (Vtoc_buf_descp); 999 1000 1001 wait_sw = "1"b; 1002 goto READ_JOIN; 1003 1004 1005 READ_AHEAD: 1006 entry (Pvtx, Vtocx, Parts, Vtoc_buf_descp, Vtoc_bufp, Sector_read_required, Code); 1007 1008 wait_sw = "0"b; 1009 1010 READ_JOIN: 1011 Sector_read_required = "0"b; 1012 Code = 0; 1013 hot_buffer_tried = "0"b; /* first time to retry_read */ 1014 RETRY_READ: 1015 if wait_sw 1016 then call GET_BUFFER (Pvtx, Vtocx, Vtoc_buf_descp, Vtoc_bufp, Code); 1017 else call GET_BUFFER_NOWAIT (Pvtx, Vtocx, Vtoc_buf_descp, Vtoc_bufp, Code); 1018 if Code ^= 0 1019 then return; 1020 1021 if ^wait_sw & Vtoc_buf_desc.os 1022 then return; 1023 1024 if Vtoc_buf_desc.err /* I/O error */ 1025 then do; 1026 if ^Vtoc_buf_desc.write_sw /* Not hot buffer */ 1027 then call FLUSH_BUFFER (Vtoc_buf_descp); 1028 else if ^hot_buffer_tried 1029 then do; /* Hot buffer, retry write */ 1030 hot_buffer_tried = "1"b; 1031 pvt_arrayp = addr (pvt$array); 1032 pvtep = addr (pvt_array (Pvtx)); 1033 call syserr (LOG, "vtoc_man: Write I/O being retried by ^a for ^a_^a^a vtocx ^o", 1034 pds$process_group_id, pvte.devname, convert (p99, pvte.logical_area_number), 1035 pvte.sv_name, Vtocx); 1036 Vtoc_buf_desc.os = "0"b; /* Should be anyhow... */ 1037 1038 call WRITE ((Vtoc_buf_desc.parts_used), Vtoc_buf_descp); 1039 goto RETRY_READ; 1040 end; 1041 1042 Code = error_table_$vtoc_io_err; 1043 Vtoc_buf_descp = null (); 1044 Vtoc_bufp = null (); 1045 return; 1046 end; 1047 1048 if (Vtoc_buf_desc.parts_used & Parts) = Parts /* Got what they want */ 1049 then return; 1050 1051 Vtoc_buf_desc.write_sw = "0"b; 1052 Vtoc_buf_desc.err = "0"b; 1053 Vtoc_buf_desc.notify_sw = "0"b; 1054 Vtoc_buf_desc.ioq = "0"b; 1055 Vtoc_buf_desc.os = "1"b; 1056 1057 dev_type = addr (pvt_array (Pvtx)) -> pvte.device_type; 1058 1059 call dctl$read_sectors (Pvtx, CORE (Vtoc_buf_descp), RECORD (Vtoc_buf_descp), SECTOR (Vtoc_buf_descp), 1060 SECTORS_PER_VTOCE (dev_type)); 1061 Sector_read_required = "1"b; 1062 Vtoc_buf_desc.ioq = "1"b; 1063 Vtoc_buf_desc.parts_used = ALL_PARTS; 1064 1065 vtoc_buffer.meters.disk_reads = vtoc_buffer.meters.disk_reads + 1; 1066 pds$vtoc_reads = pds$vtoc_reads + 1; 1067 1068 if wait_sw 1069 then goto RETRY_READ; 1070 1071 return; 1072 1073 end READ; 1074 1075 /* WRITE - This procedure writes the parts specified for a given 1076* vtoc buffer. It does not await its completion. 1077**/ 1078 1079 WRITE: 1080 proc (Parts, Vtoc_buf_descp); 1081 1082 dcl Parts bit (3) aligned; 1083 dcl Vtoc_buf_descp ptr; 1084 1085 dcl partsx fixed bin; 1086 1087 dcl 1 Vtoc_buf_desc aligned like vtoc_buf_desc based (Vtoc_buf_descp); 1088 1089 dcl n_sectors fixed bin; 1090 if Vtoc_buf_desc.os 1091 then call syserr (CRASH, "vtoc_man: buffer out-of-service on write."); 1092 1093 partsx = bin (Parts, 3); 1094 if ^VALID_WRITE (partsx) 1095 then call syserr (CRASH, "vtoc_man: Invalid write"); 1096 1097 Vtoc_buf_desc.err = "0"b; 1098 Vtoc_buf_desc.notify_sw = "0"b; 1099 Vtoc_buf_desc.ioq = "0"b; 1100 Vtoc_buf_desc.write_sw = "1"b; 1101 Vtoc_buf_desc.os = "1"b; 1102 1103 dev_type = addr (pvt_array (Vtoc_buf_desc.pvtx)) -> pvte.device_type; 1104 1105 if SECTORS_PER_VTOCE (dev_type) = 1 1106 then do; 1107 n_sectors = 1; 1108 if Parts ^= ALL_PARTS 1109 then do; 1110 call syserr (CRASH, "vtoc_man: Attempt to write less than entire VTOCE to ^d device.", 1111 MODELN (dev_type)); 1112 end; 1113 end; 1114 else n_sectors = SECTORS_TO_WRITE (partsx); 1115 call dctl$write_sectors ((Vtoc_buf_desc.pvtx), CORE (Vtoc_buf_descp) + CORE_OFFSET (partsx), 1116 RECORD (Vtoc_buf_descp), SECTOR (Vtoc_buf_descp) + SECTOR_OFFSET (partsx), n_sectors); 1117 1118 Vtoc_buf_desc.ioq = "1"b; 1119 if VALID_WRITE (bin ((Parts | Vtoc_buf_desc.parts_used), 3)) 1120 then Vtoc_buf_desc.parts_used = Vtoc_buf_desc.parts_used | Parts; 1121 else Vtoc_buf_desc.parts_used = Parts; 1122 1123 vtoc_buffer.meters.disk_writes = vtoc_buffer.meters.disk_writes + 1; 1124 pds$vtoc_writes = pds$vtoc_writes + 1; 1125 1126 end WRITE; 1127 1128 /* WAIT - Procedure to wait until a specified buffer is no longer 1129* out-of-service. 1130**/ 1131 1132 WAIT: 1133 proc (Vtoc_buf_descp, Code); 1134 1135 dcl Vtoc_buf_descp ptr; 1136 dcl Code fixed bin (35); 1137 1138 dcl 1 Vtoc_buf_desc aligned like vtoc_buf_desc based (Vtoc_buf_descp); 1139 1140 Code = 0; 1141 vtoc_buffer.meters.wait_calls = vtoc_buffer.meters.wait_calls + 1; 1142 1143 do while (Vtoc_buf_desc.os); 1144 wait_event = bit (bin (vtoc_buffer.wait_event_constant + Vtoc_buf_desc.wait_index, 36), 36); 1145 call pxss$addevent (wait_event); 1146 Vtoc_buf_desc.notify_sw = "1"b; 1147 if Vtoc_buf_desc.os 1148 then do; 1149 vtoc_buffer.meters.wait_os = vtoc_buffer.meters.wait_os + 1; 1150 call UNLOCK; 1151 call pxss$wait; 1152 call LOCK_CHECK (Code); 1153 if Code ^= 0 1154 then return; 1155 end; 1156 else call pxss$delevent (wait_event); 1157 Vtoc_buf_desc.notify_sw = "0"b; 1158 end; 1159 1160 end WAIT; 1161 1162 1163 /* VALIDATE_VTOCX - Routine to check whether a given VTOCE index 1164* corresponds to a VTOCE on the volume. 1165**/ 1166 1167 VALIDATE_VTOCX: 1168 proc (Vtocx, Code); 1169 1170 dcl Vtocx fixed bin; 1171 dcl Code fixed bin (35); 1172 1173 if Vtocx < 0 | Vtocx >= pvte.n_vtoce 1174 then Code = error_table_$invalid_vtocx; 1175 else Code = 0; 1176 1177 end VALIDATE_VTOCX; 1178 1179 /* Setup, Locking, and Unlocking Routines 1180* 1181* SETUP_LOCK - sets up global pointers, locks vtoc_buffers, 1182* checks PVTE for still there, not being demounted 1183* 1184* LOCK_CHECK - locks vtoc_buffers, 1185* checks PVTE for still there, not being demounted 1186* 1187* UNLOCK - unlocks vtoc_buffers 1188**/ 1189 1190 SETUP_LOCK: 1191 proc (Pvtx, Code); 1192 1193 dcl Pvtx fixed bin; 1194 dcl Code fixed bin (35); 1195 1196 1197 dcl code fixed bin (35); 1198 1199 vtoc_buffer_segp = addr (vtoc_buffer_seg$); 1200 vtoc_buf_desc_arrayp = ptr (vtoc_buffer_segp, vtoc_buffer.buf_desc_offset); 1201 vtoc_buf_arrayp = ptr (vtoc_buffer_segp, vtoc_buffer.buf_offset); 1202 pvt_arrayp = addr (pvt$array); 1203 1204 Code = 0; 1205 pvtep = null (); 1206 1207 if Pvtx < 0 | Pvtx > pvt$n_entries 1208 then Code = error_table_$invalid_pvtx; 1209 else pvtep = addr (pvt_array (Pvtx)); 1210 1211 call LOCK_CHECK (code); 1212 if code ^= 0 1213 then Code = code; 1214 1215 end SETUP_LOCK; 1216 1217 1218 1219 LOCK_CHECK: 1220 proc (Code); 1221 1222 dcl Code fixed bin (35); 1223 1224 Code = 0; 1225 1226 if pvtep ^= null () 1227 then do; 1228 if (pvid ^= ""b & pvid ^= pvte.pvid) 1229 then Code = error_table_$pvid_not_found; 1230 else if pvte.device_inoperative 1231 then Code = error_table_$vtoc_io_err; 1232 else if pvte.being_demounted2 1233 then Code = error_table_$pvid_not_found; 1234 end; 1235 1236 call lock$lock_fast (addr (vtoc_buffer.lock)); 1237 1238 1239 end LOCK_CHECK; 1240 1241 1242 UNLOCK: 1243 proc; 1244 1245 call lock$unlock_fast (addr (vtoc_buffer.lock)); 1246 1247 1248 end UNLOCK; 1249 1250 1 1 /* BEGIN INCLUDE FILE...disk_pack.incl.pl1 Last Modified January 1982 for new volume map */ 1 2 1 3 1 4 1 5 1 6 /****^ HISTORY COMMENTS: 1 7* 1) change(86-01-14,Fawcett), approve(86-05-13,MCR7383), 1 8* audit(86-05-14,LJAdams), install(86-07-18,MR12.0-1098): 1 9* Add vars PAGE_SIZE and VTOCE_SIZE, Also change the SECTORS_PER_VTOCE and 1 10* VTOCES_PER_RECORD form fixed bin constants to arrays of fixed bin 1 11* constants indexed by device type as defined in fs_dev_types.incl.pl1. 1 12* This was done for support of the 3380, and 3390 devices for 512_WORD_IO. 1 13* 2) change(86-10-21,Fawcett), approve(86-10-21,MCR7533), 1 14* audit(86-10-21,Farley), install(86-10-22,MR12.0-1193): 1 15* Change PAGE_SIZE and VTOCE_SIZE from automatic to static constants. 1 16* END HISTORY COMMENTS */ 1 17 1 18 1 19 /* 1 20* All disk packs have the standard layout described below: 1 21* 1 22* Record 0 : contains the label, as declared in fs_vol_label.incl.pl1. 1 23* Record 1 to 3 : contains the volume map, as declared in vol_map.incl.pl1 1 24* Record 4 to 5 : contains the dumper bit map, as declared in dumper_bit_map.incl.pl1 1 25* Record 6 : contains the vtoc map, as declared in vtoc_map.incl.pl1 1 26* Record 7 : formerly contained bad track list; no longer used. 1 27* Records 8 to n-1 : contain the array of vtoc entries; ( n is specified in the label) 1 28* each record contains 5 192-word vtoc entries. The last 64 words are unused. 1 29* Records n to N-1 : contain the pages of the Multics segments. ( N is specified in the label) 1 30* 1 31* Sundry partitions may exist within the region n to N-1, withdrawn or not as befits the meaning 1 32* of the particular partition. 1 33* 1 34* 1 35* 1 36* A conceptual declaration for a disk pack could be: 1 37* 1 38* dcl 1 disk_pack, 1 39* 2 label_record (0 : 0) bit(36 * 1024), 1 40* 2 volume_map_record (1 : 3) bit(36 * 1024), 1 41* 2 dumper_bit_map_record (4 : 5) bit(36 * 1024), 1 42* 2 vtoc_map_record (6 : 6) bit(36 * 1024), 1 43* 2 spare_record (7 : 7) bit(36 * 1024), 1 44* 2 vtoc_array_records (8 : n-1), 1 45* 3 vtoc_entry ( 5 ) bit(36 * 192), 1 46* 3 unused bit(36 * 64), 1 47* 2 Multics_pages_records (n : N-1) bit(36 * 1024); 1 48* 1 49* 1 50* 1 51* 1 52**/ 1 53 1 54 dcl (LABEL_ADDR init (0), /* Address of Volume Label */ 1 55 VOLMAP_ADDR init (1), /* Address of first Volume Map record */ 1 56 DUMPER_BIT_MAP_ADDR init (4), /* For initial release compaitiblity */ 1 57 VTOC_MAP_ADDR init (6), /* Address of first VTOC Map Record */ 1 58 VTOC_ORIGIN init (8), /* Address of first record of VTOC */ 1 59 DEFAULT_HCPART_SIZE init (1000), /* Size of Hardcore Partition */ 1 60 MAX_VTOCE_PER_PACK init (31774)) /* Limited by size of VTOC Map */ 1 61 fixed bin (17) int static options (constant); 1 62 1 63 /* SECTORS_PER_VTOCE & VTOCES_PER_RECORD are indexed via device type as */ 1 64 /* defined by fs_dev_types and extracted form the disk_table entry (dte) */ 1 65 /* or the physical volume table entry (pvte) device type. */ 1 66 1 67 dcl PAGE_SIZE fixed bin (17) init (1024) static options (constant); 1 68 dcl VTOCE_SIZE fixed bin (17) init (192) static options (constant); 1 69 1 70 dcl SECTORS_PER_VTOCE (9) fixed bin static options (constant) init 1 71 (0, 3, 3, 3, 3, 3, 3, 1, 1); 1 72 dcl VTOCES_PER_RECORD (9) fixed bin static options (constant) init 1 73 (0, 5, 5, 5, 5, 5, 5, 2, 2); 1 74 dcl SECTORS_PER_RECORD (9) fixed bin static options (constant) init 1 75 (0, 16, 16, 16, 16, 16, 16, 2, 2); 1 76 1 77 /* END INCLUDE FILE...disk_pack.incl.pl1 */ 1251 1252 2 1 /* START OF: pvte.incl.pl1 July 1982 * * * * * * * * * * * * * * * * */ 2 2 2 3 /* Added pc_vacating, Benson Margulies 84-10-17 */ 2 4 2 5 /****^ HISTORY COMMENTS: 2 6* 1) change(86-04-11,Fawcett), approve(86-04-11,MCR7383), 2 7* audit(86-05-29,GDixon), install(86-07-18,MR12.0-1098): 2 8* Add the support for subvolumes 2 9* 2) change(86-04-11,Lippard), approve(86-04-11,MCR7309), 2 10* audit(86-05-29,GDixon), install(86-07-18,MR12.0-1098): 2 11* Add root_lv flag to mount RLVs that do not have hardcore partitions. 2 12* 3) change(88-05-27,GWMay), approve(88-05-27,MCR7883), 2 13* audit(88-06-14,Beattie), install(88-07-19,MR12.2-1061): 2 14* Added inconsistent_dbm bit for determining the status of volume 2 15* dumper bit maps. 2 16* END HISTORY COMMENTS */ 2 17 2 18 dcl pvt$array aligned external; 2 19 dcl pvt$max_n_entries fixed bin external; 2 20 2 21 dcl pvt_arrayp ptr; 2 22 dcl pvtep ptr; 2 23 2 24 dcl 1 pvt_array (pvt$max_n_entries) aligned like pvte based (pvt_arrayp); 2 25 2 26 dcl 1 pvte based (pvtep) aligned, 2 27 2 28 2 pvid bit (36), /* physical volume ID */ 2 29 2 30 2 lvid bit (36), /* logical volume ID */ 2 31 2 32 2 dmpr_in_use (3) bit (1) unaligned, /* physical volume dumper interlock */ 2 33 2 is_sv bit (1) unaligned, /* true if this entry defines a subvolume */ 2 34 2 root_lv bit (1) unaligned, /* true if this is on the root LV */ 2 35 2 removable_pack bit (1) unaligned, /* true if packs are eremoveable */ 2 36 2 inconsistent_dbm bit (1) unaligned, /* true if trouble count is incremented */ 2 37 2 pad3 bit (2) unaligned, 2 38 2 brother_pvtx fixed bin (8) unaligned,/* next pvte in lv chain */ 2 39 2 skip_queue_count fixed bin (18) unsigned unaligned, /* number of times this pv skipped for per-proc allocation due to saturation */ 2 40 2 41 2 42 2 43 2 devname char (4), /* device name */ 2 44 2 45 (2 device_type fixed bin (8), /* device type */ 2 46 2 logical_area_number fixed bin (8), /* disk drive number */ 2 47 2 used bit (1), /* TRUE if this entry is used */ 2 48 2 storage_system bit (1), /* TRUE for storage system (vs io disk) */ 2 49 2 permanent bit (1), /* TRUE if cannot be demounted */ 2 50 2 testing bit (1), /* Protocol bit for read_disk$test */ 2 51 2 being_mounted bit (1), /* TRUE if the physical volume is being mounted */ 2 52 2 being_demounted bit (1), /* TRUE if the pysical volume is being demounted */ 2 53 2 check_read_incomplete bit (1), /* page control should check read incomplete */ 2 54 2 device_inoperative bit (1), /* TRUE if disk_control decides dev busted */ 2 55 2 rpv bit (1), /* TRUE if this is the root physical volume */ 2 56 2 scav_check_address 2 57 bit (1), /* TRUE is page control should check deposits/withdrawals against scavenger table */ 2 58 2 deposit_to_volmap bit (1), /* TRUE if deposits should got to volume map, not stock */ 2 59 2 being_demounted2 bit (1), /* No more vtoc I/O during demount */ 2 60 2 pc_vacating bit (1), /* No more withdraws from this volume -- for debugging */ 2 61 2 vacating bit (1), /* don't put new segs on this vol */ 2 62 2 hc_part_used bit (1), /* HC part set up by init_pvt */ 2 63 2 volmap_lock_notify bit (1) unal, /* TRUE if notify required when volmap lock is unlocked */ 2 64 2 volmap_idle_notify bit (1) unal, /* TRUE if notify required when volmap state is idle */ 2 65 2 vtoc_map_lock_notify bit (1) unal, /* TRUE if notify required when vtoc map lock is unlocked */ 2 66 2 67 2 68 2 n_free_vtoce fixed bin (17), /* number of free VTOC entries */ 2 69 2 vtoc_size fixed bin (17), /* size of the VTOC part of the disk - in records */ 2 70 2 71 2 dbmrp (2) bit (18), /* rel ptr to dumber bit maps for this volume */ 2 72 2 73 2 nleft fixed bin (17), /* number of records left */ 2 74 2 totrec fixed bin (17)) unaligned, /* Total records in this map */ 2 75 2 76 2 dim_info bit (36), /* Information peculiar to DIM */ 2 77 2 sv_num fixed bin, /* the number of this subvolume starting at 0 */ 2 78 2 num_of_svs fixed bin, /* number of subvolumes for this device */ 2 79 2 records_per_cyl fixed bin, 2 80 2 record_factor fixed bin, /* the record factor for logical to real seek calculation */ 2 81 2 sv_name char (2) aligned, 2 82 2 curn_dmpr_vtocx (3) fixed bin unaligned,/* current vtocx being dumped */ 2 83 2 n_vtoce fixed bin unaligned, /* number of vtoce on this volume */ 2 84 2 85 2 baseadd fixed bin (18) uns unaligned, /* Base of paging region */ 2 86 2 pad2 bit (18) unaligned, 2 87 2 88 2 pad_for_mod_2 fixed bin (35), /* Make volmap_seg_sdw double word aligned */ 2 89 2 90 2 volmap_seg_sdw fixed bin (71), /* SDW describing volmap_seg */ 2 91 2 92 2 volmap_astep ptr unal, /* Packed pointer to ASTE for volmap_seg */ 2 93 2 94 2 volmap_offset bit (18) unal, /* Offset in volmap_seg of volume map */ 2 95 2 vtoc_map_offset bit (18) unal, /* Offset in volmap_seg of VTOC map */ 2 96 2 97 2 98 2 volmap_lock bit (36) aligned, /* Lock on volume map operations */ 2 99 2 100 2 vtoc_map_lock bit (36) aligned, /* Lock on VTOC map operations */ 2 101 2 102 2 volmap_stock_ptr ptr unal, /* Packed pointer to record stock */ 2 103 2 104 2 vtoc_map_stock_ptr ptr unal, /* Packed pointer to VTOCE stock */ 2 105 2 106 2 volmap_async_state fixed bin (17) unaligned, /* Asynchronous update state of Volume Map */ 2 107 2 volmap_async_page fixed bin (17) unaligned, /* Page number for asynchronous update */ 2 108 2 109 2 vol_trouble_count fixed bin (17) unaligned, /* Count of inconsistencies since last salvage */ 2 110 2 scavenger_block_rel bit (18) unaligned; /* Offset to scavenger block, ^0 => scavenging */ 2 111 2 112 2 113 dcl (VOLMAP_ASYNC_IDLE init (0), /* for volmap_async_state */ 2 114 VOLMAP_ASYNC_READ init (1), 2 115 VOLMAP_ASYNC_WRITE init (2)) fixed bin int static options (constant); 2 116 2 117 2 118 /* END OF: pvte.incl.pl1 * * * * * * * * * * * * * * * * */ 1253 1254 3 1 /* BEGIN INCLUDE FILE syserr_constants.incl.pl1 ... 11/11/80 W. Olin Sibert */ 3 2 /* 85-02-12, EJ Sharpe - Added sorting class constants, removed AIM_MESSAGE, added new action code names. */ 3 3 /* 85-04-24, G. Palter - Renamed SYSERR_UNUSED_10 to SYSERR_RING1_ERROR to reflect its actual use. */ 3 4 3 5 /* This include file has an ALM version. Keep 'em in sync! */ 3 6 3 7 dcl ( 3 8 3 9 /* The following constants define the message action codes. This indicates 3 10*how a message is to be handled. */ 3 11 3 12 SYSERR_CRASH_SYSTEM init (1), 3 13 CRASH init (1), /* Crash the system, and bleat plaintively. */ 3 14 3 15 SYSERR_TERMINATE_PROCESS init (2), 3 16 TERMINATE_PROCESS init (2), /* Terminate the process, print the message, and beep. */ 3 17 3 18 SYSERR_PRINT_WITH_ALARM init (3), 3 19 BEEP init (3), /* Beep and print the message on the console. */ 3 20 3 21 SYSERR_PRINT_ON_CONSOLE init (0), 3 22 ANNOUNCE init (0), /* Just print the message on the console. */ 3 23 3 24 SYSERR_LOG_OR_PRINT init (4), 3 25 LOG init (4), /* Log the message, or print it if it can't be logged */ 3 26 3 27 SYSERR_LOG_OR_DISCARD init (5), 3 28 JUST_LOG init (5), /* Just try to log the message, and discard it if it can't be */ 3 29 3 30 3 31 /* The following constants are added to the normal severities to indicate 3 32*different sorting classes of messages. */ 3 33 3 34 SYSERR_SYSTEM_ERROR init (00), /* indicates a standard level system error */ 3 35 SYSERR_RING1_ERROR init (10), /* indicates an error detected in ring 1 (mseg_, RCP) */ 3 36 SYSERR_COVERT_CHANNEL init (20), /* indicates covert channel audit trail message */ 3 37 SYSERR_UNSUCCESSFUL_ACCESS init (30), /* indicates access denial audit trail message */ 3 38 SYSERR_SUCCESSFUL_ACCESS init (40) /* indicates access grant audit trail message */ 3 39 ) fixed bin internal static options (constant); 3 40 3 41 /* END INCLUDE FILE syserr_constants.incl.pl1 */ 1255 1256 4 1 /* START OF: vtoc_buffer.incl.pl1 November 1982 * * * * * * * * * * * * * * * * */ 4 2 4 3 4 4 4 5 /****^ HISTORY COMMENTS: 4 6* 1) change(86-04-21,Fawcett), approve(86-04-21,MCR7383), 4 7* audit(86-05-27,GDixon), install(86-07-18,MR12.0-1098): 4 8* Add the software read-alter-rewrite when needed for devices that do only 4 9* 512 word IO. 4 10* END HISTORY COMMENTS */ 4 11 4 12 4 13 dcl vtoc_buffer_seg$ ext; 4 14 4 15 dcl vtoc_buffer_segp ptr; 4 16 dcl vtoc_buf_descp ptr; 4 17 dcl vtoc_bufp ptr; 4 18 dcl vtoc_buf_desc_arrayp ptr; 4 19 dcl vtoc_buf_arrayp ptr; 4 20 4 21 dcl vtoc_buf_n_buffers fixed bin; 4 22 dcl vtoc_buf_n_buckets fixed bin; 4 23 4 24 4 25 dcl 1 vtoc_buffer aligned based (vtoc_buffer_segp), 4 26 4 27 2 lock, /* Global lock for VTOC buffers */ 4 28 3 processid bit (36) aligned, /* Owner */ 4 29 3 wait_event bit (36) aligned, /* For lock */ 4 30 3 notify_sw bit (1) aligned, /* ON => notify on unlock */ 4 31 4 32 2 n_bufs fixed bin, /* Number of full VTOCE buffers */ 4 33 2 n_hash_buckets fixed bin, /* Number of hash table buckets */ 4 34 2 hash_mask bit (36) aligned, /* Mask for hash algorithm */ 4 35 2 abs_addr fixed bin (24), /* Absolute address of vtoc_buffer_seg */ 4 36 2 wait_event_constant fixed bin (36) uns unal, /* Constant to add to part index to form wait event */ 4 37 2 buf_desc_offset bit (18), /* Offset of buf_desc */ 4 38 2 buf_offset bit (18), /* Offset of buf */ 4 39 2 hash_table_offset bit (18), /* Offset of hash_table */ 4 40 2 search_index fixed bin, /* Roving pointer for buffer selection */ 4 41 2 unsafe_pvtx fixed bin, /* PVTE index with update in progress */ 4 42 2 scavenger_free_p_clock 4 43 fixed bin (35), /* Pseudo-Clock for scavenger-free-other-allocate race */ 4 44 2 meters, 4 45 3 call_get fixed bin (35), /* Calls to get_vtoce */ 4 46 3 call_put fixed bin (35), /* Calls to put_vtoce */ 4 47 3 call_alloc fixed bin (35), /* Calls to alloc_and_put_vtoce */ 4 48 3 call_free fixed bin (35), /* Calls to free_vtoce */ 4 49 3 call_await fixed bin (35), /* Calls to await_vtoce */ 4 50 3 steps fixed bin (35), /* Steps through buffer allocation */ 4 51 3 skip_os fixed bin (35), /* Skipped because out-of-service */ 4 52 3 skip_hot fixed bin (35), /* Skipped because buffer hot */ 4 53 3 skip_wait fixed bin (35), /* Skipped because notify_sw set */ 4 54 3 disk_reads fixed bin (35), /* Number of same */ 4 55 3 disk_writes fixed bin (35), /* Number of same */ 4 56 3 get_buffer_calls fixed bin (35), /* Number of calls to GET_BUFFER */ 4 57 3 get_buffer_hits fixed bin (35), /* Number times VTOCE in buffer */ 4 58 3 wait_calls fixed bin (35), /* Number of calls to WAIT */ 4 59 3 wait_os fixed bin (35), /* Number of times had to wait */ 4 60 3 scavenger_free_checks 4 61 fixed bin (35), /* Number of times had to check pseudo-clock */ 4 62 3 scavenger_free_losses 4 63 fixed bin (35), /* Number of times race lost between scavenger freeing and other allocate */ 4 64 3 soft_rar fixed bin (35), /* Nunber of times a software read_alter_rewrite performed */ 4 65 4 66 3 pad (14) fixed bin (35), 4 67 4 68 2 hash_table (vtoc_buf_n_buckets refer (vtoc_buffer.n_hash_buckets)) bit (18) aligned, 4 69 4 70 4 71 2 buf_desc (vtoc_buf_n_buffers refer (vtoc_buffer.n_bufs)) aligned like vtoc_buf_desc, 4 72 4 73 2 buffer (vtoc_buf_n_buffers refer (vtoc_buffer.n_bufs)) aligned like vtoce_buffer; 4 74 4 75 4 76 4 77 dcl 1 vtoc_buf_desc_array (vtoc_buffer.n_bufs) aligned based (vtoc_buf_desc_arrayp) like vtoc_buf_desc; 4 78 4 79 4 80 dcl 1 vtoc_buf_desc aligned based (vtoc_buf_descp), 4 81 2 pvtx fixed bin (17) unal, /* PVTE index */ 4 82 2 vtocx fixed bin (17) unal, /* VTOCE Index */ 4 83 2 parts_used bit (3) unal, /* Mask of parts used or os */ 4 84 2 err bit (1) unal, /* ON => I/O error on buffer */ 4 85 2 notify_sw bit (1) unal, /* ON => notify requied on I/O completion */ 4 86 2 write_sw bit (1) unal, /* ON => write I/O */ 4 87 2 os bit (1) unal, /* ON => I/O in progress */ 4 88 2 ioq bit (1) unal, /* ON => I/O has been requested */ 4 89 2 used bit (1) unal, /* ON => this descriptor is in use */ 4 90 2 pad bit (9) unal, 4 91 2 wait_index fixed bin (17) unal, /* Buffer index for forming wait event */ 4 92 2 ht_thread bit (18) unal, /* Offset of next entry in hash table */ 4 93 2 buf_rel bit (18) unal; /* Offset of buffer in segment */ 4 94 4 95 dcl 1 vtoce_buffer_array (vtoc_buffer.n_bufs) aligned based (vtoc_buf_arrayp) like vtoce_buffer; 4 96 4 97 dcl 1 vtoce_buffer aligned based (vtoc_bufp), 4 98 2 parts (3) aligned, 4 99 3 words (64) bit (36) aligned; 4 100 4 101 4 102 dcl N_PARTS_PER_VTOCE fixed bin int static options (constant) init (3); 4 103 dcl VTOCE_PART_SIZE fixed bin int static options (constant) init (64); 4 104 dcl VTOCE_BUFFER_SIZE fixed bin int static options (constant) init (3 * 64); 4 105 dcl N_VTOCE_PER_RECORD fixed bin int static options (constant) init (5); 4 106 dcl N_SECTOR_PER_VTOCE fixed bin int static options (constant) init (3); 4 107 4 108 4 109 /* END OF: vtoc_buffer.incl.pl1 * * * * * * * * * * * * * * * * */ 1257 1258 5 1 /* BEGIN INCLUDE FILE ...vtoce.incl.pl1 ... last modified September 1982 */ 5 2 /* Template for a VTOC entry. Length = 192 words. (3 * 64). */ 5 3 /* NOTE: vtoc_man clears pad fields before writing a vtoce. */ 5 4 5 5 dcl vtocep ptr; 5 6 5 7 dcl 1 vtoce based (vtocep) aligned, 5 8 5 9 5 10 (2 pad_free_vtoce_chain bit (36), /* Used to be pointer to next free VTOCE */ 5 11 5 12 2 uid bit (36), /* segment's uid - zero if vtoce is free */ 5 13 5 14 2 msl bit (9), /* maximum segment length in 1024 word units */ 5 15 2 csl bit (9), /* current segment length - in 1024 word units */ 5 16 2 records bit (9), /* number of records used by the seg in second storage */ 5 17 2 pad2 bit (9), 5 18 5 19 2 dtu bit (36), /* date and time segment was last used */ 5 20 5 21 2 dtm bit (36), /* date and time segment was last modified */ 5 22 5 23 2 nqsw bit (1), /* no quota switch - no checking for pages of this seg */ 5 24 2 deciduous bit (1), /* true if hc_sdw */ 5 25 2 nid bit (1), /* no incremental dump switch */ 5 26 2 dnzp bit (1), /* Dont null zero pages */ 5 27 2 gtpd bit (1), /* Global transparent paging device */ 5 28 2 per_process bit (1), /* Per process segment (deleted every bootload) */ 5 29 2 damaged bit (1), /* TRUE if contents damaged */ 5 30 2 fm_damaged bit (1), /* TRUE if filemap checksum bad */ 5 31 2 fm_checksum_valid bit (1), /* TRUE if the checksum has been computed */ 5 32 2 synchronized bit (1), /* TRUE if this is a data management synchronized segment */ 5 33 2 pad3 bit (8), 5 34 2 dirsw bit (1), /* directory switch */ 5 35 2 master_dir bit (1), /* master directory - a root for the logical volume */ 5 36 2 pad4 bit (16)) unaligned, /* not used */ 5 37 5 38 2 fm_checksum bit (36) aligned, /* Checksum of used portion of file map */ 5 39 5 40 (2 quota (0:1) fixed bin (18) unsigned, /* sec storage quota - (0) for non dir pages */ 5 41 5 42 2 used (0:1) fixed bin (18) unsigned, /* sec storage used - (0) for non dir pages */ 5 43 5 44 2 received (0:1) fixed bin (18) unsigned, /* total amount of storage this dir has received */ 5 45 5 46 2 trp (0:1) fixed bin (71), /* time record product - (0) for non dir pages */ 5 47 5 48 2 trp_time (0:1) bit (36), /* time time_record_product was last calculated */ 5 49 5 50 5 51 5 52 5 53 5 54 2 fm (0:255) bit (18), /* file map - 256 entries - 18 bits per entry */ 5 55 5 56 2 pad6 (10) bit (36), /* not used */ 5 57 5 58 2 ncd bit (1), /* no complete dump switch */ 5 59 2 pad7 bit (17), 5 60 2 pad8 bit (18), 5 61 5 62 2 dtd bit (36), /* date-time-dumped */ 5 63 5 64 2 volid (3) bit (36), /* volume ids of last incremental, consolidated, and complete dumps */ 5 65 5 66 2 master_dir_uid bit (36), /* superior master directory uid */ 5 67 5 68 5 69 5 70 5 71 2 uid_path (0:15) bit (36), /* uid pathname of all parents starting after the root */ 5 72 5 73 2 primary_name char (32), /* primary name of the segment */ 5 74 5 75 2 time_created bit (36), /* time the segment was created */ 5 76 5 77 2 par_pvid bit (36), /* physical volume id of the parent */ 5 78 5 79 2 par_vtocx fixed bin (17), /* vtoc entry index of the parent */ 5 80 2 branch_rp bit (18)) unaligned, /* rel pointer of the branch of this segment */ 5 81 5 82 2 cn_salv_time bit (36), /* time branch - vtoce connection checked */ 5 83 5 84 2 access_class bit (72), /* access class in branch */ 5 85 2 perm_flags aligned, 5 86 3 per_bootload bit (1) unal, /* ON => deleted each bootload */ 5 87 3 pad9 bit (35) unal, 5 88 2 owner bit (36); /* pvid of this volume */ 5 89 5 90 dcl vtoce_parts (3) bit (36 * 64) aligned based (vtocep); 5 91 5 92 dcl 1 seg_vtoce based (vtocep) aligned, /* Overlay for vtoce of segments, which don't have quota */ 5 93 2 pad1 bit (7*36), 5 94 2 usage fixed bin (35), /* page fault count: overlays quota */ 5 95 2 pad2 bit (184*36); 5 96 5 97 /* END INCLUDE FILE vtoce.incl.pl1 */ 1259 1260 6 1 /* Begin include file ...... fs_dev_types.incl.pl1 */ 6 2 6 3 /****^ HISTORY COMMENTS: 6 4* 1) change(85-09-09,Farley), approve(85-09-09,MCR6979), 6 5* audit(86-01-17,CLJones), install(86-03-21,MR12.0-1033): 6 6* Add support for FIPS 6 7* 3380. 6 8* 2) change(86-04-21,Fawcett), approve(86-04-21,MCR7383), 6 9* audit(86-05-15,Coppola), install(86-07-18,MR12.0-1098): 6 10* Add the support for subvolumes for the MSU3380 and MSU3390. 6 11* 3) change(86-10-02,Fawcett), approve(86-10-02,PBF7383), 6 12* audit(86-10-23,Farley), install(86-10-28,MR12.0-1200): 6 13* Changed 3390 to 3381, "d338" to "3380" & "d339" to "3381". 6 14* END HISTORY COMMENTS */ 6 15 6 16 /* Modified 5/19/76 by N. I. Morris */ 6 17 /* Modified 12/27/78 by Michael R. Jordan to correct MSS0500 information */ 6 18 /* Modified 4/79 by R.J.C. Kissel to add msu0501 information. */ 6 19 /* Modified '82 by BIM for needs_alt_part */ 6 20 /* Modified 4/84 by Chris Jones for FIPS disks */ 6 21 /* Modified 12/84 by Paul Farley for FIPS disks formatted for 512wd sectors */ 6 22 /* Modified 1/85 by Paul Farley to decrease the size of the 3380, until the 6 23* volmap and record stock can be expanded. */ 6 24 6 25 /* 6 26******************************************************************************** 6 27** * 6 28** WARNING: * 6 29** * 6 30** There exists fs_dev_types.incl.alm that must me updated when a new device * 6 31** type is added. * 6 32** * 6 33** There are other include files that contain arrays indexed by the device * 6 34** index obtained by references to MODELX or MODELN in this include file. * 6 35** These must be modified when a new device type is added: * 6 36** disk_pack.incl.pl1 * 6 37** fs_dev_types_sector.incl.pl1 (included in this include) * 6 38** * 6 39******************************************************************************** 6 40**/ 6 41 6 42 6 43 dcl (maxdevt init (9), /* maximum legal devt */ 6 44 bulkdevt init (1), /* bulk store devt */ 6 45 msu0500devt init (2), /* MSU0500 device type */ 6 46 msu0451devt init (3), /* MSU0451 device type */ 6 47 msu0450devt init (3), /* MSU0450 device type */ 6 48 msu0400devt init (4), /* MSU0400 device type */ 6 49 dsu191devt init (4), /* DSU191 device type */ 6 50 dsu190devt init (5), /* DSU190 device type */ 6 51 dsu181devt init (6), /* DSU181 device type */ 6 52 msu0501devt init (7), /* MSU0501 device type */ 6 53 fips3380devt init (8), /* 3380D FIPS device type */ 6 54 fips3381devt init (9) /* 3380E FIPS device type */ 6 55 ) fixed bin (4) static options (constant); 6 56 6 57 dcl MODEL (12) fixed bin static options (constant) init /* Known device model numbers */ 6 58 (0, 500, 451, 450, 400, 402, 191, 190, 181, 501, 3380, 3381); 6 59 6 60 dcl MODELX (12) fixed bin static options (constant) init /* translation from model number to device type */ 6 61 (1, 2, 3, 3, 4, 4, 4, 5, 6, 7, 8, 9); 6 62 6 63 dcl MODELN (9) fixed bin static options (constant) init /* translation from device type to model number */ 6 64 (0, 500, 451, 400, 190, 181, 501, 3380, 3381); 6 65 6 66 dcl device_names (9) char (4) aligned static options (constant) init /* device names indexed by device type */ 6 67 ("bulk", "d500", "d451", "d400", "d190", "d181", "d501", "3380", "3381"); 6 68 6 69 dcl first_dev_number (9) fixed bin (17) static options (constant) init /* First valid device_number */ 6 70 (1, 1, 1, 1, 1, 1, 1, 0, 0); 6 71 6 72 dcl fips_type_disk (9) bit (1) unal static options (constant) init /* ON => FIPS disk */ 6 73 ("0"b,"0"b,"0"b,"0"b,"0"b,"0"b,"0"b,"1"b,"1"b); 6 74 6 75 dcl media_removable (9) bit (1) static options (constant) init /* ON => demountable pack on device */ 6 76 ("0"b, "0"b, "1"b, "1"b, "1"b, "1"b, "0"b, "0"b, "0"b); 6 77 6 78 dcl shared_spindle (9) bit (1) static options (constant) init /* ON => 2 devices per spindle */ 6 79 ("0"b, "1"b, "0"b, "0"b, "0"b, "0"b, "1"b, "0"b, "0"b); 6 80 6 81 dcl needs_alt_part (9) bit (1) static options (constant) init /* ON => needs alternate partition to run alternate tracks */ 6 82 ("0"b, "0"b, "1"b, "1"b, "1"b, "1"b, "0"b, "0"b, "0"b); 6 83 6 84 dcl seek_command (9) bit (6) init /* Seek command: 00 => N/A, 30 => Seek_512, 34 => seek_64 */ 6 85 ("00"b3,"34"b3,"34"b3,"34"b3,"34"b3,"34"b3,"34"b3,"30"b3, "30"b3); 6 86 6 87 dcl rec_per_dev (9) fixed bin (21) static options (constant) init /* table of # of records on each device */ 6 88 (0, 38258, 38258, 19270, 14760, 4444, 67200, 112395, 224790); 6 89 6 90 dcl rec_per_sv (9) fixed bin static options (constant) init /* table of # of records on each subvol */ 6 91 (0, 38258, 38258, 19270, 14760, 4444, 67200, 56134, 74930); 6 92 6 93 dcl number_of_sv (9) fixed bin static options (constant) init /* table of subvolumes */ 6 94 (0, 0, 0, 0, 0, 0, 0, 2, 3); 6 95 6 96 dcl valid_sv_string char (3) static options (constant) init /* string of valid subvolume names */ 6 97 ("abc"); 6 98 6 99 dcl valid_sv_array (0:2) char (1) static options (constant) /* array of valid subvolume names */ 6 100 init ("a","b","c"); 6 101 6 102 dcl cyl_per_dev (9) fixed bin static options (constant) init /* table of # of cylinders on each device */ 6 103 (0, 814, 814, 410, 410, 202, 840, 885, 1770); 6 104 6 105 dcl cyl_per_sv (9) fixed bin static options (constant) init /* table of # of cylinders on each subvolume */ 6 106 (0, 814, 814, 410, 410, 202, 840, 442, 590); 6 107 6 108 dcl rec_per_cyl (9) fixed bin static options (constant) init /* table of # of records per cylinder on each device */ 6 109 (0, 47, 47, 47, 36, 22, 80, 127, 127); 6 110 6 111 dcl tracks_per_cyl (9) fixed bin static options (constant) init /* table of # of tracks per cylinder on each device */ 6 112 (0, 19, 19, 19, 19, 20, 20, 15, 15); 6 113 6 114 6 115 dcl first_rec_num (9) fixed bin static options (constant) init /* table of # of first record on each device */ 6 116 (0, 0, 0, 0, 0, 0, 0, 0, 0); 6 117 6 118 dcl last_rec_num (9) fixed bin (18) static options (constant) init /* table of # of last record on each device */ 6 119 (0, 38257, 38116, 19128, 14651, 4399, 67199, 112394, 224789); 6 120 6 121 dcl last_sv_rec_num (9) fixed bin (18) static options (constant) init /* table of # of last record on each subvolume */ 6 122 (0, 38257, 38116, 19128, 14651, 4399, 67199, 56133, 74929); 6 123 6 124 dcl first_sect_num (9) fixed bin (24) static options (constant) init /* table of # of first sector for each device */ 6 125 (0, 0, 0, 0, 0, 0, 0, 0, 0); 6 126 6 127 dcl last_sect_num (9) fixed bin (24) static options (constant) init /* table of # last sector number for each device */ 6 128 (0, 618639, 616359, 309319, 239722, 71999, 1075199, 225674, 451349); 6 129 6 130 dcl first_alt_sect_num (9) fixed bin (24) static options (constant) init /* table of # of first sector of alt partition */ 6 131 (0, 638400, 616360, 309320, 239723, 72000, 1075200, 225675, 451350); 6 132 6 133 dcl last_alt_sect_num (9) fixed bin (24) static options (constant) init /* table of # of last sector of alt partition */ 6 134 (0, 639919, 618639, 311599, 241489, 72719, 1077759, 225930, 451605); 6 135 6 136 dcl last_physical_sect_num (9) fixed bin (24) static options (constant) init /* table of # of last sector on device (includes T&D cylinders) */ 6 137 (0, 639919, 619399, 312359, 242249, 72359, 1077759, 225674, 451859); 6 138 6 139 dcl dev_time (9) float bin (27) static options (constant) init /* table of average access times for each device */ 6 140 (384e0, 33187e0, 33187e0, 34722e0, 46935e0, 52631e0, 33187e0, 26260e0, 26260e0); 6 141 7 1 /* Begin fs_dev_types_sector.incl.pl1 */ 7 2 7 3 7 4 /****^ HISTORY COMMENTS: 7 5* 1) change(86-04-21,Fawcett), approve(86-04-21,MCR7383), 7 6* audit(86-05-12,Coppola), install(86-07-18,MR12.0-1098): 7 7* Add the sector differance for devices that do 64 word IO and devices that 7 8* do 512 word IO. 7 9* END HISTORY COMMENTS */ 7 10 7 11 /* Created by R. A. Fawcett for 512 word IO. for procedures that do not 7 12* need all the data in fs_dev_types. This is also included in 7 13* fs_dev_types.incl.pl1 */ 7 14 7 15 dcl sect_per_cyl (9) fixed bin static options (constant) init /* table of # of sectors per cylinder on each device */ 7 16 (0, 760, 760, 760, 589, 360, 1280, 255, 255); 7 17 7 18 dcl sect_per_sv (9) fixed bin (24) static options (constant) init /* table of # of sectors per cylinder on each subvolume */ 7 19 (0, 0, 0, 0, 0, 0, 0, 112710, 150450); 7 20 7 21 dcl sect_per_rec (9) fixed bin static options (constant) init 7 22 /* table of # of sectors per record on each device */ 7 23 /* coresponding array in disk_pack.incl.pl1 called SECTORS_PER_RECORD */ 7 24 (0, 16, 16, 16, 16, 16, 16, 2, 2); 7 25 7 26 dcl sect_per_vtoc (9) fixed bin static options (constant) init 7 27 (0, 3, 3, 3, 3, 3, 3, 1, 1); 7 28 7 29 dcl vtoc_per_rec (9) fixed bin static options (constant) init 7 30 /* corespending array in disk_pack.incl.pl1 named VTOCES_PER_RECORD */ 7 31 (0, 5, 5, 5, 5, 5, 5, 2, 2); 7 32 7 33 dcl sect_per_track (9) fixed bin static options (constant) init /* table of # of sectors per track on each device */ 7 34 (0, 40, 40, 40, 31, 18, 64, 17, 17); 7 35 7 36 dcl words_per_sect (9) fixed bin static options (constant) init /* table of # of words per sector on each device */ 7 37 (0, 64, 64, 64, 64, 64, 64, 512, 512); 7 38 7 39 /* End fs_dev_types_sector.incl.pl1 */ 7 40 6 142 6 143 6 144 /* End of include file ...... fs_dev_types.incl.pl1 */ 1261 1262 1263 1264 /* BEGIN MESSAGE DOCUMENTATION 1265* 1266*Message: 1267*vtoc_man: Invalid free vtocx XXXXX on dskX_NN{s} 1268* 1269*S: $log 1270* 1271*T: $run 1272* 1273*M: A free VTOCE was allocated which has an invalid VTOCE index for the 1274*volume. This is indicative of damage to volume control structures. This 1275*damage can be corrected by a volume salvage. 1276* 1277*A: $ignore 1278* 1279*Message: 1280*vtoc_man: Out of buffers try number N 1281* 1282*S: $info 1283* 1284*T: $run 1285* 1286*M: There may be a disk problem which prevents the vtoc buffers 1287*from being written to disk, or there may be a disk tuning problem. 1288*The system may crash within the next few minutes. 1289* 1290*A: $contact_sa 1291* 1292*Message: 1293*vtoc_man: UID ^= 0 in free VTOCE vtocx XXXXX dskX_NN{s} 1294* 1295*S: $log 1296* 1297*T: $run 1298* 1299*M: The contents of VTOCE XXXXX on dskX_NN{s} are incorrect, as free 1300*VTOCEs should have a zero UID. The system attempts to find another free 1301*VTOCE. This may indicate damage to volume control structures. This damage 1302*can be corrected by a volume salvage. 1303* 1304*A: $ignore 1305* 1306* 1307*Message: 1308*vtoc_man: Buffer out-of-service during cleanup 1309* 1310*S: $crash 1311* 1312*T: When a volume is being demounted or during system shutdown. 1313* 1314*M: A likely software error in VTOC buffer management which caused 1315*an inconsistency in the VTOC buffer. 1316* 1317*A: $recover 1318* 1319* 1320*Message: 1321*vtoc_man: Hot buffer abandoned during cleanup vtocx XXXXX dskX_NN{s} 1322* 1323*S: $log 1324* 1325*T: When a volume is being demounted or during system shutdown. 1326* 1327*M: An update to VTOCE XXXXX on dskX_NN{s} could not be completed 1328*due to I/O errors. The VTOCE may be inconsistent or damaged. 1329* 1330*A: The VTOCE should be examined by means of dump_vtoce the next time 1331*the volume is online. Any inconsistency can be corrected by a volume salvage. 1332* 1333* 1334*Message: 1335*vtoc_man: Write I/O being retried by PERSON.PROJECT.TAG for dskX_NN{s} vtocx XXXXX 1336* 1337*S: $log 1338* 1339*T: $run 1340* 1341*M: A buffer previously marked as "hot" is being requeued for I/O. 1342* 1343*A: $ignore 1344* 1345* 1346*Message: 1347*vtoc_man: write I/O recovered on crawlout by PERSON.PROJECT.TAG for dskX_NN{s} vtocx XXXXX 1348* 1349*S: $log 1350* 1351*T: $run 1352* 1353*M: The process of PERSON.PROJECT.TAG crawled out of ring-0 or terminated 1354*with the VTOC buffer lock held. A buffer was marked out-of-service for write 1355*to VTOCE XXXXX on dskX_NN{s} for which no I/O had been queued. The write I/O 1356*was requeued. 1357* 1358*A: $ignore 1359* 1360* 1361*Message: 1362*vtoc_man: read reset of crawlout by PERSON.PROJECT.TAG for dskX_NN{s} vtocx XXXXXX 1363* 1364*S: $log 1365* 1366*T: $run 1367* 1368*M: The process of PERSON.PROJECT.TAG crawled out of ring-0 or terminated 1369*with the VTOC buffer lock held. A buffer was marked out-of-service for read 1370*to VTOCE XXXXX on dskX_NN{s} for which no I/O had been queued. The read I/O was 1371*abandoned. 1372* 1373*A: $ignore 1374* 1375* 1376*Message: 1377*vtoc_man: Update in progress on crawlout by PERSON.PROJECT.TAG dskX_NN{s} 1378* 1379*S: $log 1380* 1381*T: $run 1382* 1383*M: The process of PERSON.PROJECT.TAG crawled out of ring-0 or terminated 1384*with the vtoc buffer lock held and an update in progress for a VTOCE on dskX_NN{s}. 1385*The VTOCE may be inconsistent. Any inconsistency can be corrected by a volume salvage. 1386* 1387*A: $ignore 1388* 1389*Message: 1390*vtoc_man: Invalid write 1391* 1392*S: $crash 1393* 1394*T: $run 1395* 1396*M: A likely software error in the calling sequence for output of a VTOCE. 1397* 1398*A: $recover 1399* 1400* 1401*Message: 1402*vtoc_man: buffer out-of-service on write 1403* 1404*S: $crash 1405* 1406*T: $run 1407* 1408*M: A likely software problem has caused an inconsistency in 1409*the VTOC buffer. 1410* 1411*A: $recover 1412* 1413* 1414*Message: 1415*vtoc_man: Attempt to write less than entire VTOCE to MODEL device. 1416* 1417*S: $crash 1418* 1419*T: $run 1420* 1421*M: An attempt has been made to write less than the entire VTOCE to a 1422*device MODEL that only supports a 512_word sector. For these devices the 1423*entire 192 word VTOCE must be written at one time. A likely software error 1424*n VTOC buffer management. 1425* 1426*A: $recover 1427* 1428* 1429*END MESSAGE DOCUMENTATION */ 1430 end vtoc_man$get_vtoce; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 11/11/89 0851.5 vtoc_man.pl1 >spec>install>1115>vtoc_man.pl1 1251 1 10/22/86 1450.1 disk_pack.incl.pl1 >ldd>include>disk_pack.incl.pl1 1253 2 07/21/88 2036.0 pvte.incl.pl1 >ldd>include>pvte.incl.pl1 1255 3 05/17/85 0615.7 syserr_constants.incl.pl1 >ldd>include>syserr_constants.incl.pl1 1257 4 07/24/86 2051.8 vtoc_buffer.incl.pl1 >ldd>include>vtoc_buffer.incl.pl1 1259 5 10/04/83 1105.1 vtoce.incl.pl1 >ldd>include>vtoce.incl.pl1 1261 6 10/30/86 2010.5 fs_dev_types.incl.pl1 >ldd>include>fs_dev_types.incl.pl1 6-142 7 07/24/86 2051.8 fs_dev_types_sector.incl.pl1 >ldd>include>fs_dev_types_sector.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. ALL_PARTS 000074 constant bit(3) initial dcl 88 set ref 272 274* 277 336* 359* 362* 403* 457* 469* 1063 1108 CORE_OFFSET 000064 constant fixed bin(17,0) initial array dcl 89 ref 1115 CRASH 000121 constant fixed bin(17,0) initial dcl 3-7 set ref 573* 925* 1090* 1094* 1110* Clear_ptr parameter pointer dcl 708 ref 705 715 716 717 718 722 723 724 725 Clear_vtoce based structure level 1 dcl 711 Code parameter fixed bin(35,0) dcl 994 in procedure "READ" set ref 984 1005 1012* 1014* 1017* 1018 1042* Code parameter fixed bin(35,0) dcl 1171 in procedure "VALIDATE_VTOCX" set ref 1167 1173* 1175* Code parameter fixed bin(35,0) dcl 1194 in procedure "SETUP_LOCK" set ref 1190 1204* 1207* 1212* Code parameter fixed bin(35,0) dcl 60 in procedure "vtoc_man$get_vtoce" set ref 54 173* 197* 211 218* 234* 250 257* 295* 308 313* 371* 381 387* 412* 440 447* 480* 494 500* 531* 541 547* 588* Code parameter fixed bin(35,0) dcl 1136 in procedure "WAIT" set ref 1132 1140* 1152* 1153 Code parameter fixed bin(35,0) dcl 873 in procedure "GET_BUFFER" set ref 866 886 891* 958* 959 Code parameter fixed bin(35,0) dcl 1222 in procedure "LOCK_CHECK" set ref 1219 1224* 1228* 1230* 1232* Copy_Vtoce based structure level 1 dcl 99 ref 316 Copy_Vtocep parameter pointer dcl 59 set ref 54 194* 250 260* 308 316 From_Vtoce_Buffer based structure level 1 dcl 743 From_ptr parameter pointer dcl 738 ref 734 747 LOG 000123 constant fixed bin(17,0) initial dcl 3-7 set ref 682* 690* 813* 1033* MAX_PSEUDO_CLOCK 000063 constant fixed bin(35,0) initial dcl 90 ref 474 MAX_STEPS constant fixed bin(17,0) initial dcl 91 ref 925 MODELN 000000 constant fixed bin(17,0) initial array dcl 6-63 set ref 1110* Msg parameter char packed unaligned dcl 807 set ref 802 813* N_PARTS_PER_VTOCE constant fixed bin(17,0) initial dcl 4-102 ref 746 Parts parameter bit(3) dcl 709 in procedure "CLEAR_PAD" ref 705 713 720 Parts parameter bit(3) dcl 737 in procedure "COPY_PARTS" ref 734 747 Parts parameter bit(3) packed unaligned dcl 61 in procedure "vtoc_man$get_vtoce" ref 54 172 211 217 250 256 Parts parameter bit(3) dcl 1082 in procedure "WRITE" ref 1079 1093 1108 1119 1119 1121 Parts parameter bit(3) dcl 989 in procedure "READ" ref 984 1005 1048 1048 Pvid parameter bit(36) dcl 62 ref 54 169 211 214 250 253 308 311 381 384 440 444 494 497 Pvte based structure level 1 dcl 809 Pvtep parameter pointer dcl 805 ref 802 811 811 813 813 813 813 Pvtx parameter fixed bin(17,0) dcl 1193 in procedure "SETUP_LOCK" ref 1190 1207 1207 1209 Pvtx parameter fixed bin(17,0) dcl 63 in procedure "vtoc_man$get_vtoce" ref 54 170 211 215 250 254 308 312 381 385 440 445 494 498 541 545 Pvtx parameter fixed bin(17,0) dcl 987 in procedure "READ" set ref 984 1005 1014* 1017* 1032 1057 1059* Pvtx parameter fixed bin(17,0) dcl 869 in procedure "GET_BUFFER" set ref 866 886 897* 946 SECTORS_PER_VTOCE 000022 constant fixed bin(17,0) initial array dcl 1-70 set ref 272 792 1059* 1105 SECTORS_TO_WRITE 000043 constant fixed bin(17,0) initial array dcl 93 ref 1114 SECTOR_OFFSET 000053 constant fixed bin(17,0) initial array dcl 92 ref 1115 Sector_read_required parameter bit(1) dcl 992 set ref 984 1005 1010* 1061* To_Vtoce_Buffer based structure level 1 dcl 744 To_ptr parameter pointer dcl 739 ref 734 747 VALID_WRITE 000033 constant bit(1) initial array dcl 94 ref 1094 1119 VTOCES_PER_RECORD 000011 constant fixed bin(17,0) initial array dcl 1-72 ref 780 792 VTOC_ORIGIN constant fixed bin(17,0) initial dcl 1-54 ref 780 Vtoc_buf_desc based structure level 1 dcl 766 in procedure "CORE" Vtoc_buf_desc based structure level 1 dcl 1087 in procedure "WRITE" Vtoc_buf_desc based structure level 1 dcl 778 in procedure "RECORD" Vtoc_buf_desc based structure level 1 dcl 998 in procedure "READ" Vtoc_buf_desc based structure level 1 dcl 1138 in procedure "WAIT" Vtoc_buf_desc based structure level 1 dcl 879 in procedure "GET_BUFFER" Vtoc_buf_desc based structure level 1 dcl 789 in procedure "SECTOR" Vtoc_buf_desc based structure level 1 dcl 844 in procedure "FLUSH_BUFFER" set ref 852* Vtoc_buf_descp parameter pointer dcl 788 in procedure "SECTOR" ref 785 792 Vtoc_buf_descp parameter pointer dcl 777 in procedure "RECORD" ref 774 780 Vtoc_buf_descp parameter pointer dcl 1135 in procedure "WAIT" ref 1132 1143 1144 1146 1147 1157 Vtoc_buf_descp parameter pointer dcl 1083 in procedure "WRITE" set ref 1079 1090 1097 1098 1099 1100 1101 1103 1115 1115* 1115* 1115* 1115* 1118 1119 1119 1119 1121 Vtoc_buf_descp parameter pointer dcl 765 in procedure "CORE" ref 762 768 Vtoc_buf_descp parameter pointer dcl 843 in procedure "FLUSH_BUFFER" set ref 840 846* 848 852 Vtoc_buf_descp parameter pointer dcl 990 in procedure "READ" set ref 984 1005 1014* 1017* 1021 1024 1026 1026* 1036 1038 1038* 1043* 1048 1051 1052 1053 1054 1055 1059* 1059* 1059* 1059* 1059* 1059* 1062 1063 Vtoc_buf_descp parameter pointer dcl 871 in procedure "GET_BUFFER" set ref 866 886 897* 900 904 912* 914 917 919 919 921 943 943* 946 947 948 949 950 952* 956 958* 961* 969 Vtoc_bufp parameter pointer dcl 872 in procedure "GET_BUFFER" set ref 866 886 962* 969* Vtoc_bufp parameter pointer dcl 991 in procedure "READ" set ref 984 1005 1014* 1017* 1044* Vtocx parameter fixed bin(17,0) dcl 870 in procedure "GET_BUFFER" set ref 866 886 897* 947 Vtocx parameter fixed bin(17,0) dcl 988 in procedure "READ" set ref 984 1005 1014* 1017* 1033* Vtocx parameter fixed bin(17,0) dcl 806 in procedure "SET_VOL_TROUBLE" set ref 802 813 813* Vtocx parameter fixed bin(17,0) dcl 1170 in procedure "VALIDATE_VTOCX" ref 1167 1173 1173 Vtocx parameter fixed bin(17,0) dcl 64 in procedure "vtoc_man$get_vtoce" ref 54 171 211 216 250 255 381 386 440 446 494 499 abs_addr 6 based fixed bin(24,0) level 2 dcl 4-25 ref 768 addr builtin function dcl 146 ref 194 194 260 260 284 284 285 285 359 359 552 560 569 606 614 646 649 658 663 671 671 673 673 679 829 912 950 1031 1032 1057 1103 1199 1202 1209 1236 1236 1245 1245 being_demounted2 4(29) based bit(1) level 2 packed packed unaligned dcl 2-26 ref 1232 bin builtin function dcl 147 ref 669 768 780 848 848 1093 1119 1144 bit builtin function dcl 148 ref 669 780 1144 buf_desc_offset 10 based bit(18) level 2 dcl 4-25 ref 647 1200 buf_offset 11 based bit(18) level 2 dcl 4-25 ref 648 1201 buf_rel 2(18) based bit(18) level 2 in structure "Vtoc_buf_desc" packed packed unaligned dcl 766 in procedure "CORE" ref 768 buf_rel 2(18) based bit(18) level 2 in structure "Vtoc_buf_desc" packed packed unaligned dcl 879 in procedure "GET_BUFFER" set ref 950* 969 bufx 000100 automatic fixed bin(17,0) dcl 68 set ref 551* 552* 559* 560* 568* 569* 613* 614* 662* 663* 828* 829* 908* 912 927* 927 928 928* 930 937 940 949 950 call_alloc 20 based fixed bin(35,0) level 3 dcl 4-25 set ref 369* 369 call_await 22 based fixed bin(35,0) level 3 dcl 4-25 set ref 529* 529 call_free 21 based fixed bin(35,0) level 3 dcl 4-25 set ref 410* 410 call_get 16 based fixed bin(35,0) level 3 dcl 4-25 set ref 192* 192 call_put 17 based fixed bin(35,0) level 3 dcl 4-25 set ref 294* 294 code 000101 automatic fixed bin(35,0) dcl 69 in procedure "vtoc_man$get_vtoce" set ref 175* 176 179* 180 184* 185 194 197 220* 221 224* 225 228* 234 263* 264 267* 268 274* 275 280* 282 295 318* 319 329* 330 336* 337 349* 350 371 389* 390 393* 394 397* 399 412 449* 450 453* 454 457* 458 464* 471* 480 502* 503 506* 507 518* 519 524* 531 549* 563* 567* 580* 588 609* code 000616 automatic fixed bin(35,0) dcl 1197 in procedure "SETUP_LOCK" set ref 1211* 1212 1212 convert builtin function dcl 149 ref 682 682 690 690 813 813 1033 1033 dctl$read_sectors 000034 constant entry external dcl 122 ref 1059 dctl$write_sectors 000036 constant entry external dcl 123 ref 1115 dev_type 000102 automatic fixed bin(17,0) dcl 70 set ref 780 792 792 1057* 1059 1103* 1105 1110 device_inoperative 4(25) based bit(1) level 2 packed packed unaligned dcl 2-26 ref 1230 device_type 4 based fixed bin(8,0) level 2 packed packed unaligned dcl 2-26 ref 272 1057 1103 devname 3 based char(4) level 2 dcl 2-26 set ref 682* 690* 1033* disk_reads 27 based fixed bin(35,0) level 3 dcl 4-25 set ref 1065* 1065 disk_run 000040 constant entry external dcl 124 ref 933 disk_writes 30 based fixed bin(35,0) level 3 dcl 4-25 set ref 1123* 1123 divide builtin function dcl 150 ref 780 848 err 1(03) based bit(1) level 2 in structure "Vtoc_buf_desc" packed packed unaligned dcl 879 in procedure "GET_BUFFER" ref 919 err 1(03) based bit(1) level 2 in structure "Vtoc_buf_desc" packed packed unaligned dcl 1087 in procedure "WRITE" set ref 1097* err 1(03) based bit(1) level 2 in structure "Vtoc_buf_desc" packed packed unaligned dcl 998 in procedure "READ" set ref 1024 1052* err 1(03) based bit(1) level 2 in structure "vtoc_buf_desc" packed packed unaligned dcl 4-80 in procedure "vtoc_man$get_vtoce" set ref 524 553 575 618* error_table_$invalid_pvtx 000010 external static fixed bin(35,0) dcl 103 ref 1207 error_table_$invalid_vtocx 000012 external static fixed bin(35,0) dcl 105 ref 1173 error_table_$pvid_not_found 000014 external static fixed bin(35,0) dcl 107 ref 1228 1232 error_table_$vtoc_io_err 000016 external static fixed bin(35,0) dcl 109 ref 524 580 1042 1230 error_table_$vtoce_free 000020 external static fixed bin(35,0) dcl 111 ref 464 first_time 000550 automatic bit(1) dcl 875 set ref 894* 900 902* get_buffer_calls 31 based fixed bin(35,0) level 3 dcl 4-25 set ref 893* 893 get_buffer_hits 32 based fixed bin(35,0) level 3 dcl 4-25 set ref 900* 900 hash_table 56 based bit(18) array level 2 dcl 4-25 set ref 826* hot_buffer_tried 000103 automatic bit(1) packed unaligned dcl 71 set ref 1013* 1028 1030* ioq 1(07) based bit(1) level 2 in structure "vtoc_buf_desc" packed packed unaligned dcl 4-80 in procedure "vtoc_man$get_vtoce" ref 664 674 ioq 1(07) based bit(1) level 2 in structure "Vtoc_buf_desc" packed packed unaligned dcl 998 in procedure "READ" set ref 1054* 1062* ioq 1(07) based bit(1) level 2 in structure "Vtoc_buf_desc" packed packed unaligned dcl 1087 in procedure "WRITE" set ref 1099* 1118* local_vtoce_buffer 000104 automatic structure level 1 dcl 72 set ref 188* 194 194 260 260 284 284 285 285 316* 359 359 361 lock based structure level 2 dcl 4-25 set ref 671 671 673 673 1236 1236 1245 1245 lock$lock_fast 000042 constant entry external dcl 125 ref 673 1236 lock$unlock_fast 000044 constant entry external dcl 126 ref 671 1245 logical_area_number 4(09) based fixed bin(8,0) level 2 packed packed unaligned dcl 2-26 ref 682 682 690 690 1033 1033 meters 16 based structure level 2 dcl 4-25 mod builtin function dcl 151 ref 792 n_bufs 3 based fixed bin(17,0) level 2 dcl 4-25 ref 551 559 568 613 662 828 928 937 n_hash_buckets 4 based fixed bin(17,0) level 2 dcl 4-25 ref 826 n_sectors 000573 automatic fixed bin(17,0) dcl 1089 set ref 1107* 1114* 1115* n_vtoce 17(18) based fixed bin(17,0) level 2 packed packed unaligned dcl 2-26 ref 1173 notify_sw 1(04) based bit(1) level 2 in structure "Vtoc_buf_desc" packed packed unaligned dcl 1138 in procedure "WAIT" set ref 1146* 1157* notify_sw 1(04) based bit(1) level 2 in structure "Vtoc_buf_desc" packed packed unaligned dcl 998 in procedure "READ" set ref 1053* notify_sw 1(04) based bit(1) level 2 in structure "Vtoc_buf_desc" packed packed unaligned dcl 1087 in procedure "WRITE" set ref 1098* notify_sw 1(04) based bit(1) level 2 in structure "Vtoc_buf_desc" packed packed unaligned dcl 879 in procedure "GET_BUFFER" ref 921 null builtin function dcl 152 ref 513 900 904 961 962 1043 1044 1205 1226 old_pseudo_clock 000404 automatic fixed bin(35,0) dcl 74 set ref 322* 346 os 1(06) based bit(1) level 2 in structure "Vtoc_buf_desc" packed packed unaligned dcl 998 in procedure "READ" set ref 1021 1036* 1055* os 1(06) based bit(1) level 2 in structure "vtoc_buf_desc" packed packed unaligned dcl 4-80 in procedure "vtoc_man$get_vtoce" set ref 516 553 561 573 615 619* 664 674 686* os 1(06) based bit(1) level 2 in structure "Vtoc_buf_desc" packed packed unaligned dcl 1138 in procedure "WAIT" ref 1143 1147 os 1(06) based bit(1) level 2 in structure "Vtoc_buf_desc" packed packed unaligned dcl 879 in procedure "GET_BUFFER" ref 917 956 os 1(06) based bit(1) level 2 in structure "Vtoc_buf_desc" packed packed unaligned dcl 1087 in procedure "WRITE" set ref 1090 1101* p99 automatic picture(2) packed unaligned dcl 75 ref 682 682 690 690 813 813 1033 1033 pad2 2(27) based bit(9) level 2 packed packed unaligned dcl 711 set ref 716* pad3 5(10) based bit(8) level 2 packed packed unaligned dcl 711 set ref 717* pad4 5(20) based bit(16) level 2 packed packed unaligned dcl 711 set ref 718* pad6 220 based bit(36) array level 2 packed packed unaligned dcl 711 set ref 722* pad7 232(01) based bit(17) level 2 packed packed unaligned dcl 711 set ref 723* pad8 232(18) based bit(18) level 2 packed packed unaligned dcl 711 set ref 724* pad9 276(01) based bit(35) level 3 packed packed unaligned dcl 711 set ref 725* pad_free_vtoce_chain based bit(36) level 2 packed packed unaligned dcl 711 set ref 715* parts based structure array level 2 in structure "From_Vtoce_Buffer" dcl 743 in procedure "COPY_PARTS" ref 747 parts based structure array level 2 in structure "To_Vtoce_Buffer" dcl 744 in procedure "COPY_PARTS" set ref 747* parts 000405 automatic bit(3) dcl 76 in procedure "vtoc_man$get_vtoce" set ref 172* 184* 194* 217* 228* 256* 259 260* 272 284* 285* parts based structure array level 2 in structure "vtoce_buffer" dcl 4-97 in procedure "vtoc_man$get_vtoce" set ref 402* parts_to_write 000406 automatic bit(3) dcl 77 set ref 259* 277* 288* parts_used 1 based bit(3) level 2 in structure "Vtoc_buf_desc" packed packed unaligned dcl 1087 in procedure "WRITE" set ref 1119 1119* 1119 1121* parts_used 1 based bit(3) level 2 in structure "vtoc_buf_desc" packed packed unaligned dcl 4-80 in procedure "vtoc_man$get_vtoce" ref 553 687 parts_used 1 based bit(3) level 2 in structure "Vtoc_buf_desc" packed packed unaligned dcl 998 in procedure "READ" set ref 1038 1048 1063* partsx 000572 automatic fixed bin(17,0) dcl 1085 in procedure "WRITE" set ref 1093* 1094 1114 1115 1115 partsx 000472 automatic fixed bin(17,0) dcl 741 in procedure "COPY_PARTS" set ref 746* 747 747 747* pds$process_group_id 000024 external static char(32) dcl 114 set ref 659 682* 690* 1033* pds$processid 000022 external static bit(36) dcl 113 ref 651 pds$vtoc_reads 000026 external static fixed bin(35,0) dcl 116 set ref 1066* 1066 pds$vtoc_writes 000030 external static fixed bin(35,0) dcl 117 set ref 1124* 1124 perm_flags 276 based structure level 2 dcl 711 processid based bit(36) level 3 dcl 4-25 set ref 607* 651 ptr builtin function dcl 153 ref 647 648 969 1200 1201 pvid 000407 automatic bit(36) dcl 78 in procedure "vtoc_man$get_vtoce" set ref 169* 214* 253* 311* 384* 444* 497* 544* 602* 1228 1228 pvid based bit(36) level 2 in structure "pvte" dcl 2-26 in procedure "vtoc_man$get_vtoce" ref 1228 pvt$array 000074 external static fixed bin(17,0) dcl 2-18 set ref 649 1031 1202 pvt$n_entries 000032 external static fixed bin(17,0) dcl 118 ref 1207 pvt_array based structure array level 1 dcl 2-24 set ref 658 679 1032 1057 1103 1209 pvt_arrayp 000416 automatic pointer dcl 2-21 set ref 649* 658 679 1031* 1032 1057 1103 1202* 1209 pvte based structure level 1 dcl 2-26 pvtep 000420 automatic pointer dcl 2-22 set ref 272 325* 332* 342* 349* 405* 471* 578* 658* 659* 679* 682 682 682 682 690 690 690 690 1032* 1033 1033 1033 1033 1173 1205* 1209* 1226 1228 1230 1232 pvtx 000410 automatic fixed bin(17,0) dcl 79 in procedure "vtoc_man$get_vtoce" set ref 170* 175* 184* 215* 220* 228* 254* 263* 271 274* 280* 312* 318* 336* 357 385* 389* 397* 445* 449* 457* 498* 502* 510* 545* 549* 553 561 570 603* 609* 667* 674 679 pvtx based fixed bin(17,0) level 2 in structure "Vtoc_buf_desc" packed packed unaligned dcl 1087 in procedure "WRITE" ref 1103 1115 pvtx based fixed bin(17,0) level 2 in structure "vtoc_buf_desc" packed packed unaligned dcl 4-80 in procedure "vtoc_man$get_vtoce" ref 553 561 570 667 674 pvtx based fixed bin(17,0) level 2 in structure "Vtoc_buf_desc" packed packed unaligned dcl 879 in procedure "GET_BUFFER" set ref 946* pxss$addevent 000046 constant entry external dcl 127 ref 670 1145 pxss$delevent 000050 constant entry external dcl 128 ref 1156 pxss$wait 000052 constant entry external dcl 129 ref 672 1151 rel builtin function dcl 154 ref 848 848 950 return_vtocx 000411 automatic fixed bin(17,0) dcl 80 set ref 314* 364* 372 scavenger_free_checks 35 based fixed bin(35,0) level 3 dcl 4-25 set ref 348* 348 scavenger_free_losses 36 based fixed bin(35,0) level 3 dcl 4-25 set ref 352* 352 scavenger_free_p_clock 15 based fixed bin(35,0) level 2 dcl 4-25 set ref 322 346 473* 473 474 474* search_index 13 based fixed bin(17,0) level 2 dcl 4-25 set ref 848* 908 930 937* 940* sector_read_required 000412 automatic bit(1) dcl 81 set ref 184* 228* 258* 274* 289 336* 457* seek_command 000436 automatic bit(6) initial array packed unaligned dcl 6-84 set ref 6-84* 6-84* 6-84* 6-84* 6-84* 6-84* 6-84* 6-84* 6-84* size builtin function dcl 155 ref 848 skip_hot 25 based fixed bin(35,0) level 3 dcl 4-25 set ref 919* 919 skip_os 24 based fixed bin(35,0) level 3 dcl 4-25 set ref 917* 917 skip_wait 26 based fixed bin(35,0) level 3 dcl 4-25 set ref 921* 921 skip_waiting 000551 automatic bit(1) dcl 876 set ref 907* 921 932* soft_rar 37 based fixed bin(35,0) level 3 dcl 4-25 set ref 289* 289 steps 23 based fixed bin(35,0) level 3 in structure "vtoc_buffer" dcl 4-25 in procedure "vtoc_man$get_vtoce" set ref 910* 910 steps 000552 automatic fixed bin(17,0) dcl 877 in procedure "GET_BUFFER" set ref 906* 911* 911 925 substr builtin function dcl 156 ref 747 sv_name 15 based char(2) level 2 dcl 2-26 set ref 682* 690* 1033* syserr 000054 constant entry external dcl 130 ref 573 682 690 813 925 1033 1090 1094 1110 uid 1 based bit(36) level 2 packed packed unaligned dcl 5-7 set ref 340 462 unsafe_pvtx 14 based fixed bin(17,0) level 2 dcl 4-25 set ref 271* 291* 357* 366* 656 658 unspec builtin function dcl 157 set ref 188* 188 316* 316 361* 361 402* 468* 722* 747* 747 826* 852* used 1(08) based bit(1) level 2 in structure "vtoc_buf_desc" packed packed unaligned dcl 4-80 in procedure "vtoc_man$get_vtoce" ref 553 561 570 615 664 674 830 used 1(08) based bit(1) level 2 in structure "Vtoc_buf_desc" packed packed unaligned dcl 879 in procedure "GET_BUFFER" set ref 914 943 948* vtoc_buf_arrayp 000432 automatic pointer dcl 4-19 set ref 648* 950 1201* vtoc_buf_desc based structure level 1 dcl 4-80 set ref 848 vtoc_buf_desc_array based structure array level 1 dcl 4-77 set ref 552 560 569 614 663 829 912 vtoc_buf_desc_arrayp 000430 automatic pointer dcl 4-18 set ref 552 560 569 614 647* 663 829 848 912 1200* vtoc_buf_descp 000424 automatic pointer dcl 4-16 set ref 184* 228* 274* 280* 288* 336* 362* 397* 403* 457* 469* 510* 513 516 518* 524 524 552* 553 553 553 553 553 553 553* 560* 561 561 561 563* 569* 570 570 573 575 575 578 582* 614* 615 615 615 618 619 621* 663* 664 664 664 667 668 669 674 674 674 674 674 680 686 687 687* 694* 829* 830 830* 848 vtoc_buffer based structure level 1 dcl 4-25 vtoc_buffer_seg$ 000076 external static fixed bin(17,0) dcl 4-13 set ref 606 646 1199 vtoc_buffer_segp 000422 automatic pointer dcl 4-15 set ref 192 192 271 289 289 291 294 294 322 346 348 348 352 352 357 366 369 369 410 410 473 473 474 474 529 529 551 559 568 606* 607 613 646* 647 647 648 648 651 656 658 662 669 671 671 673 673 768 826 828 848 893 893 900 900 908 910 910 917 917 919 919 921 921 928 930 937 937 940 969 1065 1065 1123 1123 1141 1141 1144 1149 1149 1199* 1200 1200 1201 1201 1236 1236 1245 1245 vtoc_bufp 000426 automatic pointer dcl 4-17 set ref 184* 188 228* 274* 280* 285* 336* 339 361 397* 402 457* 461 vtoc_search$hash_in 000056 constant entry external dcl 131 ref 830 952 vtoc_search$hash_out 000060 constant entry external dcl 132 ref 846 vtoc_search$search 000062 constant entry external dcl 134 ref 510 897 vtoce based structure level 1 dcl 5-7 set ref 468* vtoce_buffer based structure level 1 dcl 4-97 set ref 188 361* vtoce_buffer_array based structure array level 1 dcl 4-95 set ref 950 vtoce_stock_man$check_in_use 000064 constant entry external dcl 135 ref 349 vtoce_stock_man$get_free_vtoce 000066 constant entry external dcl 137 ref 325 vtoce_stock_man$return_free_vtoce 000072 constant entry external dcl 141 ref 405 vtoce_stock_man$return_if_not_free 000070 constant entry external dcl 139 ref 471 vtocep 000434 automatic pointer dcl 5-5 set ref 339* 340 461* 462 468 vtocx 0(18) based fixed bin(17,0) level 2 in structure "Vtoc_buf_desc" packed packed unaligned dcl 789 in procedure "SECTOR" ref 792 vtocx 000413 automatic fixed bin(17,0) dcl 83 in procedure "vtoc_man$get_vtoce" set ref 171* 179* 184* 216* 224* 228* 255* 267* 274* 280* 325* 326 329* 332* 336* 342* 349* 364 386* 393* 397* 405* 446* 453* 457* 471* 499* 506* 510* 546* 604* 668* 674 682* 690* vtocx 0(18) based fixed bin(17,0) level 2 in structure "Vtoc_buf_desc" packed packed unaligned dcl 778 in procedure "RECORD" ref 780 vtocx 0(18) based fixed bin(17,0) level 2 in structure "vtoc_buf_desc" packed packed unaligned dcl 4-80 in procedure "vtoc_man$get_vtoce" ref 578 668 674 vtocx 0(18) based fixed bin(17,0) level 2 in structure "Vtoc_buf_desc" packed packed unaligned dcl 879 in procedure "GET_BUFFER" set ref 947* wait_calls 33 based fixed bin(35,0) level 3 dcl 4-25 set ref 1141* 1141 wait_event 000414 automatic bit(36) dcl 84 set ref 669* 670* 1144* 1145* 1156* wait_event_constant 7 based fixed bin(36,0) level 2 packed packed unsigned unaligned dcl 4-25 ref 669 1144 wait_index 1(18) based fixed bin(17,0) level 2 in structure "Vtoc_buf_desc" packed packed unaligned dcl 1138 in procedure "WAIT" ref 1144 wait_index 1(18) based fixed bin(17,0) level 2 in structure "vtoc_buf_desc" packed packed unaligned dcl 4-80 in procedure "vtoc_man$get_vtoce" ref 669 wait_index 1(18) based fixed bin(17,0) level 2 in structure "Vtoc_buf_desc" packed packed unaligned dcl 879 in procedure "GET_BUFFER" set ref 949* wait_os 34 based fixed bin(35,0) level 3 dcl 4-25 set ref 1149* 1149 wait_sw 000562 automatic bit(1) dcl 996 in procedure "READ" set ref 1001* 1008* 1014 1021 1068 wait_sw 000553 automatic bit(1) dcl 878 in procedure "GET_BUFFER" set ref 882* 889* 956 write_sw 1(05) based bit(1) level 2 in structure "Vtoc_buf_desc" packed packed unaligned dcl 879 in procedure "GET_BUFFER" ref 919 write_sw 1(05) based bit(1) level 2 in structure "vtoc_buf_desc" packed packed unaligned dcl 4-80 in procedure "vtoc_man$get_vtoce" ref 524 553 575 615 680 write_sw 1(05) based bit(1) level 2 in structure "Vtoc_buf_desc" packed packed unaligned dcl 1087 in procedure "WRITE" set ref 1100* write_sw 1(05) based bit(1) level 2 in structure "Vtoc_buf_desc" packed packed unaligned dcl 998 in procedure "READ" set ref 1026 1051* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. ANNOUNCE internal static fixed bin(17,0) initial dcl 3-7 BEEP internal static fixed bin(17,0) initial dcl 3-7 DEFAULT_HCPART_SIZE internal static fixed bin(17,0) initial dcl 1-54 DUMPER_BIT_MAP_ADDR internal static fixed bin(17,0) initial dcl 1-54 JUST_LOG internal static fixed bin(17,0) initial dcl 3-7 LABEL_ADDR internal static fixed bin(17,0) initial dcl 1-54 MAX_VTOCE_PER_PACK internal static fixed bin(17,0) initial dcl 1-54 MODEL internal static fixed bin(17,0) initial array dcl 6-57 MODELX internal static fixed bin(17,0) initial array dcl 6-60 N_SECTOR_PER_VTOCE internal static fixed bin(17,0) initial dcl 4-106 N_VTOCE_PER_RECORD internal static fixed bin(17,0) initial dcl 4-105 PAGE_SIZE internal static fixed bin(17,0) initial dcl 1-67 SECTORS_PER_RECORD internal static fixed bin(17,0) initial array dcl 1-74 SYSERR_COVERT_CHANNEL internal static fixed bin(17,0) initial dcl 3-7 SYSERR_CRASH_SYSTEM internal static fixed bin(17,0) initial dcl 3-7 SYSERR_LOG_OR_DISCARD internal static fixed bin(17,0) initial dcl 3-7 SYSERR_LOG_OR_PRINT internal static fixed bin(17,0) initial dcl 3-7 SYSERR_PRINT_ON_CONSOLE internal static fixed bin(17,0) initial dcl 3-7 SYSERR_PRINT_WITH_ALARM internal static fixed bin(17,0) initial dcl 3-7 SYSERR_RING1_ERROR internal static fixed bin(17,0) initial dcl 3-7 SYSERR_SUCCESSFUL_ACCESS internal static fixed bin(17,0) initial dcl 3-7 SYSERR_SYSTEM_ERROR internal static fixed bin(17,0) initial dcl 3-7 SYSERR_TERMINATE_PROCESS internal static fixed bin(17,0) initial dcl 3-7 SYSERR_UNSUCCESSFUL_ACCESS internal static fixed bin(17,0) initial dcl 3-7 TERMINATE_PROCESS internal static fixed bin(17,0) initial dcl 3-7 VOLMAP_ADDR internal static fixed bin(17,0) initial dcl 1-54 VOLMAP_ASYNC_IDLE internal static fixed bin(17,0) initial dcl 2-113 VOLMAP_ASYNC_READ internal static fixed bin(17,0) initial dcl 2-113 VOLMAP_ASYNC_WRITE internal static fixed bin(17,0) initial dcl 2-113 VTOCE_BUFFER_SIZE internal static fixed bin(17,0) initial dcl 4-104 VTOCE_PART_SIZE internal static fixed bin(17,0) initial dcl 4-103 VTOCE_SIZE internal static fixed bin(17,0) initial dcl 1-68 VTOC_MAP_ADDR internal static fixed bin(17,0) initial dcl 1-54 bulkdevt internal static fixed bin(4,0) initial dcl 6-43 cyl_per_dev internal static fixed bin(17,0) initial array dcl 6-102 cyl_per_sv internal static fixed bin(17,0) initial array dcl 6-105 dev_time internal static float bin(27) initial array dcl 6-139 device_names internal static char(4) initial array dcl 6-66 dsu181devt internal static fixed bin(4,0) initial dcl 6-43 dsu190devt internal static fixed bin(4,0) initial dcl 6-43 dsu191devt internal static fixed bin(4,0) initial dcl 6-43 fips3380devt internal static fixed bin(4,0) initial dcl 6-43 fips3381devt internal static fixed bin(4,0) initial dcl 6-43 fips_type_disk internal static bit(1) initial array packed unaligned dcl 6-72 first_alt_sect_num internal static fixed bin(24,0) initial array dcl 6-130 first_dev_number internal static fixed bin(17,0) initial array dcl 6-69 first_rec_num internal static fixed bin(17,0) initial array dcl 6-115 first_sect_num internal static fixed bin(24,0) initial array dcl 6-124 last_alt_sect_num internal static fixed bin(24,0) initial array dcl 6-133 last_physical_sect_num internal static fixed bin(24,0) initial array dcl 6-136 last_rec_num internal static fixed bin(18,0) initial array dcl 6-118 last_sect_num internal static fixed bin(24,0) initial array dcl 6-127 last_sv_rec_num internal static fixed bin(18,0) initial array dcl 6-121 maxdevt internal static fixed bin(4,0) initial dcl 6-43 media_removable internal static bit(1) initial array packed unaligned dcl 6-75 msu0400devt internal static fixed bin(4,0) initial dcl 6-43 msu0450devt internal static fixed bin(4,0) initial dcl 6-43 msu0451devt internal static fixed bin(4,0) initial dcl 6-43 msu0500devt internal static fixed bin(4,0) initial dcl 6-43 msu0501devt internal static fixed bin(4,0) initial dcl 6-43 needs_alt_part internal static bit(1) initial array packed unaligned dcl 6-81 number_of_sv internal static fixed bin(17,0) initial array dcl 6-93 pvt$max_n_entries external static fixed bin(17,0) dcl 2-19 rec_per_cyl internal static fixed bin(17,0) initial array dcl 6-108 rec_per_dev internal static fixed bin(21,0) initial array dcl 6-87 rec_per_sv internal static fixed bin(17,0) initial array dcl 6-90 sect_per_cyl internal static fixed bin(17,0) initial array dcl 7-15 sect_per_rec internal static fixed bin(17,0) initial array dcl 7-21 sect_per_sv internal static fixed bin(24,0) initial array dcl 7-18 sect_per_track internal static fixed bin(17,0) initial array dcl 7-33 sect_per_vtoc internal static fixed bin(17,0) initial array dcl 7-26 seg_vtoce based structure level 1 dcl 5-92 shared_spindle internal static bit(1) initial array packed unaligned dcl 6-78 tracks_per_cyl internal static fixed bin(17,0) initial array dcl 6-111 valid_sv_array internal static char(1) initial array packed unaligned dcl 6-99 valid_sv_string internal static char(3) initial packed unaligned dcl 6-96 vtoc_buf_n_buckets automatic fixed bin(17,0) dcl 4-22 vtoc_buf_n_buffers automatic fixed bin(17,0) dcl 4-21 vtoc_per_rec internal static fixed bin(17,0) initial array dcl 7-29 vtoce_parts based bit(2304) array dcl 5-90 words_per_sect internal static fixed bin(17,0) initial array dcl 7-36 NAMES DECLARED BY EXPLICIT CONTEXT. ALLOC_PUT_RETURNS 001217 constant label dcl 366 ref 319 326 337 AWAIT_RETURNS 001563 constant label dcl 527 ref 503 507 513 519 CLEAR_PAD 002534 constant entry internal dcl 705 ref 284 359 COPY_PARTS 002573 constant entry internal dcl 734 ref 194 260 285 CORE 002630 constant entry internal dcl 762 ref 1059 1059 1115 FLUSH_BUFFER 003050 constant entry internal dcl 840 ref 582 621 694 943 1026 FOUND 003304 constant label dcl 937 ref 914 921 FREE_FOR_SCAVENGE_RETURNS 001453 constant label dcl 477 ref 450 454 458 465 FREE_VTOCE_RETURNS 001330 constant label dcl 408 set ref 390 394 399 GET_BUFFER 003104 constant entry internal dcl 866 ref 280 397 1014 GET_BUFFER_JOIN 003114 constant label dcl 891 ref 883 GET_BUFFER_NOWAIT 003111 constant entry internal dcl 886 ref 1017 GET_BUFFER_RETRY 003125 constant label dcl 897 ref 965 GET_VTOCE_RETURNS 000524 constant label dcl 190 ref 176 180 185 LOCK_CHECK 004507 constant entry internal dcl 1219 ref 1152 1211 PUT_VTOCE_RETURNS 001005 constant label dcl 291 ref 264 268 275 282 READ 003423 constant entry internal dcl 984 ref 184 274 336 457 READ_AHEAD 003430 constant entry internal dcl 1005 ref 228 READ_AHEAD_VTOCE_RETURNS 000632 constant label dcl 230 ref 221 225 READ_JOIN 003433 constant label dcl 1010 ref 1002 RECORD 002642 constant entry internal dcl 774 ref 1059 1059 1115 1115 RETHREAD 003007 constant entry internal dcl 823 ref 611 654 RETRY_ALLOC 001072 constant label dcl 322 ref 333 343 353 RETRY_AWAIT 001524 constant label dcl 510 ref 521 RETRY_READ 003437 constant label dcl 1014 ref 1039 1068 SECTOR 002661 constant entry internal dcl 785 ref 1059 1059 1115 SETUP_LOCK 004444 constant entry internal dcl 1190 ref 175 220 263 318 389 449 502 549 609 SET_VOL_TROUBLE 002676 constant entry internal dcl 802 ref 332 342 578 659 UNLOCK 004556 constant entry internal dcl 1242 ref 190 230 293 368 408 477 527 586 624 1150 VALIDATE_VTOCX 004424 constant entry internal dcl 1167 ref 179 224 267 329 393 453 506 WAIT 004305 constant entry internal dcl 1132 ref 518 563 958 WRITE 004007 constant entry internal dcl 1079 ref 288 362 403 469 553 687 1038 alloc_and_put_vtoce 001033 constant entry external dcl 308 await_vtoce 001467 constant entry external dcl 494 cleanup_pv 001606 constant entry external dcl 541 crawlout 002132 constant entry external dcl 642 free_vtoce 001250 constant entry external dcl 381 free_vtoce_for_scavenge 001351 constant entry external dcl 440 put_vtoce 000646 constant entry external dcl 250 read_ahead_vtoce 000566 constant entry external dcl 211 stabilize 002042 constant entry external dcl 599 vtoc_man$get_vtoce 000450 constant entry external dcl 54 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 5520 5620 5057 5530 Length 6242 5057 100 405 440 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME vtoc_man$get_vtoce 712 external procedure is an external procedure. CLEAR_PAD internal procedure shares stack frame of external procedure vtoc_man$get_vtoce. COPY_PARTS internal procedure shares stack frame of external procedure vtoc_man$get_vtoce. CORE internal procedure shares stack frame of external procedure vtoc_man$get_vtoce. RECORD internal procedure shares stack frame of external procedure vtoc_man$get_vtoce. SECTOR internal procedure shares stack frame of external procedure vtoc_man$get_vtoce. SET_VOL_TROUBLE internal procedure shares stack frame of external procedure vtoc_man$get_vtoce. RETHREAD internal procedure shares stack frame of external procedure vtoc_man$get_vtoce. FLUSH_BUFFER internal procedure shares stack frame of external procedure vtoc_man$get_vtoce. GET_BUFFER internal procedure shares stack frame of external procedure vtoc_man$get_vtoce. READ internal procedure shares stack frame of external procedure vtoc_man$get_vtoce. WRITE internal procedure shares stack frame of external procedure vtoc_man$get_vtoce. WAIT internal procedure shares stack frame of external procedure vtoc_man$get_vtoce. VALIDATE_VTOCX internal procedure shares stack frame of external procedure vtoc_man$get_vtoce. SETUP_LOCK internal procedure shares stack frame of external procedure vtoc_man$get_vtoce. LOCK_CHECK internal procedure shares stack frame of external procedure vtoc_man$get_vtoce. UNLOCK internal procedure shares stack frame of external procedure vtoc_man$get_vtoce. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME vtoc_man$get_vtoce 000100 bufx vtoc_man$get_vtoce 000101 code vtoc_man$get_vtoce 000102 dev_type vtoc_man$get_vtoce 000103 hot_buffer_tried vtoc_man$get_vtoce 000104 local_vtoce_buffer vtoc_man$get_vtoce 000404 old_pseudo_clock vtoc_man$get_vtoce 000405 parts vtoc_man$get_vtoce 000406 parts_to_write vtoc_man$get_vtoce 000407 pvid vtoc_man$get_vtoce 000410 pvtx vtoc_man$get_vtoce 000411 return_vtocx vtoc_man$get_vtoce 000412 sector_read_required vtoc_man$get_vtoce 000413 vtocx vtoc_man$get_vtoce 000414 wait_event vtoc_man$get_vtoce 000416 pvt_arrayp vtoc_man$get_vtoce 000420 pvtep vtoc_man$get_vtoce 000422 vtoc_buffer_segp vtoc_man$get_vtoce 000424 vtoc_buf_descp vtoc_man$get_vtoce 000426 vtoc_bufp vtoc_man$get_vtoce 000430 vtoc_buf_desc_arrayp vtoc_man$get_vtoce 000432 vtoc_buf_arrayp vtoc_man$get_vtoce 000434 vtocep vtoc_man$get_vtoce 000436 seek_command vtoc_man$get_vtoce 000472 partsx COPY_PARTS 000550 first_time GET_BUFFER 000551 skip_waiting GET_BUFFER 000552 steps GET_BUFFER 000553 wait_sw GET_BUFFER 000562 wait_sw READ 000572 partsx WRITE 000573 n_sectors WRITE 000616 code SETUP_LOCK THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_ne_as call_ext_out_desc call_ext_out return_mac mdfx1 signal_op ext_entry divide_fx3 THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. dctl$read_sectors dctl$write_sectors disk_run lock$lock_fast lock$unlock_fast pxss$addevent pxss$delevent pxss$wait syserr vtoc_search$hash_in vtoc_search$hash_out vtoc_search$search vtoce_stock_man$check_in_use vtoce_stock_man$get_free_vtoce vtoce_stock_man$return_free_vtoce vtoce_stock_man$return_if_not_free THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. error_table_$invalid_pvtx error_table_$invalid_vtocx error_table_$pvid_not_found error_table_$vtoc_io_err error_table_$vtoce_free pds$process_group_id pds$processid pds$vtoc_reads pds$vtoc_writes pvt$array pvt$n_entries vtoc_buffer_seg$ CONSTANTS 004572 aa 000002000000 004573 aa 000000000000 004574 aa 600000000041 004575 aa 000616000000 004576 aa 775777777777 004577 aa 757777777777 004600 aa 737777777777 004601 aa 767777777777 004602 aa 400000777777 004603 aa 777777600000 004604 aa 777400777777 004605 aa 777777777000 004606 aa 070 322 000 000 8Ò 004610 aa 000006000000 004611 aa 000006000000 004612 aa 600000000041 004613 aa 000420000000 004614 aa 600000000041 004615 aa 000635000000 004616 aa 600000000041 004617 aa 000666000000 004620 ta 000126000000 004621 aa 000000000000 004622 ta 000127000000 004623 aa 000000000000 004624 ta 000112000000 004625 aa 000000000000 004626 aa 773777777777 004630 aa 000002000000 004631 aa 000000000000 004632 aa 600000000041 004633 aa 000424000000 004634 aa 000006000000 004635 aa 000006000000 004636 aa 600000000041 004637 aa 000420000000 004640 aa 600000000041 004641 aa 000635000000 004642 aa 600000000041 004643 aa 000640000000 004644 ta 000126000000 004645 aa 000000000000 004646 ta 000127000000 004647 aa 000000000000 004650 ta 000113000000 004651 aa 000000000000 004652 aa 000004000000 004653 aa 000000000000 004654 aa 600000000041 004655 aa 000635000000 004656 aa 600000000041 004657 aa 000424000000 004660 aa 000004000000 004661 aa 000000000000 004662 aa 600000000041 004663 aa 000424000000 004664 aa 600000000041 004665 aa 000101000000 004666 aa 000004000000 004667 aa 000000000000 004670 ta 000074000000 004671 aa 000000000000 004672 aa 600000000041 004673 aa 000424000000 004674 aa 000004000000 004675 aa 000000000000 004676 aa 600000000041 004677 aa 000636000000 004700 ta 000074000000 004701 aa 000000000000 004702 aa 000006000000 004703 aa 000006000000 004704 aa 600000000041 004705 aa 000420000000 004706 aa 600000000041 004707 aa 000413000000 004710 aa 600000000041 004711 aa 000640000000 004712 ta 000126000000 004713 aa 000000000000 004714 ta 000127000000 004715 aa 000000000000 004716 ta 000115000000 004717 aa 000000000000 004720 aa 000006000000 004721 aa 000006000000 004722 aa 600000000041 004723 aa 000420000000 004724 aa 600000000041 004725 aa 000413000000 004726 aa 600000000041 004727 aa 000640000000 004730 ta 000126000000 004731 aa 000000000000 004732 ta 000127000000 004733 aa 000000000000 004734 ta 000116000000 004735 aa 000000000000 004736 aa 000004000000 004737 aa 000000000000 004740 aa 600000000041 004741 aa 000406000000 004742 aa 600000000041 004743 aa 000424000000 004744 aa 000006000000 004745 aa 000000000000 004746 aa 600000000041 004747 aa 000405000000 004750 aa 600000000041 004751 aa 000636000000 004752 aa 600000000041 004753 aa 000426000000 004754 aa 000004000000 004755 aa 000000000000 004756 aa 600000000041 004757 aa 000636000000 004760 aa 600000000041 004761 aa 000405000000 004762 aa 000012000000 004763 aa 000000000000 004764 aa 600000000041 004765 aa 000410000000 004766 aa 600000000041 004767 aa 000413000000 004770 aa 600000000041 004771 aa 000424000000 004772 aa 600000000041 004773 aa 000426000000 004774 aa 600000000041 004775 aa 000101000000 004776 aa 000016000000 004777 aa 000000000000 005000 aa 600000000041 005001 aa 000410000000 005002 aa 600000000041 005003 aa 000413000000 005004 ta 000074000000 005005 aa 000000000000 005006 aa 600000000041 005007 aa 000424000000 005010 aa 600000000041 005011 aa 000426000000 005012 aa 600000000041 005013 aa 000412000000 005014 aa 600000000041 005015 aa 000101000000 005016 aa 000016000000 005017 aa 000000000000 005020 aa 600000000041 005021 aa 000410000000 005022 aa 600000000041 005023 aa 000413000000 005024 aa 600000000041 005025 aa 000405000000 005026 aa 600000000041 005027 aa 000424000000 005030 aa 600000000041 005031 aa 000426000000 005032 aa 600000000041 005033 aa 000412000000 005034 aa 600000000041 005035 aa 000101000000 005036 aa 000004000000 005037 aa 000000000000 005040 aa 600000000041 005041 aa 000413000000 005042 aa 600000000041 005043 aa 000101000000 005044 aa 000004000000 005045 aa 000000000000 005046 aa 600000000041 005047 aa 000410000000 005050 aa 600000000041 005051 aa 000101000000 000000 aa 000000000000 000001 aa 000000000764 000002 aa 000000000703 000003 aa 000000000620 000004 aa 000000000276 000005 aa 000000000265 000006 aa 000000000765 000007 aa 000000006464 000010 aa 000000006465 000011 aa 000000000000 000012 aa 000000000005 000013 aa 000000000005 000014 aa 000000000005 000015 aa 000000000005 000016 aa 000000000005 000017 aa 000000000005 000020 aa 000000000002 000021 aa 000000000002 000022 aa 000000000000 000023 aa 000000000003 000024 aa 000000000003 000025 aa 000000000003 000026 aa 000000000003 000027 aa 000000000003 000030 aa 000000000003 000031 aa 000000000001 000032 aa 000000000001 000033 aa 000000000000 000034 aa 400000000000 000035 aa 400000000000 000036 aa 400000000000 000037 aa 400000000000 000040 aa 000000000000 000041 aa 400000000000 000042 aa 400000000000 000043 aa 000000000000 000044 aa 000000000001 000045 aa 000000000001 000046 aa 000000000002 000047 aa 000000000001 000050 aa 000000000000 000051 aa 000000000002 000052 aa 000000000003 000053 aa 000000000000 000054 aa 000000000002 000055 aa 000000000001 000056 aa 000000000001 000057 aa 000000000000 000060 aa 000000000000 000061 aa 000000000000 000062 aa 000000000000 000063 aa 000003641100 000064 aa 000000000000 000065 aa 000000000200 000066 aa 000000000100 000067 aa 000000000100 000070 aa 000000000000 000071 aa 000000000000 000072 aa 000000000000 000073 aa 000000000000 000074 aa 700000000000 000075 aa 524000000077 000076 aa 524000000027 000077 aa 524000000074 000100 aa 524000000030 000101 aa 514000000001 000102 aa 524000000051 000103 aa 526077777777 000104 aa 514000000003 005054 aa 300000000000 005055 aa 340000000000 000105 aa 524000000073 000106 aa 524000000002 000107 aa 524000000004 000110 aa 524000000040 000111 aa 524000000104 000112 aa 524000000102 000113 aa 524000000043 000114 aa 524000000056 005053 aa 400000000000 000115 aa 524000000026 000116 aa 524000000014 005056 aa 777777777777 000117 aa 514000000022 000120 aa 404000000030 005052 aa 000000000003 000121 aa 000000000001 000122 aa 514000000044 000123 aa 000000000004 000124 aa 516000000003 000125 aa 404000000043 000126 aa 464000000000 000127 aa 404000000021 000130 aa 077777000043 000131 aa 000001000000 000132 aa 111 156 166 141 Inva 000133 aa 154 151 144 040 lid 000134 aa 146 162 145 145 free 000135 aa 166 164 157 143 vtoc 000136 aa 137 155 141 156 _man 000137 aa 072 040 111 156 : In 000140 aa 166 141 154 151 vali 000141 aa 144 040 167 162 d wr 000142 aa 151 164 145 000 ite 000143 aa 166 164 157 143 vtoc 000144 aa 137 155 141 156 _man 000145 aa 072 040 117 165 : Ou 000146 aa 164 040 157 146 t of 000147 aa 040 142 165 146 buf 000150 aa 146 145 162 163 fers 000151 aa 125 111 104 040 UID 000152 aa 136 075 040 060 ^= 0 000153 aa 040 151 156 040 in 000154 aa 146 162 145 145 free 000155 aa 040 126 124 117 VTO 000156 aa 103 105 000 000 CE 000157 aa 162 145 164 165 retu 000160 aa 162 156 137 143 rn_c 000161 aa 157 156 166 145 onve 000162 aa 162 163 151 157 rsio 000163 aa 156 137 145 162 n_er 000164 aa 162 157 162 000 ror 000165 aa 125 160 144 141 Upda 000166 aa 164 145 040 151 te i 000167 aa 156 040 160 162 n pr 000170 aa 157 147 162 145 ogre 000171 aa 163 163 040 157 ss o 000172 aa 156 040 143 162 n cr 000173 aa 141 167 154 157 awlo 000174 aa 165 164 040 142 ut b 000175 aa 171 040 000 000 y 000176 aa 110 157 164 040 Hot 000177 aa 142 165 146 146 buff 000200 aa 145 162 040 141 er a 000201 aa 142 141 156 144 band 000202 aa 157 156 145 144 oned 000203 aa 040 144 165 162 dur 000204 aa 151 156 147 040 ing 000205 aa 143 154 145 141 clea 000206 aa 156 165 160 000 nup 000207 aa 166 164 157 143 vtoc 000210 aa 137 155 141 156 _man 000211 aa 072 040 142 165 : bu 000212 aa 146 146 145 162 ffer 000213 aa 040 157 165 164 out 000214 aa 055 157 146 055 -of- 000215 aa 163 145 162 166 serv 000216 aa 151 143 145 040 ice 000217 aa 157 156 040 167 on w 000220 aa 162 151 164 145 rite 000221 aa 056 000 000 000 . 000222 aa 166 164 157 143 vtoc 000223 aa 137 155 141 156 _man 000224 aa 072 040 136 141 : ^a 000225 aa 040 136 133 166 ^[v 000226 aa 164 157 143 170 tocx 000227 aa 040 136 157 040 ^o 000230 aa 136 073 136 061 ^;^1 000231 aa 163 136 135 157 s^]o 000232 aa 156 040 136 141 n ^a 000233 aa 137 136 141 136 _^a^ 000234 aa 141 000 000 000 a 000235 aa 166 164 157 143 vtoc 000236 aa 137 155 141 156 _man 000237 aa 072 040 102 165 : Bu 000240 aa 146 146 145 162 ffer 000241 aa 040 157 165 164 out 000242 aa 055 157 146 055 -of- 000243 aa 163 145 162 166 serv 000244 aa 151 143 145 040 ice 000245 aa 144 165 162 151 duri 000246 aa 156 147 040 143 ng c 000247 aa 154 145 141 156 lean 000250 aa 165 160 000 000 up 000251 aa 166 164 157 143 vtoc 000252 aa 137 155 141 156 _man 000253 aa 072 040 127 162 : Wr 000254 aa 151 164 145 040 ite 000255 aa 111 057 117 040 I/O 000256 aa 142 145 151 156 bein 000257 aa 147 040 162 145 g re 000260 aa 164 162 151 145 trie 000261 aa 144 040 142 171 d by 000262 aa 040 136 141 040 ^a 000263 aa 146 157 162 040 for 000264 aa 136 141 137 136 ^a_^ 000265 aa 141 136 141 040 a^a 000266 aa 166 164 157 143 vtoc 000267 aa 170 040 136 157 x ^o 000270 aa 166 164 157 143 vtoc 000271 aa 137 155 141 156 _man 000272 aa 072 040 162 145 : re 000273 aa 141 144 040 162 ad r 000274 aa 145 163 145 164 eset 000275 aa 040 157 156 040 on 000276 aa 143 162 141 167 craw 000277 aa 154 157 165 164 lout 000300 aa 040 142 171 040 by 000301 aa 136 141 040 146 ^a f 000302 aa 157 162 040 136 or ^ 000303 aa 141 137 136 141 a_^a 000304 aa 136 141 040 166 ^a v 000305 aa 164 157 143 170 tocx 000306 aa 040 136 157 000 ^o 000307 aa 166 164 157 143 vtoc 000310 aa 137 155 141 156 _man 000311 aa 072 040 101 164 : At 000312 aa 164 145 155 160 temp 000313 aa 164 040 164 157 t to 000314 aa 040 167 162 151 wri 000315 aa 164 145 040 154 te l 000316 aa 145 163 163 040 ess 000317 aa 164 150 141 156 than 000320 aa 040 145 156 164 ent 000321 aa 151 162 145 040 ire 000322 aa 126 124 117 103 VTOC 000323 aa 105 040 164 157 E to 000324 aa 040 136 144 040 ^d 000325 aa 144 145 166 151 devi 000326 aa 143 145 056 000 ce. 000327 aa 166 164 157 143 vtoc 000330 aa 137 155 141 156 _man 000331 aa 072 040 167 162 : wr 000332 aa 151 164 145 040 ite 000333 aa 111 057 117 040 I/O 000334 aa 162 145 143 157 reco 000335 aa 166 145 162 145 vere 000336 aa 144 040 157 156 d on 000337 aa 040 143 162 141 cra 000340 aa 167 154 157 165 wlou 000341 aa 164 040 142 171 t by 000342 aa 040 136 141 040 ^a 000343 aa 146 157 162 040 for 000344 aa 136 141 137 136 ^a_^ 000345 aa 141 136 141 040 a^a 000346 aa 166 164 157 143 vtoc 000347 aa 170 040 136 157 x ^o BEGIN PROCEDURE vtoc_man$get_vtoce PROLOGUE SEQUENCE 000350 aa 6 00634 4401 00 sxl0 pr6|412 STATEMENT 1 ON LINE 84 OF FILE 6 000351 aa 6 00450 4501 00 stz pr6|296 000352 aa 6 00450 0541 00 aos pr6|296 000353 aa 6 00450 2361 00 ldq pr6|296 000354 aa 000006 4020 07 mpy 6,dl 000355 aa 003 106 060 400 csl (),(pr,ql),fill(0),bool(move) 000356 aa 000000 00 0000 descb 0,0 000357 aa 6 00435 63 0006 descb pr6|285(30),6 seek_command 000360 aa 6 00450 0541 00 aos pr6|296 000361 aa 6 00450 2361 00 ldq pr6|296 000362 aa 000006 4020 07 mpy 6,dl 000363 aa 003 106 060 404 csl (ic),(pr,ql),fill(0),bool(move) 000364 aa 004472 00 0006 descb 2362,6 005055 = 340000000000 000365 aa 6 00435 63 0006 descb pr6|285(30),6 seek_command 000366 aa 6 00450 0541 00 aos pr6|296 000367 aa 6 00450 2361 00 ldq pr6|296 000370 aa 000006 4020 07 mpy 6,dl 000371 aa 003 106 060 404 csl (ic),(pr,ql),fill(0),bool(move) 000372 aa 004464 00 0006 descb 2356,6 005055 = 340000000000 000373 aa 6 00435 63 0006 descb pr6|285(30),6 seek_command 000374 aa 6 00450 0541 00 aos pr6|296 000375 aa 6 00450 2361 00 ldq pr6|296 000376 aa 000006 4020 07 mpy 6,dl 000377 aa 003 106 060 404 csl (ic),(pr,ql),fill(0),bool(move) 000400 aa 004456 00 0006 descb 2350,6 005055 = 340000000000 000401 aa 6 00435 63 0006 descb pr6|285(30),6 seek_command 000402 aa 6 00450 0541 00 aos pr6|296 000403 aa 6 00450 2361 00 ldq pr6|296 000404 aa 000006 4020 07 mpy 6,dl 000405 aa 003 106 060 404 csl (ic),(pr,ql),fill(0),bool(move) 000406 aa 004450 00 0006 descb 2344,6 005055 = 340000000000 000407 aa 6 00435 63 0006 descb pr6|285(30),6 seek_command 000410 aa 6 00450 0541 00 aos pr6|296 000411 aa 6 00450 2361 00 ldq pr6|296 000412 aa 000006 4020 07 mpy 6,dl 000413 aa 003 106 060 404 csl (ic),(pr,ql),fill(0),bool(move) 000414 aa 004442 00 0006 descb 2338,6 005055 = 340000000000 000415 aa 6 00435 63 0006 descb pr6|285(30),6 seek_command 000416 aa 6 00450 0541 00 aos pr6|296 000417 aa 6 00450 2361 00 ldq pr6|296 000420 aa 000006 4020 07 mpy 6,dl 000421 aa 003 106 060 404 csl (ic),(pr,ql),fill(0),bool(move) 000422 aa 004434 00 0006 descb 2332,6 005055 = 340000000000 000423 aa 6 00435 63 0006 descb pr6|285(30),6 seek_command 000424 aa 6 00450 0541 00 aos pr6|296 000425 aa 6 00450 2361 00 ldq pr6|296 000426 aa 000006 4020 07 mpy 6,dl 000427 aa 003 106 060 404 csl (ic),(pr,ql),fill(0),bool(move) 000430 aa 004425 00 0006 descb 2325,6 005054 = 300000000000 000431 aa 6 00435 63 0006 descb pr6|285(30),6 seek_command 000432 aa 6 00450 0541 00 aos pr6|296 000433 aa 6 00450 2361 00 ldq pr6|296 000434 aa 000006 4020 07 mpy 6,dl 000435 aa 003 106 060 404 csl (ic),(pr,ql),fill(0),bool(move) 000436 aa 004417 00 0006 descb 2319,6 005054 = 300000000000 000437 aa 6 00435 63 0006 descb pr6|285(30),6 seek_command 000440 aa 6 00634 7201 00 lxl0 pr6|412 000441 aa 000000 7100 10 tra 0,0 MAIN SEQUENCE ENTRY TO vtoc_man$get_vtoce STATEMENT 1 ON LINE 54 vtoc_man$get_vtoce: proc (Pvid, Pvtx, Vtocx, Parts, Copy_Vtocep, Code); 000442 at 000006000122 000443 tt 000127000127 000444 tt 000124000126 000445 ta 000125000000 000446 ta 000442000000 000447 da 000337300000 000450 aa 001320 6270 00 eax7 720 000451 aa 7 00034 3521 20 epp2 pr7|28,* 000452 aa 2 01045 2721 00 tsp2 pr2|549 ext_entry 000453 aa 000014000000 000454 aa 000000000000 000455 aa 6 00032 3735 20 epp7 pr6|26,* 000456 aa 7 00004 3715 20 epp5 pr7|4,* 000457 aa 6 00446 6515 00 spri5 pr6|294 000460 aa 7 00012 3535 20 epp3 pr7|10,* 000461 aa 6 00442 2535 00 spri3 pr6|290 000462 aa 7 00014 3515 20 epp1 pr7|12,* 000463 aa 6 00444 2515 00 spri1 pr6|292 000464 aa 000001 2360 07 ldq 1,dl 000465 aa 6 00440 7561 00 stq pr6|288 000466 aa 777662 7000 04 tsx0 -78,ic 000350 STATEMENT 1 ON LINE 169 pvid = Pvid; 000467 aa 6 00032 3735 20 epp7 pr6|26,* 000470 aa 7 00002 2351 20 lda pr7|2,* Pvid 000471 aa 6 00407 7551 00 sta pr6|263 pvid STATEMENT 1 ON LINE 170 pvtx = Pvtx; 000472 aa 6 00446 2361 20 ldq pr6|294,* Pvtx 000473 aa 6 00410 7561 00 stq pr6|264 pvtx STATEMENT 1 ON LINE 171 vtocx = Vtocx; 000474 aa 7 00006 2361 20 ldq pr7|6,* Vtocx 000475 aa 6 00413 7561 00 stq pr6|267 vtocx STATEMENT 1 ON LINE 172 parts = Parts; 000476 aa 6 00405 4501 00 stz pr6|261 parts 000477 aa 7 00010 3715 20 epp5 pr7|8,* 000500 aa 003 100 060 500 csl (pr),(pr),fill(0),bool(move) 000501 aa 5 00000 00 0003 descb pr5|0,3 Parts 000502 aa 6 00405 00 0003 descb pr6|261,3 parts STATEMENT 1 ON LINE 173 Code = 0; 000503 aa 6 00444 4501 20 stz pr6|292,* Code STATEMENT 1 ON LINE 175 call SETUP_LOCK (pvtx, code); 000504 aa 004340 3520 04 epp2 2272,ic 005044 = 000004000000 000505 aa 003737 6700 04 tsp4 2015,ic 004444 STATEMENT 1 ON LINE 176 if code ^= 0 then goto GET_VTOCE_RETURNS; 000506 aa 6 00101 2361 00 ldq pr6|65 code 000507 aa 000015 6010 04 tnz 13,ic 000524 STATEMENT 1 ON LINE 179 call VALIDATE_VTOCX (vtocx, code); 000510 aa 004326 3520 04 epp2 2262,ic 005036 = 000004000000 000511 aa 003713 6700 04 tsp4 1995,ic 004424 STATEMENT 1 ON LINE 180 if code ^= 0 then goto GET_VTOCE_RETURNS; 000512 aa 6 00101 2361 00 ldq pr6|65 code 000513 aa 000011 6010 04 tnz 9,ic 000524 STATEMENT 1 ON LINE 184 call READ (pvtx, vtocx, parts, vtoc_buf_descp, vtoc_bufp, sector_read_required, code); 000514 aa 004302 3520 04 epp2 2242,ic 005016 = 000016000000 000515 aa 002706 6700 04 tsp4 1478,ic 003423 STATEMENT 1 ON LINE 185 if code ^= 0 then goto GET_VTOCE_RETURNS; 000516 aa 6 00101 2361 00 ldq pr6|65 code 000517 aa 000005 6010 04 tnz 5,ic 000524 STATEMENT 1 ON LINE 188 unspec (local_vtoce_buffer) = unspec (vtoce_buffer); 000520 aa 6 00426 3735 20 epp7 pr6|278,* vtoc_bufp 000521 aa 000 100 100 500 mlr (pr),(pr),fill(000) 000522 aa 7 00000 00 1400 desc9a pr7|0,768 000523 aa 6 00104 00 1400 desc9a pr6|68,768 STATEMENT 1 ON LINE 190 GET_VTOCE_RETURNS: call UNLOCK; 000524 aa 004032 6700 04 tsp4 2074,ic 004556 STATEMENT 1 ON LINE 192 vtoc_buffer.meters.call_get = vtoc_buffer.meters.call_get + 1; 000525 aa 6 00422 3735 20 epp7 pr6|274,* vtoc_buffer_segp 000526 aa 7 00016 2351 00 lda pr7|14 vtoc_buffer.call_get 000527 aa 000044 7330 00 lrs 36 000530 aa 000001 0330 07 adl 1,dl 000531 aa 7 00016 7561 00 stq pr7|14 vtoc_buffer.call_get STATEMENT 1 ON LINE 194 if code = 0 then call COPY_PARTS (parts, addr (local_vtoce_buffer), Copy_Vtocep); 000532 aa 6 00101 2361 00 ldq pr6|65 code 000533 aa 000015 6010 04 tnz 13,ic 000550 000534 aa 6 00104 3715 00 epp5 pr6|68 local_vtoce_buffer 000535 aa 6 00636 6515 00 spri5 pr6|414 000536 aa 6 00405 3521 00 epp2 pr6|261 parts 000537 aa 6 00642 2521 00 spri2 pr6|418 000540 aa 6 00636 3521 00 epp2 pr6|414 000541 aa 6 00644 2521 00 spri2 pr6|420 000542 aa 6 00442 3521 20 epp2 pr6|290,* Copy_Vtocep 000543 aa 6 00646 2521 00 spri2 pr6|422 000544 aa 6 00640 3521 00 epp2 pr6|416 000545 aa 014000 4310 07 fld 6144,dl 000546 aa 2 00000 7571 00 staq pr2|0 000547 aa 002024 6700 04 tsp4 1044,ic 002573 STATEMENT 1 ON LINE 197 Code = code; 000550 aa 6 00101 2361 00 ldq pr6|65 code 000551 aa 6 00444 7561 20 stq pr6|292,* Code STATEMENT 1 ON LINE 199 return; 000552 aa 6 00440 2361 00 ldq pr6|288 000553 aa 000005 6010 04 tnz 5,ic 000560 000554 aa 000027 7260 07 lxl6 23,dl 000555 aa 777402 3520 04 epp2 -254,ic 000157 = 162145164165 000556 aa 0 00716 7001 00 tsx0 pr0|462 signal_op 000557 aa 0 00631 7101 00 tra pr0|409 return_mac 000560 aa 0 00631 7101 00 tra pr0|409 return_mac ENTRY TO read_ahead_vtoce STATEMENT 1 ON LINE 211 read_ahead_vtoce: entry (Pvid, Pvtx, Vtocx, Parts, Code); 000561 at 000005000122 000562 tt 000127000127 000563 tt 000124000125 000564 ta 000561000000 000565 da 000347300000 000566 aa 001320 6270 00 eax7 720 000567 aa 7 00034 3521 20 epp2 pr7|28,* 000570 aa 2 01045 2721 00 tsp2 pr2|549 ext_entry 000571 aa 000012000000 000572 aa 000000000000 000573 aa 6 00032 3735 20 epp7 pr6|26,* 000574 aa 7 00004 3715 20 epp5 pr7|4,* 000575 aa 6 00446 6515 00 spri5 pr6|294 000576 aa 7 00012 3535 20 epp3 pr7|10,* 000577 aa 6 00444 2535 00 spri3 pr6|292 000600 aa 000001 2360 07 ldq 1,dl 000601 aa 6 00440 7561 00 stq pr6|288 000602 aa 777546 7000 04 tsx0 -154,ic 000350 STATEMENT 1 ON LINE 214 pvid = Pvid; 000603 aa 6 00032 3735 20 epp7 pr6|26,* 000604 aa 7 00002 2351 20 lda pr7|2,* Pvid 000605 aa 6 00407 7551 00 sta pr6|263 pvid STATEMENT 1 ON LINE 215 pvtx = Pvtx; 000606 aa 6 00446 2361 20 ldq pr6|294,* Pvtx 000607 aa 6 00410 7561 00 stq pr6|264 pvtx STATEMENT 1 ON LINE 216 vtocx = Vtocx; 000610 aa 7 00006 2361 20 ldq pr7|6,* Vtocx 000611 aa 6 00413 7561 00 stq pr6|267 vtocx STATEMENT 1 ON LINE 217 parts = Parts; 000612 aa 6 00405 4501 00 stz pr6|261 parts 000613 aa 7 00010 3715 20 epp5 pr7|8,* 000614 aa 003 100 060 500 csl (pr),(pr),fill(0),bool(move) 000615 aa 5 00000 00 0003 descb pr5|0,3 Parts 000616 aa 6 00405 00 0003 descb pr6|261,3 parts STATEMENT 1 ON LINE 218 Code = 0; 000617 aa 6 00444 4501 20 stz pr6|292,* Code STATEMENT 1 ON LINE 220 call SETUP_LOCK (pvtx, code); 000620 aa 004224 3520 04 epp2 2196,ic 005044 = 000004000000 000621 aa 003623 6700 04 tsp4 1939,ic 004444 STATEMENT 1 ON LINE 221 if code ^= 0 then goto READ_AHEAD_VTOCE_RETURNS; 000622 aa 6 00101 2361 00 ldq pr6|65 code 000623 aa 000007 6010 04 tnz 7,ic 000632 STATEMENT 1 ON LINE 224 call VALIDATE_VTOCX (vtocx, code); 000624 aa 004212 3520 04 epp2 2186,ic 005036 = 000004000000 000625 aa 003577 6700 04 tsp4 1919,ic 004424 STATEMENT 1 ON LINE 225 if code ^= 0 then goto READ_AHEAD_VTOCE_RETURNS; 000626 aa 6 00101 2361 00 ldq pr6|65 code 000627 aa 000003 6010 04 tnz 3,ic 000632 STATEMENT 1 ON LINE 228 call READ_AHEAD (pvtx, vtocx, parts, vtoc_buf_descp, vtoc_bufp, sector_read_required, code); 000630 aa 004166 3520 04 epp2 2166,ic 005016 = 000016000000 000631 aa 002577 6700 04 tsp4 1407,ic 003430 STATEMENT 1 ON LINE 230 READ_AHEAD_VTOCE_RETURNS: call UNLOCK; 000632 aa 003724 6700 04 tsp4 2004,ic 004556 STATEMENT 1 ON LINE 234 Code = code; 000633 aa 6 00101 2361 00 ldq pr6|65 code 000634 aa 6 00444 7561 20 stq pr6|292,* Code STATEMENT 1 ON LINE 236 return; 000635 aa 6 00440 2361 00 ldq pr6|288 000636 aa 000005 6010 04 tnz 5,ic 000643 000637 aa 000027 7260 07 lxl6 23,dl 000640 aa 777317 3520 04 epp2 -305,ic 000157 = 162145164165 000641 aa 0 00716 7001 00 tsx0 pr0|462 signal_op 000642 aa 0 00631 7101 00 tra pr0|409 return_mac 000643 aa 0 00631 7101 00 tra pr0|409 return_mac ENTRY TO put_vtoce STATEMENT 1 ON LINE 250 put_vtoce: entry (Pvid, Pvtx, Vtocx, Parts, Copy_Vtocep, Code); 000644 ta 000442000000 000645 da 000355300000 000646 aa 001320 6270 00 eax7 720 000647 aa 7 00034 3521 20 epp2 pr7|28,* 000650 aa 2 01045 2721 00 tsp2 pr2|549 ext_entry 000651 aa 000014000000 000652 aa 000000000000 000653 aa 6 00032 3735 20 epp7 pr6|26,* 000654 aa 7 00004 3715 20 epp5 pr7|4,* 000655 aa 6 00446 6515 00 spri5 pr6|294 000656 aa 7 00012 3535 20 epp3 pr7|10,* 000657 aa 6 00442 2535 00 spri3 pr6|290 000660 aa 7 00014 3515 20 epp1 pr7|12,* 000661 aa 6 00444 2515 00 spri1 pr6|292 000662 aa 000001 2360 07 ldq 1,dl 000663 aa 6 00440 7561 00 stq pr6|288 000664 aa 777464 7000 04 tsx0 -204,ic 000350 STATEMENT 1 ON LINE 253 pvid = Pvid; 000665 aa 6 00032 3735 20 epp7 pr6|26,* 000666 aa 7 00002 2351 20 lda pr7|2,* Pvid 000667 aa 6 00407 7551 00 sta pr6|263 pvid STATEMENT 1 ON LINE 254 pvtx = Pvtx; 000670 aa 6 00446 2361 20 ldq pr6|294,* Pvtx 000671 aa 6 00410 7561 00 stq pr6|264 pvtx STATEMENT 1 ON LINE 255 vtocx = Vtocx; 000672 aa 7 00006 2361 20 ldq pr7|6,* Vtocx 000673 aa 6 00413 7561 00 stq pr6|267 vtocx STATEMENT 1 ON LINE 256 parts = Parts; 000674 aa 6 00405 4501 00 stz pr6|261 parts 000675 aa 7 00010 3715 20 epp5 pr7|8,* 000676 aa 003 100 060 500 csl (pr),(pr),fill(0),bool(move) 000677 aa 5 00000 00 0003 descb pr5|0,3 Parts 000700 aa 6 00405 00 0003 descb pr6|261,3 parts STATEMENT 1 ON LINE 257 Code = 0; 000701 aa 6 00444 4501 20 stz pr6|292,* Code STATEMENT 1 ON LINE 258 sector_read_required = "0"b; 000702 aa 6 00412 4501 00 stz pr6|266 sector_read_required STATEMENT 1 ON LINE 259 parts_to_write = parts; 000703 aa 6 00405 2351 00 lda pr6|261 parts 000704 aa 0 00006 3771 00 anaq pr0|6 = 700000000000 000000000000 000705 aa 6 00406 7551 00 sta pr6|262 parts_to_write STATEMENT 1 ON LINE 260 call COPY_PARTS (parts, Copy_Vtocep, addr (local_vtoce_buffer)); 000706 aa 6 00104 3535 00 epp3 pr6|68 local_vtoce_buffer 000707 aa 6 00636 2535 00 spri3 pr6|414 000710 aa 6 00405 3521 00 epp2 pr6|261 parts 000711 aa 6 00642 2521 00 spri2 pr6|418 000712 aa 6 00442 3521 20 epp2 pr6|290,* Copy_Vtocep 000713 aa 6 00644 2521 00 spri2 pr6|420 000714 aa 6 00636 3521 00 epp2 pr6|414 000715 aa 6 00646 2521 00 spri2 pr6|422 000716 aa 6 00640 3521 00 epp2 pr6|416 000717 aa 014000 4310 07 fld 6144,dl 000720 aa 2 00000 7571 00 staq pr2|0 000721 aa 001652 6700 04 tsp4 938,ic 002573 STATEMENT 1 ON LINE 263 call SETUP_LOCK (pvtx, code); 000722 aa 004122 3520 04 epp2 2130,ic 005044 = 000004000000 000723 aa 003521 6700 04 tsp4 1873,ic 004444 STATEMENT 1 ON LINE 264 if code ^= 0 then goto PUT_VTOCE_RETURNS; 000724 aa 6 00101 2361 00 ldq pr6|65 code 000725 aa 000060 6010 04 tnz 48,ic 001005 STATEMENT 1 ON LINE 267 call VALIDATE_VTOCX (vtocx, code); 000726 aa 004110 3520 04 epp2 2120,ic 005036 = 000004000000 000727 aa 003475 6700 04 tsp4 1853,ic 004424 STATEMENT 1 ON LINE 268 if code ^= 0 then goto PUT_VTOCE_RETURNS; 000730 aa 6 00101 2361 00 ldq pr6|65 code 000731 aa 000054 6010 04 tnz 44,ic 001005 STATEMENT 1 ON LINE 271 vtoc_buffer.unsafe_pvtx = pvtx; 000732 aa 6 00410 2361 00 ldq pr6|264 pvtx 000733 aa 6 00422 3735 20 epp7 pr6|274,* vtoc_buffer_segp 000734 aa 7 00014 7561 00 stq pr7|12 vtoc_buffer.unsafe_pvtx STATEMENT 1 ON LINE 272 if (SECTORS_PER_VTOCE (pvte.device_type) = 1) & (parts ^= ALL_PARTS) then do; 000735 aa 6 00420 3715 20 epp5 pr6|272,* pvtep 000736 aa 5 00004 2351 00 lda pr5|4 pvte.device_type 000737 aa 000077 7330 00 lrs 63 000740 aa 6 00635 7561 00 stq pr6|413 000741 ta 000021 2360 06 ldq 17,ql 000742 aa 000001 1160 07 cmpq 1,dl 000743 aa 000014 6010 04 tnz 12,ic 000757 000744 aa 6 00405 2351 00 lda pr6|261 parts 000745 aa 0 00006 3771 00 anaq pr0|6 = 700000000000 000000000000 000746 aa 700000 1150 03 cmpa 229376,du 000747 aa 000010 6000 04 tze 8,ic 000757 STATEMENT 1 ON LINE 274 call READ (pvtx, vtocx, ALL_PARTS, vtoc_buf_descp, vtoc_bufp, sector_read_required, code); 000750 aa 004026 3520 04 epp2 2070,ic 004776 = 000016000000 000751 aa 002452 6700 04 tsp4 1322,ic 003423 STATEMENT 1 ON LINE 275 if code ^= 0 then goto PUT_VTOCE_RETURNS; 000752 aa 6 00101 2361 00 ldq pr6|65 code 000753 aa 000032 6010 04 tnz 26,ic 001005 STATEMENT 1 ON LINE 277 parts_to_write = ALL_PARTS; 000754 aa 700000 2350 03 lda 229376,du 000755 aa 6 00406 7551 00 sta pr6|262 parts_to_write STATEMENT 1 ON LINE 278 end; 000756 aa 000003 7100 04 tra 3,ic 000761 STATEMENT 1 ON LINE 280 else call GET_BUFFER (pvtx, vtocx, vtoc_buf_descp, vtoc_bufp, code); 000757 aa 004003 3520 04 epp2 2051,ic 004762 = 000012000000 000760 aa 002124 6700 04 tsp4 1108,ic 003104 STATEMENT 1 ON LINE 282 if code ^= 0 then goto PUT_VTOCE_RETURNS; 000761 aa 6 00101 2361 00 ldq pr6|65 code 000762 aa 000023 6010 04 tnz 19,ic 001005 STATEMENT 1 ON LINE 284 call CLEAR_PAD (addr (local_vtoce_buffer), parts); 000763 aa 6 00104 3735 00 epp7 pr6|68 local_vtoce_buffer 000764 aa 6 00636 6535 00 spri7 pr6|414 000765 aa 003767 3520 04 epp2 2039,ic 004754 = 000004000000 000766 aa 001546 6700 04 tsp4 870,ic 002534 STATEMENT 1 ON LINE 285 call COPY_PARTS (parts, addr (local_vtoce_buffer), vtoc_bufp); 000767 aa 6 00104 3735 00 epp7 pr6|68 local_vtoce_buffer 000770 aa 6 00636 6535 00 spri7 pr6|414 000771 aa 003753 3520 04 epp2 2027,ic 004744 = 000006000000 000772 aa 001601 6700 04 tsp4 897,ic 002573 STATEMENT 1 ON LINE 288 call WRITE (parts_to_write, vtoc_buf_descp); 000773 aa 003743 3520 04 epp2 2019,ic 004736 = 000004000000 000774 aa 003013 6700 04 tsp4 1547,ic 004007 STATEMENT 1 ON LINE 289 if sector_read_required then vtoc_buffer.meters.soft_rar = vtoc_buffer.meters.soft_rar + 1; 000775 aa 6 00412 2351 00 lda pr6|266 sector_read_required 000776 aa 400000 3150 03 cana 131072,du 000777 aa 000006 6000 04 tze 6,ic 001005 001000 aa 6 00422 3735 20 epp7 pr6|274,* vtoc_buffer_segp 001001 aa 7 00037 2351 00 lda pr7|31 vtoc_buffer.soft_rar 001002 aa 000044 7330 00 lrs 36 001003 aa 000001 0330 07 adl 1,dl 001004 aa 7 00037 7561 00 stq pr7|31 vtoc_buffer.soft_rar STATEMENT 1 ON LINE 291 PUT_VTOCE_RETURNS: vtoc_buffer.unsafe_pvtx = 0; 001005 aa 6 00422 3735 20 epp7 pr6|274,* vtoc_buffer_segp 001006 aa 7 00014 4501 00 stz pr7|12 vtoc_buffer.unsafe_pvtx STATEMENT 1 ON LINE 293 call UNLOCK; 001007 aa 003547 6700 04 tsp4 1895,ic 004556 STATEMENT 1 ON LINE 294 vtoc_buffer.meters.call_put = vtoc_buffer.meters.call_put + 1; 001010 aa 6 00422 3735 20 epp7 pr6|274,* vtoc_buffer_segp 001011 aa 7 00017 2351 00 lda pr7|15 vtoc_buffer.call_put 001012 aa 000044 7330 00 lrs 36 001013 aa 000001 0330 07 adl 1,dl 001014 aa 7 00017 7561 00 stq pr7|15 vtoc_buffer.call_put STATEMENT 1 ON LINE 295 Code = code; 001015 aa 6 00101 2361 00 ldq pr6|65 code 001016 aa 6 00444 7561 20 stq pr6|292,* Code STATEMENT 1 ON LINE 296 return; 001017 aa 6 00440 2361 00 ldq pr6|288 001020 aa 000005 6010 04 tnz 5,ic 001025 001021 aa 000027 7260 07 lxl6 23,dl 001022 aa 777135 3520 04 epp2 -419,ic 000157 = 162145164165 001023 aa 0 00716 7001 00 tsx0 pr0|462 signal_op 001024 aa 0 00631 7101 00 tra pr0|409 return_mac 001025 aa 0 00631 7101 00 tra pr0|409 return_mac ENTRY TO alloc_and_put_vtoce STATEMENT 1 ON LINE 308 alloc_and_put_vtoce: entry (Pvid, Pvtx, Copy_Vtocep, Code) returns (fixed bin (17)); 001026 at 000005000122 001027 tt 000127000126 001030 tt 000125000127 001031 ta 001026000000 001032 da 000365320000 001033 aa 001320 6270 00 eax7 720 001034 aa 7 00034 3521 20 epp2 pr7|28,* 001035 aa 2 01045 2721 00 tsp2 pr2|549 ext_entry 001036 aa 000012000000 001037 aa 000000000000 001040 aa 6 00032 3735 20 epp7 pr6|26,* 001041 aa 7 00004 3715 20 epp5 pr7|4,* 001042 aa 6 00446 6515 00 spri5 pr6|294 001043 aa 7 00006 3535 20 epp3 pr7|6,* 001044 aa 6 00442 2535 00 spri3 pr6|290 001045 aa 7 00010 3515 20 epp1 pr7|8,* 001046 aa 6 00444 2515 00 spri1 pr6|292 001047 aa 6 00440 4501 00 stz pr6|288 001050 aa 777300 7000 04 tsx0 -320,ic 000350 STATEMENT 1 ON LINE 311 pvid = Pvid; 001051 aa 6 00032 3735 20 epp7 pr6|26,* 001052 aa 7 00002 2351 20 lda pr7|2,* Pvid 001053 aa 6 00407 7551 00 sta pr6|263 pvid STATEMENT 1 ON LINE 312 pvtx = Pvtx; 001054 aa 6 00446 2361 20 ldq pr6|294,* Pvtx 001055 aa 6 00410 7561 00 stq pr6|264 pvtx STATEMENT 1 ON LINE 313 Code = 0; 001056 aa 6 00444 4501 20 stz pr6|292,* Code STATEMENT 1 ON LINE 314 return_vtocx = -1; 001057 aa 000001 3360 07 lcq 1,dl 001060 aa 6 00411 7561 00 stq pr6|265 return_vtocx STATEMENT 1 ON LINE 316 unspec (local_vtoce_buffer) = unspec (Copy_Vtoce); 001061 aa 6 00442 3715 20 epp5 pr6|290,* Copy_Vtocep 001062 aa 5 00000 3715 20 epp5 pr5|0,* Copy_Vtocep 001063 aa 000 100 100 500 mlr (pr),(pr),fill(000) 001064 aa 5 00000 00 1400 desc9a pr5|0,768 001065 aa 6 00104 00 1400 desc9a pr6|68,768 STATEMENT 1 ON LINE 318 call SETUP_LOCK (pvtx, code); 001066 aa 003756 3520 04 epp2 2030,ic 005044 = 000004000000 001067 aa 003355 6700 04 tsp4 1773,ic 004444 STATEMENT 1 ON LINE 319 if code ^= 0 then goto ALLOC_PUT_RETURNS; 001070 aa 6 00101 2361 00 ldq pr6|65 code 001071 aa 000126 6010 04 tnz 86,ic 001217 STATEMENT 1 ON LINE 322 RETRY_ALLOC: old_pseudo_clock = vtoc_buffer.scavenger_free_p_clock; 001072 aa 6 00422 3735 20 epp7 pr6|274,* vtoc_buffer_segp 001073 aa 7 00015 2361 00 ldq pr7|13 vtoc_buffer.scavenger_free_p_clock 001074 aa 6 00404 7561 00 stq pr6|260 old_pseudo_clock STATEMENT 1 ON LINE 325 call vtoce_stock_man$get_free_vtoce (pvtep, vtocx); 001075 aa 6 00420 3521 00 epp2 pr6|272 pvtep 001076 aa 6 00642 2521 00 spri2 pr6|418 001077 aa 6 00413 3521 00 epp2 pr6|267 vtocx 001100 aa 6 00644 2521 00 spri2 pr6|420 001101 aa 6 00640 6211 00 eax1 pr6|416 001102 aa 010000 4310 07 fld 4096,dl 001103 aa 6 00044 3701 20 epp4 pr6|36,* 001104 la 4 00066 3521 20 epp2 pr4|54,* vtoce_stock_man$get_free_vtoce 001105 aa 0 00623 7001 00 tsx0 pr0|403 call_ext_out STATEMENT 1 ON LINE 326 if vtocx = -1 then goto ALLOC_PUT_RETURNS; 001106 aa 6 00413 2361 00 ldq pr6|267 vtocx 001107 aa 003747 1160 04 cmpq 2023,ic 005056 = 777777777777 001110 aa 000107 6000 04 tze 71,ic 001217 STATEMENT 1 ON LINE 329 call VALIDATE_VTOCX (vtocx, code); 001111 aa 003725 3520 04 epp2 2005,ic 005036 = 000004000000 001112 aa 003312 6700 04 tsp4 1738,ic 004424 STATEMENT 1 ON LINE 330 if code ^= 0 then do; 001113 aa 6 00101 2361 00 ldq pr6|65 code 001114 aa 000011 6000 04 tze 9,ic 001125 STATEMENT 1 ON LINE 332 call SET_VOL_TROUBLE (pvtep, vtocx, "Invalid free"); 001115 aa 777015 2370 04 ldaq -499,ic 000132 = 111156166141 154151144040 001116 aa 6 00640 7571 00 staq pr6|416 001117 aa 777015 2350 04 lda -499,ic 000134 = 146162145145 001120 aa 6 00642 7551 00 sta pr6|418 001121 aa 003577 3520 04 epp2 1919,ic 004720 = 000006000000 001122 aa 2 00000 2351 00 lda pr2|0 001123 aa 001553 6700 04 tsp4 875,ic 002676 STATEMENT 1 ON LINE 333 goto RETRY_ALLOC; 001124 aa 777746 7100 04 tra -26,ic 001072 STATEMENT 1 ON LINE 334 end; STATEMENT 1 ON LINE 336 call READ (pvtx, vtocx, ALL_PARTS, vtoc_buf_descp, vtoc_bufp, sector_read_required, code); 001125 aa 003651 3520 04 epp2 1961,ic 004776 = 000016000000 001126 aa 002275 6700 04 tsp4 1213,ic 003423 STATEMENT 1 ON LINE 337 if code ^= 0 then goto ALLOC_PUT_RETURNS; 001127 aa 6 00101 2361 00 ldq pr6|65 code 001130 aa 000067 6010 04 tnz 55,ic 001217 STATEMENT 1 ON LINE 339 vtocep = vtoc_bufp; 001131 aa 6 00426 3735 20 epp7 pr6|278,* vtoc_bufp 001132 aa 6 00434 6535 00 spri7 pr6|284 vtocep STATEMENT 1 ON LINE 340 if vtoce.uid ^= ""b then do; 001133 aa 6 00434 3715 20 epp5 pr6|284,* vtocep 001134 aa 5 00001 2351 00 lda pr5|1 vtoce.uid 001135 aa 000010 6000 04 tze 8,ic 001145 STATEMENT 1 ON LINE 342 call SET_VOL_TROUBLE (pvtep, vtocx, "UID ^= 0 in free VTOCE"); 001136 aa 000 100 100 404 mlr (ic),(pr),fill(000) 001137 aa 777013 00 0030 desc9a -501,24 000151 = 125111104040 001140 aa 6 00640 00 0030 desc9a pr6|416,24 001141 aa 003541 3520 04 epp2 1889,ic 004702 = 000006000000 001142 aa 2 00000 2351 00 lda pr2|0 001143 aa 001533 6700 04 tsp4 859,ic 002676 STATEMENT 1 ON LINE 343 goto RETRY_ALLOC; 001144 aa 777726 7100 04 tra -42,ic 001072 STATEMENT 1 ON LINE 344 end; STATEMENT 1 ON LINE 346 if vtoc_buffer.scavenger_free_p_clock ^= old_pseudo_clock then do; 001145 aa 6 00422 3535 20 epp3 pr6|274,* vtoc_buffer_segp 001146 aa 3 00015 2361 00 ldq pr3|13 vtoc_buffer.scavenger_free_p_clock 001147 aa 6 00404 1161 00 cmpq pr6|260 old_pseudo_clock 001150 aa 000030 6000 04 tze 24,ic 001200 STATEMENT 1 ON LINE 348 vtoc_buffer.meters.scavenger_free_checks = vtoc_buffer.meters.scavenger_free_checks + 1; 001151 aa 3 00035 2351 00 lda pr3|29 vtoc_buffer.scavenger_free_checks 001152 aa 000044 7330 00 lrs 36 001153 aa 000001 0330 07 adl 1,dl 001154 aa 3 00035 7561 00 stq pr3|29 vtoc_buffer.scavenger_free_checks STATEMENT 1 ON LINE 349 call vtoce_stock_man$check_in_use (pvtep, vtocx, code); 001155 aa 6 00420 3521 00 epp2 pr6|272 pvtep 001156 aa 6 00642 2521 00 spri2 pr6|418 001157 aa 6 00413 3521 00 epp2 pr6|267 vtocx 001160 aa 6 00644 2521 00 spri2 pr6|420 001161 aa 6 00101 3521 00 epp2 pr6|65 code 001162 aa 6 00646 2521 00 spri2 pr6|422 001163 aa 6 00640 6211 00 eax1 pr6|416 001164 aa 014000 4310 07 fld 6144,dl 001165 aa 6 00044 3701 20 epp4 pr6|36,* 001166 la 4 00064 3521 20 epp2 pr4|52,* vtoce_stock_man$check_in_use 001167 aa 0 00623 7001 00 tsx0 pr0|403 call_ext_out STATEMENT 1 ON LINE 350 if code ^= 0 then do; 001170 aa 6 00101 2361 00 ldq pr6|65 code 001171 aa 000007 6000 04 tze 7,ic 001200 STATEMENT 1 ON LINE 352 vtoc_buffer.meters.scavenger_free_losses = vtoc_buffer.meters.scavenger_free_losses + 1; 001172 aa 6 00422 3735 20 epp7 pr6|274,* vtoc_buffer_segp 001173 aa 7 00036 2351 00 lda pr7|30 vtoc_buffer.scavenger_free_losses 001174 aa 000044 7330 00 lrs 36 001175 aa 000001 0330 07 adl 1,dl 001176 aa 7 00036 7561 00 stq pr7|30 vtoc_buffer.scavenger_free_losses STATEMENT 1 ON LINE 353 goto RETRY_ALLOC; 001177 aa 777673 7100 04 tra -69,ic 001072 STATEMENT 1 ON LINE 354 end; STATEMENT 1 ON LINE 355 end; STATEMENT 1 ON LINE 357 vtoc_buffer.unsafe_pvtx = pvtx; 001200 aa 6 00410 2361 00 ldq pr6|264 pvtx 001201 aa 6 00422 3735 20 epp7 pr6|274,* vtoc_buffer_segp 001202 aa 7 00014 7561 00 stq pr7|12 vtoc_buffer.unsafe_pvtx STATEMENT 1 ON LINE 359 call CLEAR_PAD (addr (local_vtoce_buffer), ALL_PARTS); 001203 aa 6 00104 3715 00 epp5 pr6|68 local_vtoce_buffer 001204 aa 6 00636 6515 00 spri5 pr6|414 001205 aa 003467 3520 04 epp2 1847,ic 004674 = 000004000000 001206 aa 001326 6700 04 tsp4 726,ic 002534 STATEMENT 1 ON LINE 361 unspec (vtoce_buffer) = unspec (local_vtoce_buffer); 001207 aa 6 00426 3735 20 epp7 pr6|278,* vtoc_bufp 001210 aa 000 100 100 500 mlr (pr),(pr),fill(000) 001211 aa 6 00104 00 1400 desc9a pr6|68,768 001212 aa 7 00000 00 1400 desc9a pr7|0,768 STATEMENT 1 ON LINE 362 call WRITE (ALL_PARTS, vtoc_buf_descp); 001213 aa 003453 3520 04 epp2 1835,ic 004666 = 000004000000 001214 aa 002573 6700 04 tsp4 1403,ic 004007 STATEMENT 1 ON LINE 364 return_vtocx = vtocx; 001215 aa 6 00413 2361 00 ldq pr6|267 vtocx 001216 aa 6 00411 7561 00 stq pr6|265 return_vtocx STATEMENT 1 ON LINE 366 ALLOC_PUT_RETURNS: vtoc_buffer.unsafe_pvtx = 0; 001217 aa 6 00422 3735 20 epp7 pr6|274,* vtoc_buffer_segp 001220 aa 7 00014 4501 00 stz pr7|12 vtoc_buffer.unsafe_pvtx STATEMENT 1 ON LINE 368 call UNLOCK; 001221 aa 003335 6700 04 tsp4 1757,ic 004556 STATEMENT 1 ON LINE 369 vtoc_buffer.meters.call_alloc = vtoc_buffer.meters.call_alloc + 1; 001222 aa 6 00422 3735 20 epp7 pr6|274,* vtoc_buffer_segp 001223 aa 7 00020 2351 00 lda pr7|16 vtoc_buffer.call_alloc 001224 aa 000044 7330 00 lrs 36 001225 aa 000001 0330 07 adl 1,dl 001226 aa 7 00020 7561 00 stq pr7|16 vtoc_buffer.call_alloc STATEMENT 1 ON LINE 371 Code = code; 001227 aa 6 00101 2361 00 ldq pr6|65 code 001230 aa 6 00444 7561 20 stq pr6|292,* Code STATEMENT 1 ON LINE 372 return (return_vtocx); 001231 aa 6 00440 2361 00 ldq pr6|288 001232 aa 000005 6010 04 tnz 5,ic 001237 001233 aa 6 00411 2361 00 ldq pr6|265 return_vtocx 001234 aa 6 00032 3715 20 epp5 pr6|26,* 001235 aa 5 00012 7561 20 stq pr5|10,* 001236 aa 0 00631 7101 00 tra pr0|409 return_mac 001237 aa 000027 7260 07 lxl6 23,dl 001240 aa 776717 3520 04 epp2 -561,ic 000157 = 162145164165 001241 aa 0 00716 7001 00 tsx0 pr0|462 signal_op 001242 aa 0 00631 7101 00 tra pr0|409 return_mac ENTRY TO free_vtoce STATEMENT 1 ON LINE 381 free_vtoce: entry (Pvid, Pvtx, Vtocx, Code); 001243 at 000004000122 001244 tt 000127000127 001245 ta 000125000000 001246 ta 001243000000 001247 da 000373300000 001250 aa 001320 6270 00 eax7 720 001251 aa 7 00034 3521 20 epp2 pr7|28,* 001252 aa 2 01045 2721 00 tsp2 pr2|549 ext_entry 001253 aa 000010000000 001254 aa 000000000000 001255 aa 6 00032 3735 20 epp7 pr6|26,* 001256 aa 7 00004 3715 20 epp5 pr7|4,* 001257 aa 6 00446 6515 00 spri5 pr6|294 001260 aa 7 00010 3535 20 epp3 pr7|8,* 001261 aa 6 00444 2535 00 spri3 pr6|292 001262 aa 000001 2360 07 ldq 1,dl 001263 aa 6 00440 7561 00 stq pr6|288 001264 aa 777064 7000 04 tsx0 -460,ic 000350 STATEMENT 1 ON LINE 384 pvid = Pvid; 001265 aa 6 00032 3735 20 epp7 pr6|26,* 001266 aa 7 00002 2351 20 lda pr7|2,* Pvid 001267 aa 6 00407 7551 00 sta pr6|263 pvid STATEMENT 1 ON LINE 385 pvtx = Pvtx; 001270 aa 6 00446 2361 20 ldq pr6|294,* Pvtx 001271 aa 6 00410 7561 00 stq pr6|264 pvtx STATEMENT 1 ON LINE 386 vtocx = Vtocx; 001272 aa 7 00006 2361 20 ldq pr7|6,* Vtocx 001273 aa 6 00413 7561 00 stq pr6|267 vtocx STATEMENT 1 ON LINE 387 Code = 0; 001274 aa 6 00444 4501 20 stz pr6|292,* Code STATEMENT 1 ON LINE 389 call SETUP_LOCK (pvtx, code); 001275 aa 003547 3520 04 epp2 1895,ic 005044 = 000004000000 001276 aa 003146 6700 04 tsp4 1638,ic 004444 STATEMENT 1 ON LINE 390 if code ^= 0 then goto FREE_VTOCE_RETURNS; 001277 aa 6 00101 2361 00 ldq pr6|65 code 001300 aa 000030 6010 04 tnz 24,ic 001330 STATEMENT 1 ON LINE 393 call VALIDATE_VTOCX (vtocx, code); 001301 aa 003535 3520 04 epp2 1885,ic 005036 = 000004000000 001302 aa 003122 6700 04 tsp4 1618,ic 004424 STATEMENT 1 ON LINE 394 if code ^= 0 then goto FREE_VTOCE_RETURNS; 001303 aa 6 00101 2361 00 ldq pr6|65 code 001304 aa 000024 6010 04 tnz 20,ic 001330 STATEMENT 1 ON LINE 397 call GET_BUFFER (pvtx, vtocx, vtoc_buf_descp, vtoc_bufp, code); 001305 aa 003455 3520 04 epp2 1837,ic 004762 = 000012000000 001306 aa 001576 6700 04 tsp4 894,ic 003104 STATEMENT 1 ON LINE 399 if code ^= 0 then goto FREE_VTOCE_RETURNS; 001307 aa 6 00101 2361 00 ldq pr6|65 code 001310 aa 000020 6010 04 tnz 16,ic 001330 STATEMENT 1 ON LINE 402 unspec (vtoce_buffer.parts) = ""b; 001311 aa 6 00426 3735 20 epp7 pr6|278,* vtoc_bufp 001312 aa 000 100 100 400 mlr (),(pr),fill(000) 001313 aa 000000 00 0000 desc9a 0,0 001314 aa 7 00000 00 1400 desc9a pr7|0,768 STATEMENT 1 ON LINE 403 call WRITE (ALL_PARTS, vtoc_buf_descp); 001315 aa 003351 3520 04 epp2 1769,ic 004666 = 000004000000 001316 aa 002471 6700 04 tsp4 1337,ic 004007 STATEMENT 1 ON LINE 405 call vtoce_stock_man$return_free_vtoce (pvtep, vtocx); 001317 aa 6 00420 3521 00 epp2 pr6|272 pvtep 001320 aa 6 00642 2521 00 spri2 pr6|418 001321 aa 6 00413 3521 00 epp2 pr6|267 vtocx 001322 aa 6 00644 2521 00 spri2 pr6|420 001323 aa 6 00640 6211 00 eax1 pr6|416 001324 aa 010000 4310 07 fld 4096,dl 001325 aa 6 00044 3701 20 epp4 pr6|36,* 001326 la 4 00072 3521 20 epp2 pr4|58,* vtoce_stock_man$return_free_vtoce 001327 aa 0 00623 7001 00 tsx0 pr0|403 call_ext_out STATEMENT 1 ON LINE 408 FREE_VTOCE_RETURNS: call UNLOCK; 001330 aa 003226 6700 04 tsp4 1686,ic 004556 STATEMENT 1 ON LINE 410 vtoc_buffer.meters.call_free = vtoc_buffer.meters.call_free + 1; 001331 aa 6 00422 3735 20 epp7 pr6|274,* vtoc_buffer_segp 001332 aa 7 00021 2351 00 lda pr7|17 vtoc_buffer.call_free 001333 aa 000044 7330 00 lrs 36 001334 aa 000001 0330 07 adl 1,dl 001335 aa 7 00021 7561 00 stq pr7|17 vtoc_buffer.call_free STATEMENT 1 ON LINE 412 Code = code; 001336 aa 6 00101 2361 00 ldq pr6|65 code 001337 aa 6 00444 7561 20 stq pr6|292,* Code STATEMENT 1 ON LINE 413 return; 001340 aa 6 00440 2361 00 ldq pr6|288 001341 aa 000005 6010 04 tnz 5,ic 001346 001342 aa 000027 7260 07 lxl6 23,dl 001343 aa 776614 3520 04 epp2 -628,ic 000157 = 162145164165 001344 aa 0 00716 7001 00 tsx0 pr0|462 signal_op 001345 aa 0 00631 7101 00 tra pr0|409 return_mac 001346 aa 0 00631 7101 00 tra pr0|409 return_mac ENTRY TO free_vtoce_for_scavenge STATEMENT 1 ON LINE 440 free_vtoce_for_scavenge: entry (Pvid, Pvtx, Vtocx, Code); 001347 ta 001243000000 001350 da 000404300000 001351 aa 001320 6270 00 eax7 720 001352 aa 7 00034 3521 20 epp2 pr7|28,* 001353 aa 2 01045 2721 00 tsp2 pr2|549 ext_entry 001354 aa 000010000000 001355 aa 000000000000 001356 aa 6 00032 3735 20 epp7 pr6|26,* 001357 aa 7 00004 3715 20 epp5 pr7|4,* 001360 aa 6 00446 6515 00 spri5 pr6|294 001361 aa 7 00010 3535 20 epp3 pr7|8,* 001362 aa 6 00444 2535 00 spri3 pr6|292 001363 aa 000001 2360 07 ldq 1,dl 001364 aa 6 00440 7561 00 stq pr6|288 001365 aa 776763 7000 04 tsx0 -525,ic 000350 STATEMENT 1 ON LINE 444 pvid = Pvid; 001366 aa 6 00032 3735 20 epp7 pr6|26,* 001367 aa 7 00002 2351 20 lda pr7|2,* Pvid 001370 aa 6 00407 7551 00 sta pr6|263 pvid STATEMENT 1 ON LINE 445 pvtx = Pvtx; 001371 aa 6 00446 2361 20 ldq pr6|294,* Pvtx 001372 aa 6 00410 7561 00 stq pr6|264 pvtx STATEMENT 1 ON LINE 446 vtocx = Vtocx; 001373 aa 7 00006 2361 20 ldq pr7|6,* Vtocx 001374 aa 6 00413 7561 00 stq pr6|267 vtocx STATEMENT 1 ON LINE 447 Code = 0; 001375 aa 6 00444 4501 20 stz pr6|292,* Code STATEMENT 1 ON LINE 449 call SETUP_LOCK (pvtx, code); 001376 aa 003446 3520 04 epp2 1830,ic 005044 = 000004000000 001377 aa 003045 6700 04 tsp4 1573,ic 004444 STATEMENT 1 ON LINE 450 if code ^= 0 then goto FREE_FOR_SCAVENGE_RETURNS; 001400 aa 6 00101 2361 00 ldq pr6|65 code 001401 aa 000052 6010 04 tnz 42,ic 001453 STATEMENT 1 ON LINE 453 call VALIDATE_VTOCX (vtocx, code); 001402 aa 003434 3520 04 epp2 1820,ic 005036 = 000004000000 001403 aa 003021 6700 04 tsp4 1553,ic 004424 STATEMENT 1 ON LINE 454 if code ^= 0 then goto FREE_FOR_SCAVENGE_RETURNS; 001404 aa 6 00101 2361 00 ldq pr6|65 code 001405 aa 000046 6010 04 tnz 38,ic 001453 STATEMENT 1 ON LINE 457 call READ (pvtx, vtocx, ALL_PARTS, vtoc_buf_descp, vtoc_bufp, sector_read_required, code); 001406 aa 003370 3520 04 epp2 1784,ic 004776 = 000016000000 001407 aa 002014 6700 04 tsp4 1036,ic 003423 STATEMENT 1 ON LINE 458 if code ^= 0 then goto FREE_FOR_SCAVENGE_RETURNS; 001410 aa 6 00101 2361 00 ldq pr6|65 code 001411 aa 000042 6010 04 tnz 34,ic 001453 STATEMENT 1 ON LINE 461 vtocep = vtoc_bufp; 001412 aa 6 00426 3735 20 epp7 pr6|278,* vtoc_bufp 001413 aa 6 00434 6535 00 spri7 pr6|284 vtocep STATEMENT 1 ON LINE 462 if vtoce.uid ^= ""b then do; 001414 aa 6 00434 3715 20 epp5 pr6|284,* vtocep 001415 aa 5 00001 2351 00 lda pr5|1 vtoce.uid 001416 aa 000005 6000 04 tze 5,ic 001423 STATEMENT 1 ON LINE 464 code = error_table_$vtoce_free; 001417 aa 6 00044 3701 20 epp4 pr6|36,* 001420 la 4 00020 2361 20 ldq pr4|16,* error_table_$vtoce_free 001421 aa 6 00101 7561 00 stq pr6|65 code STATEMENT 1 ON LINE 465 goto FREE_FOR_SCAVENGE_RETURNS; 001422 aa 000031 7100 04 tra 25,ic 001453 STATEMENT 1 ON LINE 466 end; STATEMENT 1 ON LINE 468 unspec (vtoce) = ""b; 001423 aa 000 100 100 400 mlr (),(pr),fill(000) 001424 aa 000000 00 0000 desc9a 0,0 001425 aa 5 00000 00 1400 desc9a pr5|0,768 STATEMENT 1 ON LINE 469 call WRITE (ALL_PARTS, vtoc_buf_descp); 001426 aa 003240 3520 04 epp2 1696,ic 004666 = 000004000000 001427 aa 002360 6700 04 tsp4 1264,ic 004007 STATEMENT 1 ON LINE 471 call vtoce_stock_man$return_if_not_free (pvtep, vtocx, code); 001430 aa 6 00420 3521 00 epp2 pr6|272 pvtep 001431 aa 6 00642 2521 00 spri2 pr6|418 001432 aa 6 00413 3521 00 epp2 pr6|267 vtocx 001433 aa 6 00644 2521 00 spri2 pr6|420 001434 aa 6 00101 3521 00 epp2 pr6|65 code 001435 aa 6 00646 2521 00 spri2 pr6|422 001436 aa 6 00640 6211 00 eax1 pr6|416 001437 aa 014000 4310 07 fld 6144,dl 001440 aa 6 00044 3701 20 epp4 pr6|36,* 001441 la 4 00070 3521 20 epp2 pr4|56,* vtoce_stock_man$return_if_not_free 001442 aa 0 00623 7001 00 tsx0 pr0|403 call_ext_out STATEMENT 1 ON LINE 473 vtoc_buffer.scavenger_free_p_clock = vtoc_buffer.scavenger_free_p_clock + 1; 001443 aa 6 00422 3735 20 epp7 pr6|274,* vtoc_buffer_segp 001444 aa 7 00015 2351 00 lda pr7|13 vtoc_buffer.scavenger_free_p_clock 001445 aa 000044 7330 00 lrs 36 001446 aa 000001 0330 07 adl 1,dl 001447 aa 7 00015 7561 00 stq pr7|13 vtoc_buffer.scavenger_free_p_clock STATEMENT 1 ON LINE 474 if vtoc_buffer.scavenger_free_p_clock > MAX_PSEUDO_CLOCK then vtoc_buffer.scavenger_free_p_clock = 0; 001450 aa 776413 1160 04 cmpq -757,ic 000063 = 000003641100 001451 aa 000002 6044 04 tmoz 2,ic 001453 001452 aa 7 00015 4501 00 stz pr7|13 vtoc_buffer.scavenger_free_p_clock STATEMENT 1 ON LINE 477 FREE_FOR_SCAVENGE_RETURNS: call UNLOCK; 001453 aa 003103 6700 04 tsp4 1603,ic 004556 STATEMENT 1 ON LINE 480 Code = code; 001454 aa 6 00101 2361 00 ldq pr6|65 code 001455 aa 6 00444 7561 20 stq pr6|292,* Code STATEMENT 1 ON LINE 481 return; 001456 aa 6 00440 2361 00 ldq pr6|288 001457 aa 000005 6010 04 tnz 5,ic 001464 001460 aa 000027 7260 07 lxl6 23,dl 001461 aa 776476 3520 04 epp2 -706,ic 000157 = 162145164165 001462 aa 0 00716 7001 00 tsx0 pr0|462 signal_op 001463 aa 0 00631 7101 00 tra pr0|409 return_mac 001464 aa 0 00631 7101 00 tra pr0|409 return_mac ENTRY TO await_vtoce STATEMENT 1 ON LINE 494 await_vtoce: entry (Pvid, Pvtx, Vtocx, Code); 001465 ta 001243000000 001466 da 000412300000 001467 aa 001320 6270 00 eax7 720 001470 aa 7 00034 3521 20 epp2 pr7|28,* 001471 aa 2 01045 2721 00 tsp2 pr2|549 ext_entry 001472 aa 000010000000 001473 aa 000000000000 001474 aa 6 00032 3735 20 epp7 pr6|26,* 001475 aa 7 00004 3715 20 epp5 pr7|4,* 001476 aa 6 00446 6515 00 spri5 pr6|294 001477 aa 7 00010 3535 20 epp3 pr7|8,* 001500 aa 6 00444 2535 00 spri3 pr6|292 001501 aa 000001 2360 07 ldq 1,dl 001502 aa 6 00440 7561 00 stq pr6|288 001503 aa 776645 7000 04 tsx0 -603,ic 000350 STATEMENT 1 ON LINE 497 pvid = Pvid; 001504 aa 6 00032 3735 20 epp7 pr6|26,* 001505 aa 7 00002 2351 20 lda pr7|2,* Pvid 001506 aa 6 00407 7551 00 sta pr6|263 pvid STATEMENT 1 ON LINE 498 pvtx = Pvtx; 001507 aa 6 00446 2361 20 ldq pr6|294,* Pvtx 001510 aa 6 00410 7561 00 stq pr6|264 pvtx STATEMENT 1 ON LINE 499 vtocx = Vtocx; 001511 aa 7 00006 2361 20 ldq pr7|6,* Vtocx 001512 aa 6 00413 7561 00 stq pr6|267 vtocx STATEMENT 1 ON LINE 500 Code = 0; 001513 aa 6 00444 4501 20 stz pr6|292,* Code STATEMENT 1 ON LINE 502 call SETUP_LOCK (pvtx, code); 001514 aa 003330 3520 04 epp2 1752,ic 005044 = 000004000000 001515 aa 002727 6700 04 tsp4 1495,ic 004444 STATEMENT 1 ON LINE 503 if code ^= 0 then goto AWAIT_RETURNS; 001516 aa 6 00101 2361 00 ldq pr6|65 code 001517 aa 000044 6010 04 tnz 36,ic 001563 STATEMENT 1 ON LINE 506 call VALIDATE_VTOCX (vtocx, code); 001520 aa 003316 3520 04 epp2 1742,ic 005036 = 000004000000 001521 aa 002703 6700 04 tsp4 1475,ic 004424 STATEMENT 1 ON LINE 507 if code ^= 0 then goto AWAIT_RETURNS; 001522 aa 6 00101 2361 00 ldq pr6|65 code 001523 aa 000040 6010 04 tnz 32,ic 001563 STATEMENT 1 ON LINE 510 RETRY_AWAIT: call vtoc_search$search (pvtx, vtocx, vtoc_buf_descp); 001524 aa 6 00410 3521 00 epp2 pr6|264 pvtx 001525 aa 6 00642 2521 00 spri2 pr6|418 001526 aa 6 00413 3521 00 epp2 pr6|267 vtocx 001527 aa 6 00644 2521 00 spri2 pr6|420 001530 aa 6 00424 3521 00 epp2 pr6|276 vtoc_buf_descp 001531 aa 6 00646 2521 00 spri2 pr6|422 001532 aa 6 00640 6211 00 eax1 pr6|416 001533 aa 014000 4310 07 fld 6144,dl 001534 aa 6 00044 3701 20 epp4 pr6|36,* 001535 la 4 00062 3521 20 epp2 pr4|50,* vtoc_search$search 001536 aa 0 00623 7001 00 tsx0 pr0|403 call_ext_out STATEMENT 1 ON LINE 513 if vtoc_buf_descp = null () then goto AWAIT_RETURNS; 001537 aa 6 00424 2371 00 ldaq pr6|276 vtoc_buf_descp 001540 aa 776370 6770 04 eraq -776,ic 000130 = 077777000043 000001000000 001541 aa 0 00460 3771 00 anaq pr0|304 = 077777000077 777777077077 001542 aa 000021 6000 04 tze 17,ic 001563 STATEMENT 1 ON LINE 516 if vtoc_buf_desc.os then do; 001543 aa 6 00424 3735 20 epp7 pr6|276,* vtoc_buf_descp 001544 aa 7 00001 2351 00 lda pr7|1 vtoc_buf_desc.os 001545 aa 004000 3150 03 cana 2048,du 001546 aa 000006 6000 04 tze 6,ic 001554 STATEMENT 1 ON LINE 518 call WAIT (vtoc_buf_descp, code); 001547 aa 003111 3520 04 epp2 1609,ic 004660 = 000004000000 001550 aa 002535 6700 04 tsp4 1373,ic 004305 STATEMENT 1 ON LINE 519 if code ^= 0 then goto AWAIT_RETURNS; 001551 aa 6 00101 2361 00 ldq pr6|65 code 001552 aa 000011 6010 04 tnz 9,ic 001563 STATEMENT 1 ON LINE 521 goto RETRY_AWAIT; 001553 aa 777751 7100 04 tra -23,ic 001524 STATEMENT 1 ON LINE 522 end; STATEMENT 1 ON LINE 524 if vtoc_buf_desc.write_sw & vtoc_buf_desc.err /* Hot buffer */ then code = error_table_$vtoc_io_err; 001554 aa 7 00001 2351 00 lda pr7|1 vtoc_buf_desc.err 001555 aa 050000 3750 03 ana 20480,du 001556 aa 050000 1150 03 cmpa 20480,du 001557 aa 000004 6010 04 tnz 4,ic 001563 001560 aa 6 00044 3701 20 epp4 pr6|36,* 001561 la 4 00016 2361 20 ldq pr4|14,* error_table_$vtoc_io_err 001562 aa 6 00101 7561 00 stq pr6|65 code STATEMENT 1 ON LINE 527 AWAIT_RETURNS: call UNLOCK; 001563 aa 002773 6700 04 tsp4 1531,ic 004556 STATEMENT 1 ON LINE 529 vtoc_buffer.meters.call_await = vtoc_buffer.meters.call_await + 1; 001564 aa 6 00422 3735 20 epp7 pr6|274,* vtoc_buffer_segp 001565 aa 7 00022 2351 00 lda pr7|18 vtoc_buffer.call_await 001566 aa 000044 7330 00 lrs 36 001567 aa 000001 0330 07 adl 1,dl 001570 aa 7 00022 7561 00 stq pr7|18 vtoc_buffer.call_await STATEMENT 1 ON LINE 531 Code = code; 001571 aa 6 00101 2361 00 ldq pr6|65 code 001572 aa 6 00444 7561 20 stq pr6|292,* Code STATEMENT 1 ON LINE 532 return; 001573 aa 6 00440 2361 00 ldq pr6|288 001574 aa 000005 6010 04 tnz 5,ic 001601 001575 aa 000027 7260 07 lxl6 23,dl 001576 aa 776361 3520 04 epp2 -783,ic 000157 = 162145164165 001577 aa 0 00716 7001 00 tsx0 pr0|462 signal_op 001600 aa 0 00631 7101 00 tra pr0|409 return_mac 001601 aa 0 00631 7101 00 tra pr0|409 return_mac ENTRY TO cleanup_pv STATEMENT 1 ON LINE 541 cleanup_pv: entry (Pvtx, Code); 001602 at 000002000127 001603 ta 000125000000 001604 ta 001602000000 001605 da 000420300000 001606 aa 001320 6270 00 eax7 720 001607 aa 7 00034 3521 20 epp2 pr7|28,* 001610 aa 2 01045 2721 00 tsp2 pr2|549 ext_entry 001611 aa 000004000000 001612 aa 000000000000 001613 aa 6 00032 3735 20 epp7 pr6|26,* 001614 aa 7 00002 3715 20 epp5 pr7|2,* 001615 aa 6 00446 6515 00 spri5 pr6|294 001616 aa 7 00004 3535 20 epp3 pr7|4,* 001617 aa 6 00444 2535 00 spri3 pr6|292 001620 aa 000001 2360 07 ldq 1,dl 001621 aa 6 00440 7561 00 stq pr6|288 001622 aa 776526 7000 04 tsx0 -682,ic 000350 STATEMENT 1 ON LINE 544 pvid = ""b; 001623 aa 6 00407 4501 00 stz pr6|263 pvid STATEMENT 1 ON LINE 545 pvtx = Pvtx; 001624 aa 6 00446 2361 20 ldq pr6|294,* Pvtx 001625 aa 6 00410 7561 00 stq pr6|264 pvtx STATEMENT 1 ON LINE 546 vtocx = -1; 001626 aa 000001 3360 07 lcq 1,dl 001627 aa 6 00413 7561 00 stq pr6|267 vtocx STATEMENT 1 ON LINE 547 Code = 0; 001630 aa 6 00444 4501 20 stz pr6|292,* Code STATEMENT 1 ON LINE 549 call SETUP_LOCK (pvtx, code); 001631 aa 003213 3520 04 epp2 1675,ic 005044 = 000004000000 001632 aa 002612 6700 04 tsp4 1418,ic 004444 STATEMENT 1 ON LINE 551 do bufx = 1 to vtoc_buffer.n_bufs; 001633 aa 6 00422 3735 20 epp7 pr6|274,* vtoc_buffer_segp 001634 aa 7 00003 2361 00 ldq pr7|3 vtoc_buffer.n_bufs 001635 aa 6 00451 7561 00 stq pr6|297 001636 aa 000001 2360 07 ldq 1,dl 001637 aa 6 00100 7561 00 stq pr6|64 bufx 001640 aa 6 00100 2361 00 ldq pr6|64 bufx 001641 aa 6 00451 1161 00 cmpq pr6|297 001642 aa 000034 6054 04 tpnz 28,ic 001676 STATEMENT 1 ON LINE 552 vtoc_buf_descp = addr (vtoc_buf_desc_array (bufx)); 001643 aa 000003 4020 07 mpy 3,dl 001644 aa 6 00430 3735 20 epp7 pr6|280,* vtoc_buf_desc_arrayp 001645 aa 7 77775 3735 06 epp7 pr7|-3,ql vtoc_buf_desc_array 001646 aa 6 00424 6535 00 spri7 pr6|276 vtoc_buf_descp STATEMENT 1 ON LINE 553 if vtoc_buf_desc.pvtx = pvtx & vtoc_buf_desc.used = "1"b /* This volume, Buffer in use */ & vtoc_buf_desc.err & vtoc_buf_desc.write_sw & ^vtoc_buf_desc.os /* Hot buffer */ then call WRITE ((vtoc_buf_desc.parts_used), vtoc_buf_descp); 001647 aa 7 00000 2351 00 lda pr7|0 vtoc_buf_desc.pvtx 001650 aa 000066 7330 00 lrs 54 001651 aa 6 00410 1161 00 cmpq pr6|264 pvtx 001652 aa 000022 6010 04 tnz 18,ic 001674 001653 aa 7 00001 2351 00 lda pr7|1 vtoc_buf_desc.used 001654 aa 000010 7350 00 als 8 001655 aa 0 00002 3771 00 anaq pr0|2 = 400000000000 000000000000 001656 aa 400000 1150 03 cmpa 131072,du 001657 aa 000015 6010 04 tnz 13,ic 001674 001660 aa 7 00001 2351 00 lda pr7|1 vtoc_buf_desc.write_sw 001661 aa 050000 3750 03 ana 20480,du 001662 aa 050000 1150 03 cmpa 20480,du 001663 aa 000011 6010 04 tnz 9,ic 001674 001664 aa 7 00001 2351 00 lda pr7|1 vtoc_buf_desc.os 001665 aa 004000 3150 03 cana 2048,du 001666 aa 000006 6010 04 tnz 6,ic 001674 001667 aa 7 00001 2351 00 lda pr7|1 vtoc_buf_desc.parts_used 001670 aa 0 00006 3771 00 anaq pr0|6 = 700000000000 000000000000 001671 aa 6 00635 7551 00 sta pr6|413 001672 aa 002760 3520 04 epp2 1520,ic 004652 = 000004000000 001673 aa 002114 6700 04 tsp4 1100,ic 004007 STATEMENT 1 ON LINE 557 end; 001674 aa 6 00100 0541 00 aos pr6|64 bufx 001675 aa 777743 7100 04 tra -29,ic 001640 STATEMENT 1 ON LINE 559 do bufx = 1 to vtoc_buffer.n_bufs; 001676 aa 6 00422 3735 20 epp7 pr6|274,* vtoc_buffer_segp 001677 aa 7 00003 2361 00 ldq pr7|3 vtoc_buffer.n_bufs 001700 aa 6 00452 7561 00 stq pr6|298 001701 aa 000001 2360 07 ldq 1,dl 001702 aa 6 00100 7561 00 stq pr6|64 bufx 001703 aa 000000 0110 03 nop 0,du 001704 aa 6 00100 2361 00 ldq pr6|64 bufx 001705 aa 6 00452 1161 00 cmpq pr6|298 001706 aa 000024 6054 04 tpnz 20,ic 001732 STATEMENT 1 ON LINE 560 vtoc_buf_descp = addr (vtoc_buf_desc_array (bufx)); 001707 aa 000003 4020 07 mpy 3,dl 001710 aa 6 00430 3735 20 epp7 pr6|280,* vtoc_buf_desc_arrayp 001711 aa 7 77775 3735 06 epp7 pr7|-3,ql vtoc_buf_desc_array 001712 aa 6 00424 6535 00 spri7 pr6|276 vtoc_buf_descp STATEMENT 1 ON LINE 561 do while (vtoc_buf_desc.pvtx = pvtx & vtoc_buf_desc.used /* This volume, Buffer in use */ & vtoc_buf_desc.os); 001713 aa 000000 0110 03 nop 0,du 001714 aa 6 00424 2351 20 lda pr6|276,* vtoc_buf_desc.pvtx 001715 aa 000066 7330 00 lrs 54 001716 aa 6 00410 1161 00 cmpq pr6|264 pvtx 001717 aa 000011 6010 04 tnz 9,ic 001730 001720 aa 6 00424 3735 20 epp7 pr6|276,* vtoc_buf_descp 001721 aa 7 00001 2351 00 lda pr7|1 vtoc_buf_desc.os 001722 aa 005000 3750 03 ana 2560,du 001723 aa 005000 1150 03 cmpa 2560,du 001724 aa 000004 6010 04 tnz 4,ic 001730 STATEMENT 1 ON LINE 563 call WAIT (vtoc_buf_descp, code); 001725 aa 002733 3520 04 epp2 1499,ic 004660 = 000004000000 001726 aa 002357 6700 04 tsp4 1263,ic 004305 STATEMENT 1 ON LINE 564 end; 001727 aa 777765 7100 04 tra -11,ic 001714 STATEMENT 1 ON LINE 565 end; 001730 aa 6 00100 0541 00 aos pr6|64 bufx 001731 aa 777753 7100 04 tra -21,ic 001704 STATEMENT 1 ON LINE 567 code = 0; 001732 aa 6 00101 4501 00 stz pr6|65 code STATEMENT 1 ON LINE 568 do bufx = 1 to vtoc_buffer.n_bufs; 001733 aa 6 00422 3735 20 epp7 pr6|274,* vtoc_buffer_segp 001734 aa 7 00003 2361 00 ldq pr7|3 vtoc_buffer.n_bufs 001735 aa 6 00453 7561 00 stq pr6|299 001736 aa 000001 2360 07 ldq 1,dl 001737 aa 6 00100 7561 00 stq pr6|64 bufx 001740 aa 6 00100 2361 00 ldq pr6|64 bufx 001741 aa 6 00453 1161 00 cmpq pr6|299 001742 aa 000065 6054 04 tpnz 53,ic 002027 STATEMENT 1 ON LINE 569 vtoc_buf_descp = addr (vtoc_buf_desc_array (bufx)); 001743 aa 000003 4020 07 mpy 3,dl 001744 aa 6 00430 3735 20 epp7 pr6|280,* vtoc_buf_desc_arrayp 001745 aa 7 77775 3735 06 epp7 pr7|-3,ql vtoc_buf_desc_array 001746 aa 6 00424 6535 00 spri7 pr6|276 vtoc_buf_descp STATEMENT 1 ON LINE 570 if vtoc_buf_desc.pvtx = pvtx & vtoc_buf_desc.used /* This volume, Buffer in use */ then do; 001747 aa 7 00000 2351 00 lda pr7|0 vtoc_buf_desc.pvtx 001750 aa 000066 7330 00 lrs 54 001751 aa 6 00410 1161 00 cmpq pr6|264 pvtx 001752 aa 000053 6010 04 tnz 43,ic 002025 001753 aa 7 00001 2351 00 lda pr7|1 vtoc_buf_desc.used 001754 aa 001000 3150 03 cana 512,du 001755 aa 000050 6000 04 tze 40,ic 002025 STATEMENT 1 ON LINE 573 if vtoc_buf_desc.os then call syserr (CRASH, "vtoc_man: Buffer out-of-service during cleanup"); 001756 aa 7 00001 2351 00 lda pr7|1 vtoc_buf_desc.os 001757 aa 004000 3150 03 cana 2048,du 001760 aa 000021 6000 04 tze 17,ic 002001 001761 aa 000 100 100 404 mlr (ic),(pr),fill(000) 001762 aa 776254 00 0060 desc9a -852,48 000235 = 166164157143 001763 aa 6 00652 00 0060 desc9a pr6|426,48 001764 aa 776135 3520 04 epp2 -931,ic 000121 = 000000000001 001765 aa 6 00642 2521 00 spri2 pr6|418 001766 aa 6 00652 3521 00 epp2 pr6|426 001767 aa 6 00644 2521 00 spri2 pr6|420 001770 aa 776137 3520 04 epp2 -929,ic 000127 = 404000000021 001771 aa 6 00646 2521 00 spri2 pr6|422 001772 aa 776122 3520 04 epp2 -942,ic 000114 = 524000000056 001773 aa 6 00650 2521 00 spri2 pr6|424 001774 aa 6 00640 6211 00 eax1 pr6|416 001775 aa 010000 4310 07 fld 4096,dl 001776 aa 6 00044 3701 20 epp4 pr6|36,* 001777 la 4 00054 3521 20 epp2 pr4|44,* syserr 002000 aa 0 00622 7001 00 tsx0 pr0|402 call_ext_out_desc STATEMENT 1 ON LINE 575 if vtoc_buf_desc.write_sw & vtoc_buf_desc.err /* Hot buffer */ then do; 002001 aa 6 00424 3735 20 epp7 pr6|276,* vtoc_buf_descp 002002 aa 7 00001 2351 00 lda pr7|1 vtoc_buf_desc.err 002003 aa 050000 3750 03 ana 20480,du 002004 aa 050000 1150 03 cmpa 20480,du 002005 aa 000016 6010 04 tnz 14,ic 002023 STATEMENT 1 ON LINE 578 call SET_VOL_TROUBLE (pvtep, (vtoc_buf_desc.vtocx), "Hot buffer abandoned during cleanup"); 002006 aa 7 00000 2351 00 lda pr7|0 vtoc_buf_desc.vtocx 002007 aa 000022 7350 00 als 18 002010 aa 000066 7330 00 lrs 54 002011 aa 6 00635 7561 00 stq pr6|413 002012 aa 000 100 100 404 mlr (ic),(pr),fill(000) 002013 aa 776164 00 0044 desc9a -908,36 000176 = 110157164040 002014 aa 6 00640 00 0044 desc9a pr6|416,36 002015 aa 002617 3520 04 epp2 1423,ic 004634 = 000006000000 002016 aa 2 00000 2351 00 lda pr2|0 002017 aa 000657 6700 04 tsp4 431,ic 002676 STATEMENT 1 ON LINE 580 code = error_table_$vtoc_io_err; 002020 aa 6 00044 3701 20 epp4 pr6|36,* 002021 la 4 00016 2361 20 ldq pr4|14,* error_table_$vtoc_io_err 002022 aa 6 00101 7561 00 stq pr6|65 code STATEMENT 1 ON LINE 581 end; STATEMENT 1 ON LINE 582 call FLUSH_BUFFER (vtoc_buf_descp); 002023 aa 002605 3520 04 epp2 1413,ic 004630 = 000002000000 002024 aa 001024 6700 04 tsp4 532,ic 003050 STATEMENT 1 ON LINE 583 end; STATEMENT 1 ON LINE 584 end; 002025 aa 6 00100 0541 00 aos pr6|64 bufx 002026 aa 777712 7100 04 tra -54,ic 001740 STATEMENT 1 ON LINE 586 call UNLOCK; 002027 aa 002527 6700 04 tsp4 1367,ic 004556 STATEMENT 1 ON LINE 588 Code = code; 002030 aa 6 00101 2361 00 ldq pr6|65 code 002031 aa 6 00444 7561 20 stq pr6|292,* Code STATEMENT 1 ON LINE 589 return; 002032 aa 6 00440 2361 00 ldq pr6|288 002033 aa 000005 6010 04 tnz 5,ic 002040 002034 aa 000027 7260 07 lxl6 23,dl 002035 aa 776122 3520 04 epp2 -942,ic 000157 = 162145164165 002036 aa 0 00716 7001 00 tsx0 pr0|462 signal_op 002037 aa 0 00631 7101 00 tra pr0|409 return_mac 002040 aa 0 00631 7101 00 tra pr0|409 return_mac ENTRY TO stabilize STATEMENT 1 ON LINE 599 stabilize: entry; 002041 da 000426200000 002042 aa 001320 6270 00 eax7 720 002043 aa 7 00034 3521 20 epp2 pr7|28,* 002044 aa 2 01045 2721 00 tsp2 pr2|549 ext_entry 002045 aa 000000000000 002046 aa 000000000000 002047 aa 000001 2360 07 ldq 1,dl 002050 aa 6 00440 7561 00 stq pr6|288 002051 aa 776277 7000 04 tsx0 -833,ic 000350 STATEMENT 1 ON LINE 602 pvid = ""b; 002052 aa 6 00407 4501 00 stz pr6|263 pvid STATEMENT 1 ON LINE 603 pvtx = -1; 002053 aa 000001 3360 07 lcq 1,dl 002054 aa 6 00410 7561 00 stq pr6|264 pvtx STATEMENT 1 ON LINE 604 vtocx = -1; 002055 aa 6 00413 7561 00 stq pr6|267 vtocx STATEMENT 1 ON LINE 606 vtoc_buffer_segp = addr (vtoc_buffer_seg$); 002056 aa 6 00044 3701 20 epp4 pr6|36,* 002057 la 4 00076 3735 20 epp7 pr4|62,* vtoc_buffer_seg$ 002060 aa 6 00422 6535 00 spri7 pr6|274 vtoc_buffer_segp STATEMENT 1 ON LINE 607 vtoc_buffer.lock.processid = ""b; 002061 aa 7 00000 4501 00 stz pr7|0 vtoc_buffer.processid STATEMENT 1 ON LINE 609 call SETUP_LOCK (pvtx, code); 002062 aa 002762 3520 04 epp2 1522,ic 005044 = 000004000000 002063 aa 002361 6700 04 tsp4 1265,ic 004444 STATEMENT 1 ON LINE 611 call RETHREAD; 002064 aa 000723 6700 04 tsp4 467,ic 003007 STATEMENT 1 ON LINE 613 do bufx = 1 to vtoc_buffer.n_bufs; 002065 aa 6 00422 3735 20 epp7 pr6|274,* vtoc_buffer_segp 002066 aa 7 00003 2361 00 ldq pr7|3 vtoc_buffer.n_bufs 002067 aa 6 00454 7561 00 stq pr6|300 002070 aa 000001 2360 07 ldq 1,dl 002071 aa 6 00100 7561 00 stq pr6|64 bufx 002072 aa 6 00100 2361 00 ldq pr6|64 bufx 002073 aa 6 00454 1161 00 cmpq pr6|300 002074 aa 000025 6054 04 tpnz 21,ic 002121 STATEMENT 1 ON LINE 614 vtoc_buf_descp = addr (vtoc_buf_desc_array (bufx)); 002075 aa 000003 4020 07 mpy 3,dl 002076 aa 6 00430 3735 20 epp7 pr6|280,* vtoc_buf_desc_arrayp 002077 aa 7 77775 3735 06 epp7 pr7|-3,ql vtoc_buf_desc_array 002100 aa 6 00424 6535 00 spri7 pr6|276 vtoc_buf_descp STATEMENT 1 ON LINE 615 if vtoc_buf_desc.used & vtoc_buf_desc.os /* Buffer in use, I/O in progress */ then if vtoc_buf_desc.write_sw then do; 002101 aa 7 00001 2351 00 lda pr7|1 vtoc_buf_desc.os 002102 aa 005000 3750 03 ana 2560,du 002103 aa 005000 1150 03 cmpa 2560,du 002104 aa 000013 6010 04 tnz 11,ic 002117 002105 aa 7 00001 2351 00 lda pr7|1 vtoc_buf_desc.write_sw 002106 aa 010000 3150 03 cana 4096,du 002107 aa 000006 6000 04 tze 6,ic 002115 STATEMENT 1 ON LINE 618 vtoc_buf_desc.err = "1"b; 002110 aa 040000 2350 03 lda 16384,du 002111 aa 7 00001 2551 00 orsa pr7|1 vtoc_buf_desc.err STATEMENT 1 ON LINE 619 vtoc_buf_desc.os = "0"b; 002112 aa 002514 2350 04 lda 1356,ic 004626 = 773777777777 002113 aa 7 00001 3551 00 ansa pr7|1 vtoc_buf_desc.os STATEMENT 1 ON LINE 620 end; 002114 aa 000003 7100 04 tra 3,ic 002117 STATEMENT 1 ON LINE 621 else call FLUSH_BUFFER (vtoc_buf_descp); 002115 aa 002513 3520 04 epp2 1355,ic 004630 = 000002000000 002116 aa 000732 6700 04 tsp4 474,ic 003050 STATEMENT 1 ON LINE 622 end; 002117 aa 6 00100 0541 00 aos pr6|64 bufx 002120 aa 777752 7100 04 tra -22,ic 002072 STATEMENT 1 ON LINE 624 call UNLOCK; 002121 aa 002435 6700 04 tsp4 1309,ic 004556 STATEMENT 1 ON LINE 626 return; 002122 aa 6 00440 2361 00 ldq pr6|288 002123 aa 000005 6010 04 tnz 5,ic 002130 002124 aa 000027 7260 07 lxl6 23,dl 002125 aa 776032 3520 04 epp2 -998,ic 000157 = 162145164165 002126 aa 0 00716 7001 00 tsx0 pr0|462 signal_op 002127 aa 0 00631 7101 00 tra pr0|409 return_mac 002130 aa 0 00631 7101 00 tra pr0|409 return_mac ENTRY TO crawlout STATEMENT 1 ON LINE 642 crawlout: entry; 002131 da 000434200000 002132 aa 001320 6270 00 eax7 720 002133 aa 7 00034 3521 20 epp2 pr7|28,* 002134 aa 2 01045 2721 00 tsp2 pr2|549 ext_entry 002135 aa 000000000000 002136 aa 000000000000 002137 aa 000001 2360 07 ldq 1,dl 002140 aa 6 00440 7561 00 stq pr6|288 002141 aa 776207 7000 04 tsx0 -889,ic 000350 STATEMENT 1 ON LINE 646 vtoc_buffer_segp = addr (vtoc_buffer_seg$); 002142 aa 6 00044 3701 20 epp4 pr6|36,* 002143 la 4 00076 3735 20 epp7 pr4|62,* vtoc_buffer_seg$ 002144 aa 6 00422 6535 00 spri7 pr6|274 vtoc_buffer_segp STATEMENT 1 ON LINE 647 vtoc_buf_desc_arrayp = ptr (vtoc_buffer_segp, vtoc_buffer.buf_desc_offset); 002145 aa 7 00010 2351 00 lda pr7|8 vtoc_buffer.buf_desc_offset 002146 aa 7 00000 3521 00 epp2 pr7|0 002147 aa 000000 3120 01 eawp2 0,au 002150 aa 6 00430 2521 00 spri2 pr6|280 vtoc_buf_desc_arrayp STATEMENT 1 ON LINE 648 vtoc_buf_arrayp = ptr (vtoc_buffer_segp, vtoc_buffer.buf_offset); 002151 aa 7 00011 2351 00 lda pr7|9 vtoc_buffer.buf_offset 002152 aa 7 00000 3515 00 epp1 pr7|0 002153 aa 000000 3114 01 eawp1 0,au 002154 aa 6 00432 2515 00 spri1 pr6|282 vtoc_buf_arrayp STATEMENT 1 ON LINE 649 pvt_arrayp = addr (pvt$array); 002155 la 4 00074 3715 20 epp5 pr4|60,* pvt$array 002156 aa 6 00416 6515 00 spri5 pr6|270 pvt_arrayp STATEMENT 1 ON LINE 651 if vtoc_buffer.lock.processid ^= pds$processid then return; 002157 aa 7 00000 2351 00 lda pr7|0 vtoc_buffer.processid 002160 la 4 00022 1151 20 cmpa pr4|18,* pds$processid 002161 aa 000010 6000 04 tze 8,ic 002171 002162 aa 6 00440 2361 00 ldq pr6|288 002163 aa 000005 6010 04 tnz 5,ic 002170 002164 aa 000027 7260 07 lxl6 23,dl 002165 aa 775772 3520 04 epp2 -1030,ic 000157 = 162145164165 002166 aa 0 00716 7001 00 tsx0 pr0|462 signal_op 002167 aa 0 00631 7101 00 tra pr0|409 return_mac 002170 aa 0 00631 7101 00 tra pr0|409 return_mac STATEMENT 1 ON LINE 654 call RETHREAD; 002171 aa 000616 6700 04 tsp4 398,ic 003007 STATEMENT 1 ON LINE 656 if vtoc_buffer.unsafe_pvtx ^= 0 then do; 002172 aa 6 00422 3735 20 epp7 pr6|274,* vtoc_buffer_segp 002173 aa 7 00014 2361 00 ldq pr7|12 vtoc_buffer.unsafe_pvtx 002174 aa 000022 6000 04 tze 18,ic 002216 STATEMENT 1 ON LINE 658 pvtep = addr (pvt_array (vtoc_buffer.unsafe_pvtx)); 002175 aa 000034 4020 07 mpy 28,dl 002176 aa 6 00416 3715 20 epp5 pr6|270,* pvt_arrayp 002177 aa 5 77744 3715 06 epp5 pr5|-28,ql pvt_array 002200 aa 6 00420 6515 00 spri5 pr6|272 pvtep STATEMENT 1 ON LINE 659 call SET_VOL_TROUBLE (pvtep, -1, "Update in progress on crawlout by " || pds$process_group_id); 002201 aa 000001 3360 07 lcq 1,dl 002202 aa 6 00635 7561 00 stq pr6|413 002203 aa 040 100 100 404 mlr (ic),(pr),fill(040) 002204 aa 775762 00 0042 desc9a -1038,34 000165 = 125160144141 002205 aa 6 00666 00 0042 desc9a pr6|438,34 002206 aa 6 00044 3701 20 epp4 pr6|36,* 002207 la 4 00024 3535 20 epp3 pr4|20,* pds$process_group_id 002210 aa 040 100 100 500 mlr (pr),(pr),fill(040) 002211 aa 3 00000 00 0040 desc9a pr3|0,32 pds$process_group_id 002212 aa 6 00676 40 0040 desc9a pr6|446(2),32 002213 aa 002375 3520 04 epp2 1277,ic 004610 = 000006000000 002214 aa 2 00000 2351 00 lda pr2|0 002215 aa 000461 6700 04 tsp4 305,ic 002676 STATEMENT 1 ON LINE 660 end; STATEMENT 1 ON LINE 662 do bufx = 1 to vtoc_buffer.n_bufs; 002216 aa 6 00422 3735 20 epp7 pr6|274,* vtoc_buffer_segp 002217 aa 7 00003 2361 00 ldq pr7|3 vtoc_buffer.n_bufs 002220 aa 6 00455 7561 00 stq pr6|301 002221 aa 000001 2360 07 ldq 1,dl 002222 aa 6 00100 7561 00 stq pr6|64 bufx 002223 aa 000000 0110 03 nop 0,du 002224 aa 6 00100 2361 00 ldq pr6|64 bufx 002225 aa 6 00455 1161 00 cmpq pr6|301 002226 aa 000277 6054 04 tpnz 191,ic 002525 STATEMENT 1 ON LINE 663 vtoc_buf_descp = addr (vtoc_buf_desc_array (bufx)); 002227 aa 000003 4020 07 mpy 3,dl 002230 aa 6 00430 3735 20 epp7 pr6|280,* vtoc_buf_desc_arrayp 002231 aa 7 77775 3735 06 epp7 pr7|-3,ql vtoc_buf_desc_array 002232 aa 6 00424 6535 00 spri7 pr6|276 vtoc_buf_descp STATEMENT 1 ON LINE 664 if vtoc_buf_desc.used & vtoc_buf_desc.os & ^vtoc_buf_desc.ioq /* buffer in use, out-of-service, not queued */ then do; 002233 aa 7 00001 2351 00 lda pr7|1 vtoc_buf_desc.os 002234 aa 005000 3750 03 ana 2560,du 002235 aa 005000 1150 03 cmpa 2560,du 002236 aa 000265 6010 04 tnz 181,ic 002523 002237 aa 7 00001 2351 00 lda pr7|1 vtoc_buf_desc.ioq 002240 aa 002000 3150 03 cana 1024,du 002241 aa 000262 6010 04 tnz 178,ic 002523 STATEMENT 1 ON LINE 667 pvtx = vtoc_buf_desc.pvtx; 002242 aa 7 00000 2351 00 lda pr7|0 vtoc_buf_desc.pvtx 002243 aa 000066 7330 00 lrs 54 002244 aa 6 00410 7561 00 stq pr6|264 pvtx STATEMENT 1 ON LINE 668 vtocx = vtoc_buf_desc.vtocx; 002245 aa 7 00000 2351 00 lda pr7|0 vtoc_buf_desc.vtocx 002246 aa 000022 7350 00 als 18 002247 aa 000066 7330 00 lrs 54 002250 aa 6 00413 7561 00 stq pr6|267 vtocx STATEMENT 1 ON LINE 669 wait_event = bit (bin (vtoc_buffer.wait_event_constant + vtoc_buf_desc.wait_index, 36), 36); 002251 aa 7 00001 2351 00 lda pr7|1 vtoc_buf_desc.wait_index 002252 aa 000022 7350 00 als 18 002253 aa 000066 7330 00 lrs 54 002254 aa 6 00635 7561 00 stq pr6|413 vtoc_buf_desc.wait_index 002255 aa 6 00422 3715 20 epp5 pr6|274,* vtoc_buffer_segp 002256 aa 5 00007 2351 00 lda pr5|7 vtoc_buffer.wait_event_constant 002257 aa 000044 7730 00 lrl 36 002260 aa 6 00635 0331 00 adl pr6|413 vtoc_buf_desc.wait_index 002261 aa 000002 6050 04 tpl 2,ic 002263 002262 aa 000000 5330 00 negl 0 002263 aa 000044 7370 00 lls 36 002264 aa 6 00414 7551 00 sta pr6|268 wait_event STATEMENT 1 ON LINE 670 call pxss$addevent (wait_event); 002265 aa 6 00414 3521 00 epp2 pr6|268 wait_event 002266 aa 6 00642 2521 00 spri2 pr6|418 002267 aa 6 00640 6211 00 eax1 pr6|416 002270 aa 004000 4310 07 fld 2048,dl 002271 aa 6 00044 3701 20 epp4 pr6|36,* 002272 la 4 00046 3521 20 epp2 pr4|38,* pxss$addevent 002273 aa 0 00623 7001 00 tsx0 pr0|403 call_ext_out STATEMENT 1 ON LINE 671 call lock$unlock_fast (addr (vtoc_buffer.lock)); 002274 aa 6 00422 3735 20 epp7 pr6|274,* vtoc_buffer.lock 002275 aa 6 00636 6535 00 spri7 pr6|414 002276 aa 6 00636 3521 00 epp2 pr6|414 002277 aa 6 00642 2521 00 spri2 pr6|418 002300 aa 6 00640 6211 00 eax1 pr6|416 002301 aa 004000 4310 07 fld 2048,dl 002302 aa 6 00044 3701 20 epp4 pr6|36,* 002303 la 4 00044 3521 20 epp2 pr4|36,* lock$unlock_fast 002304 aa 0 00623 7001 00 tsx0 pr0|403 call_ext_out STATEMENT 1 ON LINE 672 call pxss$wait; 002305 aa 6 00056 6211 00 eax1 pr6|46 002306 aa 000000 4310 07 fld 0,dl 002307 aa 6 00044 3701 20 epp4 pr6|36,* 002310 la 4 00052 3521 20 epp2 pr4|42,* pxss$wait 002311 aa 0 00623 7001 00 tsx0 pr0|403 call_ext_out STATEMENT 1 ON LINE 673 call lock$lock_fast (addr (vtoc_buffer.lock)); 002312 aa 6 00422 3735 20 epp7 pr6|274,* vtoc_buffer.lock 002313 aa 6 00636 6535 00 spri7 pr6|414 002314 aa 6 00636 3521 00 epp2 pr6|414 002315 aa 6 00642 2521 00 spri2 pr6|418 002316 aa 6 00640 6211 00 eax1 pr6|416 002317 aa 004000 4310 07 fld 2048,dl 002320 aa 6 00044 3701 20 epp4 pr6|36,* 002321 la 4 00042 3521 20 epp2 pr4|34,* lock$lock_fast 002322 aa 0 00623 7001 00 tsx0 pr0|403 call_ext_out STATEMENT 1 ON LINE 674 if vtoc_buf_desc.used & vtoc_buf_desc.os & ^vtoc_buf_desc.ioq /* Buffer in use, out-of-service, not queued */ & vtoc_buf_desc.pvtx = pvtx & vtoc_buf_desc.vtocx = vtocx /* Still the same one */ then do; 002323 aa 6 00424 3735 20 epp7 pr6|276,* vtoc_buf_descp 002324 aa 7 00001 2351 00 lda pr7|1 vtoc_buf_desc.os 002325 aa 005000 3750 03 ana 2560,du 002326 aa 005000 1150 03 cmpa 2560,du 002327 aa 000174 6010 04 tnz 124,ic 002523 002330 aa 7 00001 2351 00 lda pr7|1 vtoc_buf_desc.ioq 002331 aa 002000 3150 03 cana 1024,du 002332 aa 000171 6010 04 tnz 121,ic 002523 002333 aa 7 00000 2351 00 lda pr7|0 vtoc_buf_desc.pvtx 002334 aa 000066 7330 00 lrs 54 002335 aa 6 00410 1161 00 cmpq pr6|264 pvtx 002336 aa 000165 6010 04 tnz 117,ic 002523 002337 aa 7 00000 2351 00 lda pr7|0 vtoc_buf_desc.vtocx 002340 aa 000022 7350 00 als 18 002341 aa 000066 7330 00 lrs 54 002342 aa 6 00413 1161 00 cmpq pr6|267 vtocx 002343 aa 000160 6010 04 tnz 112,ic 002523 STATEMENT 1 ON LINE 679 pvtep = addr (pvt_array (pvtx)); 002344 aa 6 00410 2361 00 ldq pr6|264 pvtx 002345 aa 000034 4020 07 mpy 28,dl 002346 aa 6 00416 3715 20 epp5 pr6|270,* pvt_arrayp 002347 aa 5 77744 3715 06 epp5 pr5|-28,ql pvt_array 002350 aa 6 00420 6515 00 spri5 pr6|272 pvtep STATEMENT 1 ON LINE 680 if vtoc_buf_desc.write_sw then do; 002351 aa 7 00001 2351 00 lda pr7|1 vtoc_buf_desc.write_sw 002352 aa 010000 3150 03 cana 4096,du 002353 aa 000070 6000 04 tze 56,ic 002443 STATEMENT 1 ON LINE 682 call syserr (LOG, "vtoc_man: write I/O recovered on crawlout by ^a for ^a_^a^a vtocx ^o", pds$process_group_id, pvte.devname, convert (p99, pvte.logical_area_number), pvte.sv_name, vtocx); 002354 aa 000 100 100 404 mlr (ic),(pr),fill(000) 002355 aa 775753 00 0104 desc9a -1045,68 000327 = 166164157143 002356 aa 6 00666 00 0104 desc9a pr6|438,68 002357 aa 5 00004 2351 00 lda pr5|4 pvte.logical_area_number 002360 aa 000011 7350 00 als 9 002361 aa 000077 7330 00 lrs 63 002362 aa 6 00710 7561 00 stq pr6|456 pvte.logical_area_number 002363 aa 000 100 301 500 btd (pr),(pr) 002364 aa 6 00710 00 0004 desc9a pr6|456,4 pvte.logical_area_number 002365 aa 6 00707 01 0003 desc9ls pr6|455,3,0 002366 aa 6 00635 4501 00 stz pr6|413 002367 aa 100 004 024 500 mvne (pr),(ic),(pr) 002370 aa 6 00707 01 0003 desc9ls pr6|455,3,0 002371 aa 002217 00 0002 desc9a 1167,2 004606 = 070322000000 002372 aa 6 00635 00 0002 desc9a pr6|413,2 002373 aa 775530 3520 04 epp2 -1192,ic 000123 = 000000000004 002374 aa 6 00714 2521 00 spri2 pr6|460 002375 aa 6 00666 3521 00 epp2 pr6|438 002376 aa 6 00716 2521 00 spri2 pr6|462 002377 aa 6 00044 3701 20 epp4 pr6|36,* 002400 la 4 00024 3521 20 epp2 pr4|20,* pds$process_group_id 002401 aa 6 00720 2521 00 spri2 pr6|464 002402 aa 5 00003 3521 00 epp2 pr5|3 pvte.devname 002403 aa 6 00722 2521 00 spri2 pr6|466 002404 aa 6 00635 3521 00 epp2 pr6|413 002405 aa 6 00724 2521 00 spri2 pr6|468 002406 aa 5 00015 3521 00 epp2 pr5|13 pvte.sv_name 002407 aa 6 00726 2521 00 spri2 pr6|470 002410 aa 6 00413 3521 00 epp2 pr6|267 vtocx 002411 aa 6 00730 2521 00 spri2 pr6|472 002412 aa 775515 3520 04 epp2 -1203,ic 000127 = 404000000021 002413 aa 6 00732 2521 00 spri2 pr6|474 002414 aa 6 00746 2521 00 spri2 pr6|486 002415 aa 775474 3520 04 epp2 -1220,ic 000111 = 524000000104 002416 aa 6 00734 2521 00 spri2 pr6|476 002417 aa 775471 3520 04 epp2 -1223,ic 000110 = 524000000040 002420 aa 6 00736 2521 00 spri2 pr6|478 002421 aa 775466 3520 04 epp2 -1226,ic 000107 = 524000000004 002422 aa 6 00740 2521 00 spri2 pr6|480 002423 aa 775463 3520 04 epp2 -1229,ic 000106 = 524000000002 002424 aa 6 00742 2521 00 spri2 pr6|482 002425 aa 6 00744 2521 00 spri2 pr6|484 002426 aa 6 00712 6211 00 eax1 pr6|458 002427 aa 034000 4310 07 fld 14336,dl 002430 la 4 00054 3521 20 epp2 pr4|44,* syserr 002431 aa 0 00622 7001 00 tsx0 pr0|402 call_ext_out_desc STATEMENT 1 ON LINE 686 vtoc_buf_desc.os = "0"b; 002432 aa 002174 2350 04 lda 1148,ic 004626 = 773777777777 002433 aa 6 00424 3735 20 epp7 pr6|276,* vtoc_buf_descp 002434 aa 7 00001 3551 00 ansa pr7|1 vtoc_buf_desc.os STATEMENT 1 ON LINE 687 call WRITE ((vtoc_buf_desc.parts_used), vtoc_buf_descp); 002435 aa 7 00001 2351 00 lda pr7|1 vtoc_buf_desc.parts_used 002436 aa 0 00006 3771 00 anaq pr0|6 = 700000000000 000000000000 002437 aa 6 00635 7551 00 sta pr6|413 002440 aa 002212 3520 04 epp2 1162,ic 004652 = 000004000000 002441 aa 001346 6700 04 tsp4 742,ic 004007 STATEMENT 1 ON LINE 688 end; 002442 aa 000061 7100 04 tra 49,ic 002523 STATEMENT 1 ON LINE 689 else do; STATEMENT 1 ON LINE 690 call syserr (LOG, "vtoc_man: read reset on crawlout by ^a for ^a_^a^a vtocx ^o", pds$process_group_id, pvte.devname, convert (p99, pvte.logical_area_number), pvte.sv_name, vtocx); 002443 aa 000 100 100 404 mlr (ic),(pr),fill(000) 002444 aa 775625 00 0074 desc9a -1131,60 000270 = 166164157143 002445 aa 6 00666 00 0074 desc9a pr6|438,60 002446 aa 5 00004 2351 00 lda pr5|4 pvte.logical_area_number 002447 aa 000011 7350 00 als 9 002450 aa 000077 7330 00 lrs 63 002451 aa 6 00707 7561 00 stq pr6|455 pvte.logical_area_number 002452 aa 000 100 301 500 btd (pr),(pr) 002453 aa 6 00707 00 0004 desc9a pr6|455,4 pvte.logical_area_number 002454 aa 6 00711 01 0003 desc9ls pr6|457,3,0 002455 aa 6 00635 4501 00 stz pr6|413 002456 aa 100 004 024 500 mvne (pr),(ic),(pr) 002457 aa 6 00711 01 0003 desc9ls pr6|457,3,0 002460 aa 002130 00 0002 desc9a 1112,2 004606 = 070322000000 002461 aa 6 00635 00 0002 desc9a pr6|413,2 002462 aa 775441 3520 04 epp2 -1247,ic 000123 = 000000000004 002463 aa 6 00714 2521 00 spri2 pr6|460 002464 aa 6 00666 3521 00 epp2 pr6|438 002465 aa 6 00716 2521 00 spri2 pr6|462 002466 aa 6 00044 3701 20 epp4 pr6|36,* 002467 la 4 00024 3521 20 epp2 pr4|20,* pds$process_group_id 002470 aa 6 00720 2521 00 spri2 pr6|464 002471 aa 5 00003 3521 00 epp2 pr5|3 pvte.devname 002472 aa 6 00722 2521 00 spri2 pr6|466 002473 aa 6 00635 3521 00 epp2 pr6|413 002474 aa 6 00724 2521 00 spri2 pr6|468 002475 aa 5 00015 3521 00 epp2 pr5|13 pvte.sv_name 002476 aa 6 00726 2521 00 spri2 pr6|470 002477 aa 6 00413 3521 00 epp2 pr6|267 vtocx 002500 aa 6 00730 2521 00 spri2 pr6|472 002501 aa 775426 3520 04 epp2 -1258,ic 000127 = 404000000021 002502 aa 6 00732 2521 00 spri2 pr6|474 002503 aa 6 00746 2521 00 spri2 pr6|486 002504 aa 775401 3520 04 epp2 -1279,ic 000105 = 524000000073 002505 aa 6 00734 2521 00 spri2 pr6|476 002506 aa 775402 3520 04 epp2 -1278,ic 000110 = 524000000040 002507 aa 6 00736 2521 00 spri2 pr6|478 002510 aa 775377 3520 04 epp2 -1281,ic 000107 = 524000000004 002511 aa 6 00740 2521 00 spri2 pr6|480 002512 aa 775374 3520 04 epp2 -1284,ic 000106 = 524000000002 002513 aa 6 00742 2521 00 spri2 pr6|482 002514 aa 6 00744 2521 00 spri2 pr6|484 002515 aa 6 00712 6211 00 eax1 pr6|458 002516 aa 034000 4310 07 fld 14336,dl 002517 la 4 00054 3521 20 epp2 pr4|44,* syserr 002520 aa 0 00622 7001 00 tsx0 pr0|402 call_ext_out_desc STATEMENT 1 ON LINE 694 call FLUSH_BUFFER (vtoc_buf_descp); 002521 aa 002107 3520 04 epp2 1095,ic 004630 = 000002000000 002522 aa 000326 6700 04 tsp4 214,ic 003050 STATEMENT 1 ON LINE 695 end; STATEMENT 1 ON LINE 696 end; STATEMENT 1 ON LINE 697 end; STATEMENT 1 ON LINE 698 end; 002523 aa 6 00100 0541 00 aos pr6|64 bufx 002524 aa 777500 7100 04 tra -192,ic 002224 STATEMENT 1 ON LINE 701 return; 002525 aa 6 00440 2361 00 ldq pr6|288 002526 aa 000005 6010 04 tnz 5,ic 002533 002527 aa 000027 7260 07 lxl6 23,dl 002530 aa 775427 3520 04 epp2 -1257,ic 000157 = 162145164165 002531 aa 0 00716 7001 00 tsx0 pr0|462 signal_op 002532 aa 0 00631 7101 00 tra pr0|409 return_mac 002533 aa 0 00631 7101 00 tra pr0|409 return_mac STATEMENT 1 ON LINE 1430 end vtoc_man$get_vtoce; BEGIN PROCEDURE CLEAR_PAD ENTRY TO CLEAR_PAD STATEMENT 1 ON LINE 705 CLEAR_PAD: proc (Clear_ptr, Parts); 002534 aa 6 00456 6501 00 spri4 pr6|302 002535 aa 6 00460 2521 00 spri2 pr6|304 STATEMENT 1 ON LINE 713 if (Parts & "100"b) then do; 002536 aa 2 00004 2351 20 lda pr2|4,* Parts 002537 aa 0 00006 3771 00 anaq pr0|6 = 700000000000 000000000000 002540 aa 6 00750 7551 00 sta pr6|488 Parts 002541 aa 400000 3150 03 cana 131072,du 002542 aa 000012 6000 04 tze 10,ic 002554 STATEMENT 1 ON LINE 715 Clear_vtoce.pad_free_vtoce_chain = ""b; 002543 aa 2 00002 3735 20 epp7 pr2|2,* Clear_ptr 002544 aa 7 00000 4501 20 stz pr7|0,* Clear_vtoce.pad_free_vtoce_chain STATEMENT 1 ON LINE 716 Clear_vtoce.pad2 = ""b; 002545 aa 002040 2350 04 lda 1056,ic 004605 = 777777777000 002546 aa 7 00000 3715 20 epp5 pr7|0,* Clear_ptr 002547 aa 5 00002 3551 00 ansa pr5|2 Clear_vtoce.pad2 STATEMENT 1 ON LINE 717 Clear_vtoce.pad3 = ""b; 002550 aa 002034 2350 04 lda 1052,ic 004604 = 777400777777 002551 aa 5 00005 3551 00 ansa pr5|5 Clear_vtoce.pad3 STATEMENT 1 ON LINE 718 Clear_vtoce.pad4 = ""b; 002552 aa 002031 2350 04 lda 1049,ic 004603 = 777777600000 002553 aa 5 00005 3551 00 ansa pr5|5 Clear_vtoce.pad4 STATEMENT 1 ON LINE 719 end; STATEMENT 1 ON LINE 720 if (Parts & "001"b) then do; 002554 aa 6 00750 2351 00 lda pr6|488 Parts 002555 aa 100000 3150 03 cana 32768,du 002556 aa 000014 6000 04 tze 12,ic 002572 STATEMENT 1 ON LINE 722 unspec (Clear_vtoce.pad6) = ""b; 002557 aa 2 00002 3735 20 epp7 pr2|2,* Clear_ptr 002560 aa 7 00000 3735 20 epp7 pr7|0,* Clear_ptr 002561 aa 000 100 100 400 mlr (),(pr),fill(000) 002562 aa 000000 00 0000 desc9a 0,0 002563 aa 7 00220 00 0050 desc9a pr7|144,40 STATEMENT 1 ON LINE 723 Clear_vtoce.pad7 = ""b; 002564 aa 002016 2350 04 lda 1038,ic 004602 = 400000777777 002565 aa 7 00232 3551 00 ansa pr7|154 Clear_vtoce.pad7 STATEMENT 1 ON LINE 724 Clear_vtoce.pad8 = ""b; 002566 aa 777777 2350 03 lda 262143,du 002567 aa 7 00232 3551 00 ansa pr7|154 Clear_vtoce.pad8 STATEMENT 1 ON LINE 725 Clear_vtoce.pad9 = ""b; 002570 aa 400000 2350 03 lda 131072,du 002571 aa 7 00276 3551 00 ansa pr7|190 Clear_vtoce.pad9 STATEMENT 1 ON LINE 726 end; STATEMENT 1 ON LINE 728 end CLEAR_PAD; 002572 aa 6 00456 6101 00 rtcd pr6|302 END PROCEDURE CLEAR_PAD BEGIN PROCEDURE COPY_PARTS ENTRY TO COPY_PARTS STATEMENT 1 ON LINE 734 COPY_PARTS: proc (Parts, From_ptr, To_ptr); 002573 aa 6 00464 6501 00 spri4 pr6|308 002574 aa 6 00466 2521 00 spri2 pr6|310 STATEMENT 1 ON LINE 746 do partsx = 1 to N_PARTS_PER_VTOCE; 002575 aa 000003 2360 07 ldq 3,dl 002576 aa 6 00473 7561 00 stq pr6|315 002577 aa 000001 2360 07 ldq 1,dl 002600 aa 6 00472 7561 00 stq pr6|314 partsx 002601 aa 000000 0110 03 nop 0,du 002602 aa 6 00472 2361 00 ldq pr6|314 partsx 002603 aa 6 00473 1161 00 cmpq pr6|315 002604 aa 000023 6054 04 tpnz 19,ic 002627 STATEMENT 1 ON LINE 747 if substr (Parts, partsx, 1) = "1"b then unspec (To_Vtoce_Buffer.parts (partsx)) = unspec (From_Vtoce_Buffer.parts (partsx)); 002605 aa 6 00466 3735 20 epp7 pr6|310,* 002606 aa 7 00002 3715 20 epp5 pr7|2,* 002607 aa 000 004 066 506 cmpb (pr,ql),(ic),fill(0) 002610 aa 5 77777 70 0001 descb pr5|-1(35),1 Parts 002611 aa 002244 00 0001 descb 1188,1 005053 = 400000000000 002612 aa 000013 6010 04 tnz 11,ic 002625 002613 aa 000006 7360 00 qls 6 002614 aa 7 00006 3535 20 epp3 pr7|6,* To_ptr 002615 aa 3 00000 3535 20 epp3 pr3|0,* To_ptr 002616 aa 3 77700 3515 06 epp1 pr3|-64,ql 002617 aa 7 00004 3715 20 epp5 pr7|4,* From_ptr 002620 aa 5 00000 3715 20 epp5 pr5|0,* From_ptr 002621 aa 5 77700 3735 06 epp7 pr5|-64,ql 002622 aa 000 100 100 500 mlr (pr),(pr),fill(000) 002623 aa 7 00000 00 0400 desc9a pr7|0,256 002624 aa 1 00000 00 0400 desc9a pr1|0,256 STATEMENT 1 ON LINE 749 end; 002625 aa 6 00472 0541 00 aos pr6|314 partsx 002626 aa 777754 7100 04 tra -20,ic 002602 STATEMENT 1 ON LINE 751 end COPY_PARTS; 002627 aa 6 00464 6101 00 rtcd pr6|308 END PROCEDURE COPY_PARTS BEGIN PROCEDURE CORE ENTRY TO CORE STATEMENT 1 ON LINE 762 CORE: proc (Vtoc_buf_descp) returns (fixed bin (24)); 002630 aa 6 00474 6501 00 spri4 pr6|316 002631 aa 6 00476 2521 00 spri2 pr6|318 STATEMENT 1 ON LINE 768 return (vtoc_buffer.abs_addr + bin (Vtoc_buf_desc.buf_rel)); 002632 aa 2 00002 3735 20 epp7 pr2|2,* Vtoc_buf_descp 002633 aa 7 00000 3735 20 epp7 pr7|0,* Vtoc_buf_descp 002634 aa 7 00002 2361 00 ldq pr7|2 Vtoc_buf_desc.buf_rel 002635 aa 0 00374 3771 00 anaq pr0|252 = 000000000000 000000777777 002636 aa 6 00422 3715 20 epp5 pr6|274,* vtoc_buffer_segp 002637 aa 5 00006 0331 00 adl pr5|6 vtoc_buffer.abs_addr 002640 aa 2 00004 7561 20 stq pr2|4,* 002641 aa 6 00474 6101 00 rtcd pr6|316 STATEMENT 1 ON LINE 770 end CORE; END PROCEDURE CORE BEGIN PROCEDURE RECORD ENTRY TO RECORD STATEMENT 1 ON LINE 774 RECORD: proc (Vtoc_buf_descp) returns (bit (18) aligned); 002642 aa 6 00502 6501 00 spri4 pr6|322 002643 aa 6 00504 2521 00 spri2 pr6|324 STATEMENT 1 ON LINE 780 return (bit (bin (VTOC_ORIGIN + divide (Vtoc_buf_desc.vtocx, VTOCES_PER_RECORD (dev_type), 17), 18), 18)); 002644 aa 2 00002 3735 20 epp7 pr2|2,* Vtoc_buf_descp 002645 aa 7 00000 2351 20 lda pr7|0,* Vtoc_buf_desc.vtocx 002646 aa 000022 7350 00 als 18 002647 aa 000066 7330 00 lrs 54 002650 aa 6 00102 7271 00 lxl7 pr6|66 dev_type 002651 ta 000010 5060 17 div 8,7 002652 aa 000010 0760 07 adq 8,dl 002653 aa 000003 6050 04 tpl 3,ic 002656 002654 aa 0 00110 6761 00 erq pr0|72 = 777777777777 002655 aa 000001 0760 07 adq 1,dl 002656 aa 000066 7370 00 lls 54 002657 aa 2 00004 7551 20 sta pr2|4,* 002660 aa 6 00502 6101 00 rtcd pr6|322 STATEMENT 1 ON LINE 782 end RECORD; END PROCEDURE RECORD BEGIN PROCEDURE SECTOR ENTRY TO SECTOR STATEMENT 1 ON LINE 785 SECTOR: proc (Vtoc_buf_descp) returns (fixed bin (17)); 002661 aa 6 00510 6501 00 spri4 pr6|328 002662 aa 6 00512 2521 00 spri2 pr6|330 STATEMENT 1 ON LINE 792 return (mod (Vtoc_buf_desc.vtocx, VTOCES_PER_RECORD (dev_type)) * SECTORS_PER_VTOCE (dev_type)); 002663 aa 2 00002 3735 20 epp7 pr2|2,* Vtoc_buf_descp 002664 aa 7 00000 2351 20 lda pr7|0,* Vtoc_buf_desc.vtocx 002665 aa 000022 7350 00 als 18 002666 aa 000066 7330 00 lrs 54 002667 aa 6 00102 7271 00 lxl7 pr6|66 dev_type 002670 ta 000010 3520 17 epp2 8,7 002671 aa 0 00704 7001 00 tsx0 pr0|452 mdfx1 002672 ta 000021 4020 17 mpy 17,7 002673 aa 6 00512 3715 20 epp5 pr6|330,* 002674 aa 5 00004 7561 20 stq pr5|4,* 002675 aa 6 00510 6101 00 rtcd pr6|328 STATEMENT 1 ON LINE 794 end SECTOR; END PROCEDURE SECTOR BEGIN PROCEDURE SET_VOL_TROUBLE ENTRY TO SET_VOL_TROUBLE STATEMENT 1 ON LINE 802 SET_VOL_TROUBLE: proc (Pvtep, Vtocx, Msg); 002676 aa 6 00516 6501 00 spri4 pr6|334 002677 aa 6 00520 2521 00 spri2 pr6|336 002700 aa 2 00002 3521 01 epp2 pr2|2,au 002701 aa 6 00522 2521 00 spri2 pr6|338 002702 aa 2 00004 2361 20 ldq pr2|4,* 002703 aa 000002 6040 04 tmi 2,ic 002705 002704 aa 777777 3760 07 anq 262143,dl 002705 aa 0 00250 3761 00 anq pr0|168 = 000077777777 002706 aa 6 00751 7561 00 stq pr6|489 STATEMENT 1 ON LINE 811 Pvte.vol_trouble_count = Pvte.vol_trouble_count + 1; 002707 aa 6 00520 3735 20 epp7 pr6|336,* 002710 aa 7 00002 3715 20 epp5 pr7|2,* Pvtep 002711 aa 5 00000 3715 20 epp5 pr5|0,* Pvtep 002712 aa 5 00033 2351 00 lda pr5|27 Pvte.vol_trouble_count 002713 aa 000066 7330 00 lrs 54 002714 aa 000001 0760 07 adq 1,dl 002715 aa 000066 7370 00 lls 54 002716 aa 5 00033 5511 60 stba pr5|27,60 Pvte.vol_trouble_count STATEMENT 1 ON LINE 813 call syserr (LOG, "vtoc_man: ^a ^[vtocx ^o ^;^1s^]on ^a_^a^a", Msg, (Vtocx ^= -1), Vtocx, Pvte.devname, convert (p99, Pvte.logical_area_number), Pvte.sv_name); 002717 aa 000 100 100 404 mlr (ic),(pr),fill(000) 002720 aa 775303 00 0054 desc9a -1341,44 000222 = 166164157143 002721 aa 6 00752 00 0054 desc9a pr6|490,44 002722 aa 7 00004 2361 20 ldq pr7|4,* Vtocx 002723 aa 002133 1160 04 cmpq 1115,ic 005056 = 777777777777 002724 aa 0 00515 7001 00 tsx0 pr0|333 r_ne_as 002725 aa 6 00765 7551 00 sta pr6|501 002726 aa 5 00004 2351 00 lda pr5|4 Pvte.logical_area_number 002727 aa 000011 7350 00 als 9 002730 aa 000077 7330 00 lrs 63 002731 aa 6 00770 7561 00 stq pr6|504 Pvte.logical_area_number 002732 aa 000 100 301 500 btd (pr),(pr) 002733 aa 6 00770 00 0004 desc9a pr6|504,4 Pvte.logical_area_number 002734 aa 6 00767 01 0003 desc9ls pr6|503,3,0 002735 aa 6 00766 4501 00 stz pr6|502 002736 aa 100 004 024 500 mvne (pr),(ic),(pr) 002737 aa 6 00767 01 0003 desc9ls pr6|503,3,0 002740 aa 001650 00 0002 desc9a 936,2 004606 = 070322000000 002741 aa 6 00766 00 0002 desc9a pr6|502,2 002742 aa 775161 3520 04 epp2 -1423,ic 000123 = 000000000004 002743 aa 6 00774 2521 00 spri2 pr6|508 002744 aa 6 00752 3521 00 epp2 pr6|490 002745 aa 6 00776 2521 00 spri2 pr6|510 002746 aa 7 00006 3521 20 epp2 pr7|6,* Msg 002747 aa 6 01000 2521 00 spri2 pr6|512 002750 aa 6 00765 3521 00 epp2 pr6|501 002751 aa 6 01002 2521 00 spri2 pr6|514 002752 aa 7 00004 3521 20 epp2 pr7|4,* Vtocx 002753 aa 6 01004 2521 00 spri2 pr6|516 002754 aa 5 00003 3521 00 epp2 pr5|3 Pvte.devname 002755 aa 6 01006 2521 00 spri2 pr6|518 002756 aa 6 00766 3521 00 epp2 pr6|502 002757 aa 6 01010 2521 00 spri2 pr6|520 002760 aa 5 00015 3521 00 epp2 pr5|13 Pvte.sv_name 002761 aa 6 01012 2521 00 spri2 pr6|522 002762 aa 775145 3520 04 epp2 -1435,ic 000127 = 404000000021 002763 aa 6 01014 2521 00 spri2 pr6|524 002764 aa 6 01024 2521 00 spri2 pr6|532 002765 aa 775115 3520 04 epp2 -1459,ic 000102 = 524000000051 002766 aa 6 01016 2521 00 spri2 pr6|526 002767 aa 6 00522 3535 20 epp3 pr6|338,* 002770 aa 3 00004 3521 20 epp2 pr3|4,* 002771 aa 6 01020 2521 00 spri2 pr6|528 002772 aa 775107 3520 04 epp2 -1465,ic 000101 = 514000000001 002773 aa 6 01022 2521 00 spri2 pr6|530 002774 aa 775113 3520 04 epp2 -1461,ic 000107 = 524000000004 002775 aa 6 01026 2521 00 spri2 pr6|534 002776 aa 775110 3520 04 epp2 -1464,ic 000106 = 524000000002 002777 aa 6 01030 2521 00 spri2 pr6|536 003000 aa 6 01032 2521 00 spri2 pr6|538 003001 aa 6 00772 6211 00 eax1 pr6|506 003002 aa 040000 4310 07 fld 16384,dl 003003 aa 6 00044 3701 20 epp4 pr6|36,* 003004 la 4 00054 3521 20 epp2 pr4|44,* syserr 003005 aa 0 00622 7001 00 tsx0 pr0|402 call_ext_out_desc STATEMENT 1 ON LINE 816 end SET_VOL_TROUBLE; 003006 aa 6 00516 6101 00 rtcd pr6|334 END PROCEDURE SET_VOL_TROUBLE BEGIN PROCEDURE RETHREAD ENTRY TO RETHREAD STATEMENT 1 ON LINE 823 RETHREAD: proc; 003007 aa 6 00524 6501 00 spri4 pr6|340 STATEMENT 1 ON LINE 826 unspec (vtoc_buffer.hash_table) = ""b; 003010 aa 6 00422 3735 20 epp7 pr6|274,* vtoc_buffer_segp 003011 aa 7 00004 2361 00 ldq pr7|4 vtoc_buffer.n_hash_buckets 003012 aa 000044 4020 07 mpy 36,dl 003013 aa 000010 0760 07 adq 8,dl 003014 aa 000011 5060 07 div 9,dl 003015 aa 000 140 100 400 mlr (),(pr,rl),fill(000) 003016 aa 000000 00 0000 desc9a 0,0 003017 aa 7 00056 00 0006 desc9a pr7|46,ql STATEMENT 1 ON LINE 828 do bufx = 1 to vtoc_buffer.n_bufs; 003020 aa 7 00003 2361 00 ldq pr7|3 vtoc_buffer.n_bufs 003021 aa 6 00532 7561 00 stq pr6|346 003022 aa 000001 2360 07 ldq 1,dl 003023 aa 6 00100 7561 00 stq pr6|64 bufx 003024 aa 6 00100 2361 00 ldq pr6|64 bufx 003025 aa 6 00532 1161 00 cmpq pr6|346 003026 aa 000021 6054 04 tpnz 17,ic 003047 STATEMENT 1 ON LINE 829 vtoc_buf_descp = addr (vtoc_buf_desc_array (bufx)); 003027 aa 000003 4020 07 mpy 3,dl 003030 aa 6 00430 3735 20 epp7 pr6|280,* vtoc_buf_desc_arrayp 003031 aa 7 77775 3735 06 epp7 pr7|-3,ql vtoc_buf_desc_array 003032 aa 6 00424 6535 00 spri7 pr6|276 vtoc_buf_descp STATEMENT 1 ON LINE 830 if vtoc_buf_desc.used then call vtoc_search$hash_in (vtoc_buf_descp); 003033 aa 7 00001 2351 00 lda pr7|1 vtoc_buf_desc.used 003034 aa 001000 3150 03 cana 512,du 003035 aa 000010 6000 04 tze 8,ic 003045 003036 aa 6 00424 3521 00 epp2 pr6|276 vtoc_buf_descp 003037 aa 6 01036 2521 00 spri2 pr6|542 003040 aa 6 01034 6211 00 eax1 pr6|540 003041 aa 004000 4310 07 fld 2048,dl 003042 aa 6 00044 3701 20 epp4 pr6|36,* 003043 la 4 00056 3521 20 epp2 pr4|46,* vtoc_search$hash_in 003044 aa 0 00623 7001 00 tsx0 pr0|403 call_ext_out STATEMENT 1 ON LINE 832 end; 003045 aa 6 00100 0541 00 aos pr6|64 bufx 003046 aa 777756 7100 04 tra -18,ic 003024 STATEMENT 1 ON LINE 834 end RETHREAD; 003047 aa 6 00524 6101 00 rtcd pr6|340 END PROCEDURE RETHREAD BEGIN PROCEDURE FLUSH_BUFFER ENTRY TO FLUSH_BUFFER STATEMENT 1 ON LINE 840 FLUSH_BUFFER: proc (Vtoc_buf_descp); 003050 aa 6 00534 6501 00 spri4 pr6|348 003051 aa 6 00536 2521 00 spri2 pr6|350 STATEMENT 1 ON LINE 846 call vtoc_search$hash_out (Vtoc_buf_descp); 003052 aa 2 00002 3521 20 epp2 pr2|2,* Vtoc_buf_descp 003053 aa 6 01042 2521 00 spri2 pr6|546 003054 aa 6 01040 6211 00 eax1 pr6|544 003055 aa 004000 4310 07 fld 2048,dl 003056 aa 6 00044 3701 20 epp4 pr6|36,* 003057 la 4 00060 3521 20 epp2 pr4|48,* vtoc_search$hash_out 003060 aa 0 00623 7001 00 tsx0 pr0|403 call_ext_out STATEMENT 1 ON LINE 848 vtoc_buffer.search_index = divide (bin (rel (Vtoc_buf_descp)) - bin (rel (vtoc_buf_desc_arrayp)), size (vtoc_buf_desc), 17) + 1; 003061 aa 6 00430 6351 20 eaa pr6|280,* vtoc_buf_desc_arrayp 003062 aa 000066 7730 00 lrl 54 003063 aa 6 01044 7571 00 staq pr6|548 003064 aa 6 00536 3735 20 epp7 pr6|350,* 003065 aa 7 00002 3715 20 epp5 pr7|2,* Vtoc_buf_descp 003066 aa 5 00000 3715 20 epp5 pr5|0,* Vtoc_buf_descp 003067 aa 5 00000 6351 00 eaa pr5|0 Vtoc_buf_descp 003070 aa 000066 7730 00 lrl 54 003071 aa 6 01044 1771 00 sbaq pr6|548 003072 aa 001760 3520 04 epp2 1008,ic 005052 = 000000000003 003073 aa 0 01264 7001 00 tsx0 pr0|692 divide_fx3 003074 aa 000000000000 003075 aa 000001 0760 07 adq 1,dl 003076 aa 6 00422 3535 20 epp3 pr6|274,* vtoc_buffer_segp 003077 aa 3 00013 7561 00 stq pr3|11 vtoc_buffer.search_index STATEMENT 1 ON LINE 852 unspec (Vtoc_buf_desc) = ""b; 003100 aa 000 100 100 400 mlr (),(pr),fill(000) 003101 aa 000000 00 0000 desc9a 0,0 003102 aa 5 00000 00 0014 desc9a pr5|0,12 STATEMENT 1 ON LINE 855 end FLUSH_BUFFER; 003103 aa 6 00534 6101 00 rtcd pr6|348 END PROCEDURE FLUSH_BUFFER BEGIN PROCEDURE GET_BUFFER ENTRY TO GET_BUFFER STATEMENT 1 ON LINE 866 GET_BUFFER: proc (Pvtx, Vtocx, Vtoc_buf_descp, Vtoc_bufp, Code); 003104 aa 6 00542 6501 00 spri4 pr6|354 003105 aa 6 00544 2521 00 spri2 pr6|356 STATEMENT 1 ON LINE 882 wait_sw = "1"b; 003106 aa 400000 2350 03 lda 131072,du 003107 aa 6 00553 7551 00 sta pr6|363 wait_sw STATEMENT 1 ON LINE 883 goto GET_BUFFER_JOIN; 003110 aa 000004 7100 04 tra 4,ic 003114 ENTRY TO GET_BUFFER_NOWAIT STATEMENT 1 ON LINE 886 GET_BUFFER_NOWAIT: entry (Pvtx, Vtocx, Vtoc_buf_descp, Vtoc_bufp, Code); 003111 aa 6 00542 6501 00 spri4 pr6|354 003112 aa 6 00544 2521 00 spri2 pr6|356 STATEMENT 1 ON LINE 889 wait_sw = "0"b; 003113 aa 6 00553 4501 00 stz pr6|363 wait_sw STATEMENT 1 ON LINE 891 GET_BUFFER_JOIN: Code = 0; 003114 aa 6 00544 3735 20 epp7 pr6|356,* 003115 aa 7 00012 4501 20 stz pr7|10,* Code STATEMENT 1 ON LINE 893 vtoc_buffer.meters.get_buffer_calls = vtoc_buffer.meters.get_buffer_calls + 1; 003116 aa 6 00422 3715 20 epp5 pr6|274,* vtoc_buffer_segp 003117 aa 5 00031 2351 00 lda pr5|25 vtoc_buffer.get_buffer_calls 003120 aa 000044 7330 00 lrs 36 003121 aa 000001 0330 07 adl 1,dl 003122 aa 5 00031 7561 00 stq pr5|25 vtoc_buffer.get_buffer_calls STATEMENT 1 ON LINE 894 first_time = "1"b; 003123 aa 400000 2350 03 lda 131072,du 003124 aa 6 00550 7551 00 sta pr6|360 first_time STATEMENT 1 ON LINE 897 GET_BUFFER_RETRY: call vtoc_search$search (Pvtx, Vtocx, Vtoc_buf_descp); 003125 aa 6 00544 3735 20 epp7 pr6|356,* 003126 aa 7 00002 3521 20 epp2 pr7|2,* Pvtx 003127 aa 6 01050 2521 00 spri2 pr6|552 003130 aa 7 00004 3521 20 epp2 pr7|4,* Vtocx 003131 aa 6 01052 2521 00 spri2 pr6|554 003132 aa 7 00006 3521 20 epp2 pr7|6,* Vtoc_buf_descp 003133 aa 6 01054 2521 00 spri2 pr6|556 003134 aa 6 01046 6211 00 eax1 pr6|550 003135 aa 014000 4310 07 fld 6144,dl 003136 aa 6 00044 3701 20 epp4 pr6|36,* 003137 la 4 00062 3521 20 epp2 pr4|50,* vtoc_search$search 003140 aa 0 00623 7001 00 tsx0 pr0|403 call_ext_out STATEMENT 1 ON LINE 900 if Vtoc_buf_descp ^= null () & first_time then vtoc_buffer.meters.get_buffer_hits = vtoc_buffer.meters.get_buffer_hits + 1; 003141 aa 6 00544 3735 20 epp7 pr6|356,* 003142 aa 7 00006 2371 20 ldaq pr7|6,* Vtoc_buf_descp 003143 aa 774765 6770 04 eraq -1547,ic 000130 = 077777000043 000001000000 003144 aa 0 00460 3771 00 anaq pr0|304 = 077777000077 777777077077 003145 aa 000010 6000 04 tze 8,ic 003155 003146 aa 6 00550 2351 00 lda pr6|360 first_time 003147 aa 000006 6000 04 tze 6,ic 003155 003150 aa 6 00422 3715 20 epp5 pr6|274,* vtoc_buffer_segp 003151 aa 5 00032 2351 00 lda pr5|26 vtoc_buffer.get_buffer_hits 003152 aa 000044 7330 00 lrs 36 003153 aa 000001 0330 07 adl 1,dl 003154 aa 5 00032 7561 00 stq pr5|26 vtoc_buffer.get_buffer_hits STATEMENT 1 ON LINE 902 first_time = "0"b; 003155 aa 6 00550 4501 00 stz pr6|360 first_time STATEMENT 1 ON LINE 904 if Vtoc_buf_descp = null () then do; 003156 aa 7 00006 2371 20 ldaq pr7|6,* Vtoc_buf_descp 003157 aa 774751 6770 04 eraq -1559,ic 000130 = 077777000043 000001000000 003160 aa 0 00460 3771 00 anaq pr0|304 = 077777000077 777777077077 003161 aa 000204 6010 04 tnz 132,ic 003365 STATEMENT 1 ON LINE 906 steps = 0; 003162 aa 6 00552 4501 00 stz pr6|362 steps STATEMENT 1 ON LINE 907 skip_waiting = "1"b; 003163 aa 400000 2350 03 lda 131072,du 003164 aa 6 00551 7551 00 sta pr6|361 skip_waiting STATEMENT 1 ON LINE 908 bufx = vtoc_buffer.search_index; 003165 aa 6 00422 3715 20 epp5 pr6|274,* vtoc_buffer_segp 003166 aa 5 00013 2361 00 ldq pr5|11 vtoc_buffer.search_index 003167 aa 6 00100 7561 00 stq pr6|64 bufx STATEMENT 1 ON LINE 909 do while ("1"b); STATEMENT 1 ON LINE 910 vtoc_buffer.meters.steps = vtoc_buffer.meters.steps + 1; 003170 aa 6 00422 3735 20 epp7 pr6|274,* vtoc_buffer_segp 003171 aa 7 00023 2351 00 lda pr7|19 vtoc_buffer.steps 003172 aa 000044 7330 00 lrs 36 003173 aa 000001 0330 07 adl 1,dl 003174 aa 7 00023 7561 00 stq pr7|19 vtoc_buffer.steps STATEMENT 1 ON LINE 911 steps = steps + 1; 003175 aa 6 00552 0541 00 aos pr6|362 steps STATEMENT 1 ON LINE 912 Vtoc_buf_descp = addr (vtoc_buf_desc_array (bufx)); 003176 aa 6 00100 2361 00 ldq pr6|64 bufx 003177 aa 000003 4020 07 mpy 3,dl 003200 aa 6 00430 3715 20 epp5 pr6|280,* vtoc_buf_desc_arrayp 003201 aa 5 77775 3715 06 epp5 pr5|-3,ql vtoc_buf_desc_array 003202 aa 6 00544 3535 20 epp3 pr6|356,* 003203 aa 3 00006 6515 20 spri5 pr3|6,* Vtoc_buf_descp STATEMENT 1 ON LINE 914 if ^Vtoc_buf_desc.used then goto FOUND; 003204 aa 5 00001 2351 00 lda pr5|1 Vtoc_buf_desc.used 003205 aa 001000 3150 03 cana 512,du 003206 aa 000076 6000 04 tze 62,ic 003304 STATEMENT 1 ON LINE 917 if Vtoc_buf_desc.os then vtoc_buffer.meters.skip_os = vtoc_buffer.meters.skip_os + 1; 003207 aa 5 00001 2351 00 lda pr5|1 Vtoc_buf_desc.os 003210 aa 004000 3150 03 cana 2048,du 003211 aa 000006 6000 04 tze 6,ic 003217 003212 aa 7 00024 2351 00 lda pr7|20 vtoc_buffer.skip_os 003213 aa 000044 7330 00 lrs 36 003214 aa 000001 0330 07 adl 1,dl 003215 aa 7 00024 7561 00 stq pr7|20 vtoc_buffer.skip_os 003216 aa 000023 7100 04 tra 19,ic 003241 STATEMENT 1 ON LINE 919 else if Vtoc_buf_desc.write_sw & Vtoc_buf_desc.err then vtoc_buffer.meters.skip_hot = vtoc_buffer.meters.skip_hot + 1; 003217 aa 5 00001 2351 00 lda pr5|1 Vtoc_buf_desc.err 003220 aa 050000 3750 03 ana 20480,du 003221 aa 050000 1150 03 cmpa 20480,du 003222 aa 000006 6010 04 tnz 6,ic 003230 003223 aa 7 00025 2351 00 lda pr7|21 vtoc_buffer.skip_hot 003224 aa 000044 7330 00 lrs 36 003225 aa 000001 0330 07 adl 1,dl 003226 aa 7 00025 7561 00 stq pr7|21 vtoc_buffer.skip_hot 003227 aa 000012 7100 04 tra 10,ic 003241 STATEMENT 1 ON LINE 921 else if Vtoc_buf_desc.notify_sw & skip_waiting then vtoc_buffer.meters.skip_wait = vtoc_buffer.meters.skip_wait + 1; 003230 aa 5 00001 2351 00 lda pr5|1 Vtoc_buf_desc.notify_sw 003231 aa 020000 3150 03 cana 8192,du 003232 aa 000052 6000 04 tze 42,ic 003304 003233 aa 6 00551 2351 00 lda pr6|361 skip_waiting 003234 aa 000050 6000 04 tze 40,ic 003304 003235 aa 7 00026 2351 00 lda pr7|22 vtoc_buffer.skip_wait 003236 aa 000044 7330 00 lrs 36 003237 aa 000001 0330 07 adl 1,dl 003240 aa 7 00026 7561 00 stq pr7|22 vtoc_buffer.skip_wait STATEMENT 1 ON LINE 925 if steps > MAX_STEPS then call syserr (CRASH, "vtoc_man: Out of buffers"); 003241 aa 6 00552 2361 00 ldq pr6|362 steps 003242 aa 023420 1160 07 cmpq 10000,dl 003243 aa 000021 6044 04 tmoz 17,ic 003264 003244 aa 000 100 100 404 mlr (ic),(pr),fill(000) 003245 aa 774677 00 0030 desc9a -1601,24 000143 = 166164157143 003246 aa 6 01046 00 0030 desc9a pr6|550,24 003247 aa 774652 3520 04 epp2 -1622,ic 000121 = 000000000001 003250 aa 6 01060 2521 00 spri2 pr6|560 003251 aa 6 01046 3521 00 epp2 pr6|550 003252 aa 6 01062 2521 00 spri2 pr6|562 003253 aa 774654 3520 04 epp2 -1620,ic 000127 = 404000000021 003254 aa 6 01064 2521 00 spri2 pr6|564 003255 aa 774623 3520 04 epp2 -1645,ic 000100 = 524000000030 003256 aa 6 01066 2521 00 spri2 pr6|566 003257 aa 6 01056 6211 00 eax1 pr6|558 003260 aa 010000 4310 07 fld 4096,dl 003261 aa 6 00044 3701 20 epp4 pr6|36,* 003262 la 4 00054 3521 20 epp2 pr4|44,* syserr 003263 aa 0 00622 7001 00 tsx0 pr0|402 call_ext_out_desc STATEMENT 1 ON LINE 927 bufx = bufx + 1; 003264 aa 6 00100 0541 00 aos pr6|64 bufx STATEMENT 1 ON LINE 928 if bufx > vtoc_buffer.n_bufs then bufx = 1; 003265 aa 6 00100 2361 00 ldq pr6|64 bufx 003266 aa 6 00422 3735 20 epp7 pr6|274,* vtoc_buffer_segp 003267 aa 7 00003 1161 00 cmpq pr7|3 vtoc_buffer.n_bufs 003270 aa 000003 6044 04 tmoz 3,ic 003273 003271 aa 000001 2360 07 ldq 1,dl 003272 aa 6 00100 7561 00 stq pr6|64 bufx STATEMENT 1 ON LINE 930 if bufx = vtoc_buffer.search_index then do; 003273 aa 7 00013 1161 00 cmpq pr7|11 vtoc_buffer.search_index 003274 aa 777674 6010 04 tnz -68,ic 003170 STATEMENT 1 ON LINE 932 skip_waiting = "0"b; 003275 aa 6 00551 4501 00 stz pr6|361 skip_waiting STATEMENT 1 ON LINE 933 call disk_run; 003276 aa 6 00056 6211 00 eax1 pr6|46 003277 aa 000000 4310 07 fld 0,dl 003300 aa 6 00044 3701 20 epp4 pr6|36,* 003301 la 4 00040 3521 20 epp2 pr4|32,* disk_run 003302 aa 0 00623 7001 00 tsx0 pr0|403 call_ext_out STATEMENT 1 ON LINE 934 end; STATEMENT 1 ON LINE 935 end; 003303 aa 777665 7100 04 tra -75,ic 003170 STATEMENT 1 ON LINE 937 FOUND: if bufx >= vtoc_buffer.n_bufs then vtoc_buffer.search_index = 1; 003304 aa 6 00100 2361 00 ldq pr6|64 bufx 003305 aa 6 00422 3735 20 epp7 pr6|274,* vtoc_buffer_segp 003306 aa 7 00003 1161 00 cmpq pr7|3 vtoc_buffer.n_bufs 003307 aa 000004 6040 04 tmi 4,ic 003313 003310 aa 000001 2360 07 ldq 1,dl 003311 aa 7 00013 7561 00 stq pr7|11 vtoc_buffer.search_index 003312 aa 000003 7100 04 tra 3,ic 003315 STATEMENT 1 ON LINE 940 else vtoc_buffer.search_index = bufx + 1; 003313 aa 000001 0760 07 adq 1,dl 003314 aa 7 00013 7561 00 stq pr7|11 vtoc_buffer.search_index STATEMENT 1 ON LINE 943 if Vtoc_buf_desc.used then call FLUSH_BUFFER (Vtoc_buf_descp); 003315 aa 6 00544 3715 20 epp5 pr6|356,* 003316 aa 5 00006 3535 20 epp3 pr5|6,* Vtoc_buf_descp 003317 aa 3 00000 3535 20 epp3 pr3|0,* Vtoc_buf_descp 003320 aa 3 00001 2351 00 lda pr3|1 Vtoc_buf_desc.used 003321 aa 001000 3150 03 cana 512,du 003322 aa 000007 6000 04 tze 7,ic 003331 003323 aa 5 00006 3521 20 epp2 pr5|6,* Vtoc_buf_descp 003324 aa 6 01050 2521 00 spri2 pr6|552 003325 aa 6 01046 3521 00 epp2 pr6|550 003326 aa 004000 4310 07 fld 2048,dl 003327 aa 2 00000 7571 00 staq pr2|0 003330 aa 777520 6700 04 tsp4 -176,ic 003050 STATEMENT 1 ON LINE 946 Vtoc_buf_desc.pvtx = Pvtx; 003331 aa 6 00544 3735 20 epp7 pr6|356,* 003332 aa 7 00002 2361 20 ldq pr7|2,* Pvtx 003333 aa 000066 7370 00 lls 54 003334 aa 7 00006 3715 20 epp5 pr7|6,* Vtoc_buf_descp 003335 aa 5 00000 3535 20 epp3 pr5|0,* Vtoc_buf_desc.pvtx 003336 aa 3 00000 5511 60 stba pr3|0,60 Vtoc_buf_desc.pvtx STATEMENT 1 ON LINE 947 Vtoc_buf_desc.vtocx = Vtocx; 003337 aa 7 00004 2361 20 ldq pr7|4,* Vtocx 003340 aa 5 00000 3515 20 epp1 pr5|0,* Vtoc_buf_desc.vtocx 003341 aa 1 00000 5521 14 stbq pr1|0,14 Vtoc_buf_desc.vtocx STATEMENT 1 ON LINE 948 Vtoc_buf_desc.used = "1"b; 003342 aa 001000 2350 03 lda 512,du 003343 aa 5 00000 3515 20 epp1 pr5|0,* Vtoc_buf_descp 003344 aa 1 00001 2551 00 orsa pr1|1 Vtoc_buf_desc.used STATEMENT 1 ON LINE 949 Vtoc_buf_desc.wait_index = bufx; 003345 aa 6 00100 2361 00 ldq pr6|64 bufx 003346 aa 1 00001 5521 14 stbq pr1|1,14 Vtoc_buf_desc.wait_index STATEMENT 1 ON LINE 950 Vtoc_buf_desc.buf_rel = rel (addr (vtoce_buffer_array (bufx))); 003347 aa 000300 4020 07 mpy 192,dl 003350 aa 6 00432 3535 20 epp3 pr6|282,* vtoc_buf_arrayp 003351 aa 3 77500 3535 06 epp3 pr3|-192,ql vtoce_buffer_array 003352 aa 3 00000 6351 00 eaa pr3|0 003353 aa 000022 7710 00 arl 18 003354 aa 1 00002 5511 14 stba pr1|2,14 Vtoc_buf_desc.buf_rel STATEMENT 1 ON LINE 952 call vtoc_search$hash_in (Vtoc_buf_descp); 003355 aa 7 00006 3521 20 epp2 pr7|6,* Vtoc_buf_descp 003356 aa 6 01050 2521 00 spri2 pr6|552 003357 aa 6 01046 6211 00 eax1 pr6|550 003360 aa 004000 4310 07 fld 2048,dl 003361 aa 6 00044 3701 20 epp4 pr6|36,* 003362 la 4 00056 3521 20 epp2 pr4|46,* vtoc_search$hash_in 003363 aa 6 01070 2535 00 spri3 pr6|568 003364 aa 0 00623 7001 00 tsx0 pr0|403 call_ext_out STATEMENT 1 ON LINE 954 end; STATEMENT 1 ON LINE 956 if Vtoc_buf_desc.os & wait_sw then do; 003365 aa 6 00544 3735 20 epp7 pr6|356,* 003366 aa 7 00006 3715 20 epp5 pr7|6,* Vtoc_buf_descp 003367 aa 5 00000 3715 20 epp5 pr5|0,* Vtoc_buf_descp 003370 aa 5 00001 2351 00 lda pr5|1 Vtoc_buf_desc.os 003371 aa 004000 3150 03 cana 2048,du 003372 aa 000023 6000 04 tze 19,ic 003415 003373 aa 6 00553 2351 00 lda pr6|363 wait_sw 003374 aa 000021 6000 04 tze 17,ic 003415 STATEMENT 1 ON LINE 958 call WAIT (Vtoc_buf_descp, Code); 003375 aa 7 00006 3521 20 epp2 pr7|6,* Vtoc_buf_descp 003376 aa 6 01050 2521 00 spri2 pr6|552 003377 aa 7 00012 3521 20 epp2 pr7|10,* Code 003400 aa 6 01052 2521 00 spri2 pr6|554 003401 aa 6 01046 3521 00 epp2 pr6|550 003402 aa 010000 4310 07 fld 4096,dl 003403 aa 2 00000 7571 00 staq pr2|0 003404 aa 000701 6700 04 tsp4 449,ic 004305 STATEMENT 1 ON LINE 959 if Code ^= 0 then do; 003405 aa 6 00544 3735 20 epp7 pr6|356,* 003406 aa 7 00012 2361 20 ldq pr7|10,* Code 003407 aa 777516 6000 04 tze -178,ic 003125 STATEMENT 1 ON LINE 961 Vtoc_buf_descp = null (); 003410 aa 774520 2370 04 ldaq -1712,ic 000130 = 077777000043 000001000000 003411 aa 7 00006 7571 20 staq pr7|6,* Vtoc_buf_descp STATEMENT 1 ON LINE 962 Vtoc_bufp = null (); 003412 aa 7 00010 7571 20 staq pr7|8,* Vtoc_bufp STATEMENT 1 ON LINE 963 return; 003413 aa 6 00542 6101 00 rtcd pr6|354 STATEMENT 1 ON LINE 964 end; STATEMENT 1 ON LINE 965 goto GET_BUFFER_RETRY; 003414 aa 777511 7100 04 tra -183,ic 003125 STATEMENT 1 ON LINE 966 end; STATEMENT 1 ON LINE 969 Vtoc_bufp = ptr (vtoc_buffer_segp, Vtoc_buf_desc.buf_rel); 003415 aa 5 00002 2351 00 lda pr5|2 Vtoc_buf_desc.buf_rel 003416 aa 000022 7350 00 als 18 003417 aa 6 00422 3521 20 epp2 pr6|274,* vtoc_buffer_segp 003420 aa 000000 3120 01 eawp2 0,au 003421 aa 7 00010 2521 20 spri2 pr7|8,* Vtoc_bufp STATEMENT 1 ON LINE 971 end GET_BUFFER; 003422 aa 6 00542 6101 00 rtcd pr6|354 END PROCEDURE GET_BUFFER BEGIN PROCEDURE READ ENTRY TO READ STATEMENT 1 ON LINE 984 READ: proc (Pvtx, Vtocx, Parts, Vtoc_buf_descp, Vtoc_bufp, Sector_read_required, Code); 003423 aa 6 00554 6501 00 spri4 pr6|364 003424 aa 6 00556 2521 00 spri2 pr6|366 STATEMENT 1 ON LINE 1001 wait_sw = "1"b; 003425 aa 400000 2350 03 lda 131072,du 003426 aa 6 00562 7551 00 sta pr6|370 wait_sw STATEMENT 1 ON LINE 1002 goto READ_JOIN; 003427 aa 000004 7100 04 tra 4,ic 003433 ENTRY TO READ_AHEAD STATEMENT 1 ON LINE 1005 READ_AHEAD: entry (Pvtx, Vtocx, Parts, Vtoc_buf_descp, Vtoc_bufp, Sector_read_required, Code); 003430 aa 6 00554 6501 00 spri4 pr6|364 003431 aa 6 00556 2521 00 spri2 pr6|366 STATEMENT 1 ON LINE 1008 wait_sw = "0"b; 003432 aa 6 00562 4501 00 stz pr6|370 wait_sw STATEMENT 1 ON LINE 1010 READ_JOIN: Sector_read_required = "0"b; 003433 aa 6 00556 3735 20 epp7 pr6|366,* 003434 aa 7 00014 4501 20 stz pr7|12,* Sector_read_required STATEMENT 1 ON LINE 1012 Code = 0; 003435 aa 7 00016 4501 20 stz pr7|14,* Code STATEMENT 1 ON LINE 1013 hot_buffer_tried = "0"b; 003436 aa 6 00103 4501 00 stz pr6|67 hot_buffer_tried STATEMENT 1 ON LINE 1014 RETRY_READ: if wait_sw then call GET_BUFFER (Pvtx, Vtocx, Vtoc_buf_descp, Vtoc_bufp, Code); 003437 aa 6 00562 2351 00 lda pr6|370 wait_sw 003440 aa 000021 6000 04 tze 17,ic 003461 003441 aa 6 00556 3735 20 epp7 pr6|366,* 003442 aa 7 00002 3521 20 epp2 pr7|2,* Pvtx 003443 aa 6 01074 2521 00 spri2 pr6|572 003444 aa 7 00004 3521 20 epp2 pr7|4,* Vtocx 003445 aa 6 01076 2521 00 spri2 pr6|574 003446 aa 7 00010 3521 20 epp2 pr7|8,* Vtoc_buf_descp 003447 aa 6 01100 2521 00 spri2 pr6|576 003450 aa 7 00012 3521 20 epp2 pr7|10,* Vtoc_bufp 003451 aa 6 01102 2521 00 spri2 pr6|578 003452 aa 7 00016 3521 20 epp2 pr7|14,* Code 003453 aa 6 01104 2521 00 spri2 pr6|580 003454 aa 6 01072 3521 00 epp2 pr6|570 003455 aa 024000 4310 07 fld 10240,dl 003456 aa 2 00000 7571 00 staq pr2|0 003457 aa 777425 6700 04 tsp4 -235,ic 003104 003460 aa 000020 7100 04 tra 16,ic 003500 STATEMENT 1 ON LINE 1017 else call GET_BUFFER_NOWAIT (Pvtx, Vtocx, Vtoc_buf_descp, Vtoc_bufp, Code); 003461 aa 6 00556 3735 20 epp7 pr6|366,* 003462 aa 7 00002 3521 20 epp2 pr7|2,* Pvtx 003463 aa 6 01074 2521 00 spri2 pr6|572 003464 aa 7 00004 3521 20 epp2 pr7|4,* Vtocx 003465 aa 6 01076 2521 00 spri2 pr6|574 003466 aa 7 00010 3521 20 epp2 pr7|8,* Vtoc_buf_descp 003467 aa 6 01100 2521 00 spri2 pr6|576 003470 aa 7 00012 3521 20 epp2 pr7|10,* Vtoc_bufp 003471 aa 6 01102 2521 00 spri2 pr6|578 003472 aa 7 00016 3521 20 epp2 pr7|14,* Code 003473 aa 6 01104 2521 00 spri2 pr6|580 003474 aa 6 01072 3521 00 epp2 pr6|570 003475 aa 024000 4310 07 fld 10240,dl 003476 aa 2 00000 7571 00 staq pr2|0 003477 aa 777412 6700 04 tsp4 -246,ic 003111 STATEMENT 1 ON LINE 1018 if Code ^= 0 then return; 003500 aa 6 00556 3735 20 epp7 pr6|366,* 003501 aa 7 00016 2361 20 ldq pr7|14,* Code 003502 aa 000002 6000 04 tze 2,ic 003504 003503 aa 6 00554 6101 00 rtcd pr6|364 STATEMENT 1 ON LINE 1021 if ^wait_sw & Vtoc_buf_desc.os then return; 003504 aa 6 00562 2351 00 lda pr6|370 wait_sw 003505 aa 000007 6010 04 tnz 7,ic 003514 003506 aa 7 00010 3715 20 epp5 pr7|8,* Vtoc_buf_descp 003507 aa 5 00000 3715 20 epp5 pr5|0,* Vtoc_buf_descp 003510 aa 5 00001 2351 00 lda pr5|1 Vtoc_buf_desc.os 003511 aa 004000 3150 03 cana 2048,du 003512 aa 000002 6000 04 tze 2,ic 003514 003513 aa 6 00554 6101 00 rtcd pr6|364 STATEMENT 1 ON LINE 1024 if Vtoc_buf_desc.err /* I/O error */ then do; 003514 aa 7 00010 3715 20 epp5 pr7|8,* Vtoc_buf_descp 003515 aa 5 00000 3715 20 epp5 pr5|0,* Vtoc_buf_descp 003516 aa 5 00001 2351 00 lda pr5|1 Vtoc_buf_desc.err 003517 aa 040000 3150 03 cana 16384,du 003520 aa 000134 6000 04 tze 92,ic 003654 STATEMENT 1 ON LINE 1026 if ^Vtoc_buf_desc.write_sw /* Not hot buffer */ then call FLUSH_BUFFER (Vtoc_buf_descp); 003521 aa 5 00001 2351 00 lda pr5|1 Vtoc_buf_desc.write_sw 003522 aa 010000 3150 03 cana 4096,du 003523 aa 000010 6010 04 tnz 8,ic 003533 003524 aa 7 00010 3521 20 epp2 pr7|8,* Vtoc_buf_descp 003525 aa 6 01074 2521 00 spri2 pr6|572 003526 aa 6 01072 3521 00 epp2 pr6|570 003527 aa 004000 4310 07 fld 2048,dl 003530 aa 2 00000 7571 00 staq pr2|0 003531 aa 777317 6700 04 tsp4 -305,ic 003050 003532 aa 000112 7100 04 tra 74,ic 003644 STATEMENT 1 ON LINE 1028 else if ^hot_buffer_tried then do; 003533 aa 6 00103 2351 00 lda pr6|67 hot_buffer_tried 003534 aa 000110 6010 04 tnz 72,ic 003644 STATEMENT 1 ON LINE 1030 hot_buffer_tried = "1"b; 003535 aa 400000 2350 03 lda 131072,du 003536 aa 6 00103 7551 00 sta pr6|67 hot_buffer_tried STATEMENT 1 ON LINE 1031 pvt_arrayp = addr (pvt$array); 003537 aa 6 00044 3701 20 epp4 pr6|36,* 003540 la 4 00074 3535 20 epp3 pr4|60,* pvt$array 003541 aa 6 00416 2535 00 spri3 pr6|270 pvt_arrayp STATEMENT 1 ON LINE 1032 pvtep = addr (pvt_array (Pvtx)); 003542 aa 7 00002 2361 20 ldq pr7|2,* Pvtx 003543 aa 000034 4020 07 mpy 28,dl 003544 aa 3 77744 3515 06 epp1 pr3|-28,ql pvt_array 003545 aa 6 00420 2515 00 spri1 pr6|272 pvtep STATEMENT 1 ON LINE 1033 call syserr (LOG, "vtoc_man: Write I/O being retried by ^a for ^a_^a^a vtocx ^o", pds$process_group_id, pvte.devname, convert (p99, pvte.logical_area_number), pvte.sv_name, Vtocx); 003546 aa 000 100 100 404 mlr (ic),(pr),fill(000) 003547 aa 774503 00 0074 desc9a -1725,60 000251 = 166164157143 003550 aa 6 01110 00 0074 desc9a pr6|584,60 003551 aa 1 00004 2351 00 lda pr1|4 pvte.logical_area_number 003552 aa 000011 7350 00 als 9 003553 aa 000077 7330 00 lrs 63 003554 aa 6 01131 7561 00 stq pr6|601 pvte.logical_area_number 003555 aa 000 100 301 500 btd (pr),(pr) 003556 aa 6 01131 00 0004 desc9a pr6|601,4 pvte.logical_area_number 003557 aa 6 01130 01 0003 desc9ls pr6|600,3,0 003560 aa 6 01127 4501 00 stz pr6|599 003561 aa 100 004 024 500 mvne (pr),(ic),(pr) 003562 aa 6 01130 01 0003 desc9ls pr6|600,3,0 003563 aa 001025 00 0002 desc9a 533,2 004606 = 070322000000 003564 aa 6 01127 00 0002 desc9a pr6|599,2 003565 aa 774336 3520 04 epp2 -1826,ic 000123 = 000000000004 003566 aa 6 01134 2521 00 spri2 pr6|604 003567 aa 6 01110 3521 00 epp2 pr6|584 003570 aa 6 01136 2521 00 spri2 pr6|606 003571 la 4 00024 3521 20 epp2 pr4|20,* pds$process_group_id 003572 aa 6 01140 2521 00 spri2 pr6|608 003573 aa 1 00003 3521 00 epp2 pr1|3 pvte.devname 003574 aa 6 01142 2521 00 spri2 pr6|610 003575 aa 6 01127 3521 00 epp2 pr6|599 003576 aa 6 01144 2521 00 spri2 pr6|612 003577 aa 1 00015 3521 00 epp2 pr1|13 pvte.sv_name 003600 aa 6 01146 2521 00 spri2 pr6|614 003601 aa 7 00004 3521 20 epp2 pr7|4,* Vtocx 003602 aa 6 01150 2521 00 spri2 pr6|616 003603 aa 774324 3520 04 epp2 -1836,ic 000127 = 404000000021 003604 aa 6 01152 2521 00 spri2 pr6|618 003605 aa 6 01166 2521 00 spri2 pr6|630 003606 aa 774271 3520 04 epp2 -1863,ic 000077 = 524000000074 003607 aa 6 01154 2521 00 spri2 pr6|620 003610 aa 774300 3520 04 epp2 -1856,ic 000110 = 524000000040 003611 aa 6 01156 2521 00 spri2 pr6|622 003612 aa 774275 3520 04 epp2 -1859,ic 000107 = 524000000004 003613 aa 6 01160 2521 00 spri2 pr6|624 003614 aa 774272 3520 04 epp2 -1862,ic 000106 = 524000000002 003615 aa 6 01162 2521 00 spri2 pr6|626 003616 aa 6 01164 2521 00 spri2 pr6|628 003617 aa 6 01132 6211 00 eax1 pr6|602 003620 aa 034000 4310 07 fld 14336,dl 003621 la 4 00054 3521 20 epp2 pr4|44,* syserr 003622 aa 0 00622 7001 00 tsx0 pr0|402 call_ext_out_desc STATEMENT 1 ON LINE 1036 Vtoc_buf_desc.os = "0"b; 003623 aa 001003 2350 04 lda 515,ic 004626 = 773777777777 003624 aa 6 00556 3735 20 epp7 pr6|366,* 003625 aa 7 00010 3715 20 epp5 pr7|8,* Vtoc_buf_descp 003626 aa 5 00000 3715 20 epp5 pr5|0,* Vtoc_buf_descp 003627 aa 5 00001 3551 00 ansa pr5|1 Vtoc_buf_desc.os STATEMENT 1 ON LINE 1038 call WRITE ((Vtoc_buf_desc.parts_used), Vtoc_buf_descp); 003630 aa 5 00001 2351 00 lda pr5|1 Vtoc_buf_desc.parts_used 003631 aa 0 00006 3771 00 anaq pr0|6 = 700000000000 000000000000 003632 aa 6 01127 7551 00 sta pr6|599 003633 aa 6 01127 3521 00 epp2 pr6|599 003634 aa 6 01074 2521 00 spri2 pr6|572 003635 aa 7 00010 3521 20 epp2 pr7|8,* Vtoc_buf_descp 003636 aa 6 01076 2521 00 spri2 pr6|574 003637 aa 6 01072 3521 00 epp2 pr6|570 003640 aa 010000 4310 07 fld 4096,dl 003641 aa 2 00000 7571 00 staq pr2|0 003642 aa 000145 6700 04 tsp4 101,ic 004007 STATEMENT 1 ON LINE 1039 goto RETRY_READ; 003643 aa 777574 7100 04 tra -132,ic 003437 STATEMENT 1 ON LINE 1040 end; STATEMENT 1 ON LINE 1042 Code = error_table_$vtoc_io_err; 003644 aa 6 00044 3701 20 epp4 pr6|36,* 003645 la 4 00016 2361 20 ldq pr4|14,* error_table_$vtoc_io_err 003646 aa 6 00556 3735 20 epp7 pr6|366,* 003647 aa 7 00016 7561 20 stq pr7|14,* Code STATEMENT 1 ON LINE 1043 Vtoc_buf_descp = null (); 003650 aa 774260 2370 04 ldaq -1872,ic 000130 = 077777000043 000001000000 003651 aa 7 00010 7571 20 staq pr7|8,* Vtoc_buf_descp STATEMENT 1 ON LINE 1044 Vtoc_bufp = null (); 003652 aa 7 00012 7571 20 staq pr7|10,* Vtoc_bufp STATEMENT 1 ON LINE 1045 return; 003653 aa 6 00554 6101 00 rtcd pr6|364 STATEMENT 1 ON LINE 1046 end; STATEMENT 1 ON LINE 1048 if (Vtoc_buf_desc.parts_used & Parts) = Parts /* Got what they want */ then return; 003654 aa 7 00006 2351 20 lda pr7|6,* Parts 003655 aa 0 00006 3771 00 anaq pr0|6 = 700000000000 000000000000 003656 aa 6 01127 7551 00 sta pr6|599 Parts 003657 aa 5 00001 2351 00 lda pr5|1 Vtoc_buf_desc.parts_used 003660 aa 0 00006 3771 00 anaq pr0|6 = 700000000000 000000000000 003661 aa 6 01127 3751 00 ana pr6|599 Parts 003662 aa 6 01127 1151 00 cmpa pr6|599 Parts 003663 aa 000002 6010 04 tnz 2,ic 003665 003664 aa 6 00554 6101 00 rtcd pr6|364 STATEMENT 1 ON LINE 1051 Vtoc_buf_desc.write_sw = "0"b; 003665 aa 000714 2350 04 lda 460,ic 004601 = 767777777777 003666 aa 5 00001 3551 00 ansa pr5|1 Vtoc_buf_desc.write_sw STATEMENT 1 ON LINE 1052 Vtoc_buf_desc.err = "0"b; 003667 aa 000711 2350 04 lda 457,ic 004600 = 737777777777 003670 aa 5 00001 3551 00 ansa pr5|1 Vtoc_buf_desc.err STATEMENT 1 ON LINE 1053 Vtoc_buf_desc.notify_sw = "0"b; 003671 aa 000706 2350 04 lda 454,ic 004577 = 757777777777 003672 aa 5 00001 3551 00 ansa pr5|1 Vtoc_buf_desc.notify_sw STATEMENT 1 ON LINE 1054 Vtoc_buf_desc.ioq = "0"b; 003673 aa 000703 2350 04 lda 451,ic 004576 = 775777777777 003674 aa 5 00001 3551 00 ansa pr5|1 Vtoc_buf_desc.ioq STATEMENT 1 ON LINE 1055 Vtoc_buf_desc.os = "1"b; 003675 aa 004000 2350 03 lda 2048,du 003676 aa 5 00001 2551 00 orsa pr5|1 Vtoc_buf_desc.os STATEMENT 1 ON LINE 1057 dev_type = addr (pvt_array (Pvtx)) -> pvte.device_type; 003677 aa 7 00002 2361 20 ldq pr7|2,* Pvtx 003700 aa 000034 4020 07 mpy 28,dl 003701 aa 6 00416 3535 20 epp3 pr6|270,* pvt_arrayp 003702 aa 3 77750 2351 06 lda pr3|-24,ql pvte.device_type 003703 aa 6 01127 7561 00 stq pr6|599 003704 aa 000077 7330 00 lrs 63 003705 aa 6 00102 7561 00 stq pr6|66 dev_type STATEMENT 1 ON LINE 1059 call dctl$read_sectors (Pvtx, CORE (Vtoc_buf_descp), RECORD (Vtoc_buf_descp), SECTOR (Vtoc_buf_descp), SECTORS_PER_VTOCE (dev_type)); 003706 aa 7 00010 3521 20 epp2 pr7|8,* Vtoc_buf_descp 003707 aa 6 01074 2521 00 spri2 pr6|572 003710 aa 6 01130 3521 00 epp2 pr6|600 003711 aa 6 01076 2521 00 spri2 pr6|574 003712 aa 6 01072 3521 00 epp2 pr6|570 003713 aa 010000 4310 07 fld 4096,dl 003714 aa 2 00000 7571 00 staq pr2|0 003715 aa 776713 6700 04 tsp4 -565,ic 002630 003716 aa 6 00556 3735 20 epp7 pr6|366,* 003717 aa 7 00010 3521 20 epp2 pr7|8,* Vtoc_buf_descp 003720 aa 6 01074 2521 00 spri2 pr6|572 003721 aa 6 01131 3521 00 epp2 pr6|601 003722 aa 6 01076 2521 00 spri2 pr6|574 003723 aa 6 01072 3521 00 epp2 pr6|570 003724 aa 010000 4310 07 fld 4096,dl 003725 aa 2 00000 7571 00 staq pr2|0 003726 aa 776714 6700 04 tsp4 -564,ic 002642 003727 aa 6 00556 3735 20 epp7 pr6|366,* 003730 aa 7 00010 3521 20 epp2 pr7|8,* Vtoc_buf_descp 003731 aa 6 01074 2521 00 spri2 pr6|572 003732 aa 6 01170 3521 00 epp2 pr6|632 003733 aa 6 01076 2521 00 spri2 pr6|574 003734 aa 6 01072 3521 00 epp2 pr6|570 003735 aa 010000 4310 07 fld 4096,dl 003736 aa 2 00000 7571 00 staq pr2|0 003737 aa 776722 6700 04 tsp4 -558,ic 002661 003740 aa 6 00556 3735 20 epp7 pr6|366,* 003741 aa 7 00002 3521 20 epp2 pr7|2,* Pvtx 003742 aa 6 01074 2521 00 spri2 pr6|572 003743 aa 6 01130 3521 00 epp2 pr6|600 003744 aa 6 01076 2521 00 spri2 pr6|574 003745 aa 6 01131 3521 00 epp2 pr6|601 003746 aa 6 01100 2521 00 spri2 pr6|576 003747 aa 6 01170 3521 00 epp2 pr6|632 003750 aa 6 01102 2521 00 spri2 pr6|578 003751 aa 6 00102 7271 00 lxl7 pr6|66 dev_type 003752 ta 000021 3520 17 epp2 17,7 003753 aa 6 01104 2521 00 spri2 pr6|580 003754 aa 6 01072 6211 00 eax1 pr6|570 003755 aa 024000 4310 07 fld 10240,dl 003756 aa 6 00044 3701 20 epp4 pr6|36,* 003757 la 4 00034 3521 20 epp2 pr4|28,* dctl$read_sectors 003760 aa 0 00623 7001 00 tsx0 pr0|403 call_ext_out STATEMENT 1 ON LINE 1061 Sector_read_required = "1"b; 003761 aa 400000 2350 03 lda 131072,du 003762 aa 6 00556 3735 20 epp7 pr6|366,* 003763 aa 7 00014 7551 20 sta pr7|12,* Sector_read_required STATEMENT 1 ON LINE 1062 Vtoc_buf_desc.ioq = "1"b; 003764 aa 002000 2350 03 lda 1024,du 003765 aa 7 00010 3715 20 epp5 pr7|8,* Vtoc_buf_descp 003766 aa 5 00000 3715 20 epp5 pr5|0,* Vtoc_buf_descp 003767 aa 5 00001 2551 00 orsa pr5|1 Vtoc_buf_desc.ioq STATEMENT 1 ON LINE 1063 Vtoc_buf_desc.parts_used = ALL_PARTS; 003770 aa 700000 2350 03 lda 229376,du 003771 aa 5 00001 2551 00 orsa pr5|1 Vtoc_buf_desc.parts_used STATEMENT 1 ON LINE 1065 vtoc_buffer.meters.disk_reads = vtoc_buffer.meters.disk_reads + 1; 003772 aa 6 00422 3535 20 epp3 pr6|274,* vtoc_buffer_segp 003773 aa 3 00027 2351 00 lda pr3|23 vtoc_buffer.disk_reads 003774 aa 000044 7330 00 lrs 36 003775 aa 000001 0330 07 adl 1,dl 003776 aa 3 00027 7561 00 stq pr3|23 vtoc_buffer.disk_reads STATEMENT 1 ON LINE 1066 pds$vtoc_reads = pds$vtoc_reads + 1; 003777 aa 6 00044 3701 20 epp4 pr6|36,* 004000 la 4 00026 2351 20 lda pr4|22,* pds$vtoc_reads 004001 aa 000044 7330 00 lrs 36 004002 aa 000001 0330 07 adl 1,dl 004003 la 4 00026 7561 20 stq pr4|22,* pds$vtoc_reads STATEMENT 1 ON LINE 1068 if wait_sw then goto RETRY_READ; 004004 aa 6 00562 2351 00 lda pr6|370 wait_sw 004005 aa 777432 6010 04 tnz -230,ic 003437 STATEMENT 1 ON LINE 1071 return; 004006 aa 6 00554 6101 00 rtcd pr6|364 STATEMENT 1 ON LINE 1073 end READ; END PROCEDURE READ BEGIN PROCEDURE WRITE ENTRY TO WRITE STATEMENT 1 ON LINE 1079 WRITE: proc (Parts, Vtoc_buf_descp); 004007 aa 6 00564 6501 00 spri4 pr6|372 004010 aa 6 00566 2521 00 spri2 pr6|374 STATEMENT 1 ON LINE 1090 if Vtoc_buf_desc.os then call syserr (CRASH, "vtoc_man: buffer out-of-service on write."); 004011 aa 2 00004 3735 20 epp7 pr2|4,* Vtoc_buf_descp 004012 aa 7 00000 3735 20 epp7 pr7|0,* Vtoc_buf_descp 004013 aa 7 00001 2351 00 lda pr7|1 Vtoc_buf_desc.os 004014 aa 004000 3150 03 cana 2048,du 004015 aa 000021 6000 04 tze 17,ic 004036 004016 aa 000 100 100 404 mlr (ic),(pr),fill(000) 004017 aa 774171 00 0054 desc9a -1927,44 000207 = 166164157143 004020 aa 6 01172 00 0054 desc9a pr6|634,44 004021 aa 774100 3520 04 epp2 -1984,ic 000121 = 000000000001 004022 aa 6 01210 2521 00 spri2 pr6|648 004023 aa 6 01172 3521 00 epp2 pr6|634 004024 aa 6 01212 2521 00 spri2 pr6|650 004025 aa 774102 3520 04 epp2 -1982,ic 000127 = 404000000021 004026 aa 6 01214 2521 00 spri2 pr6|652 004027 aa 774053 3520 04 epp2 -2005,ic 000102 = 524000000051 004030 aa 6 01216 2521 00 spri2 pr6|654 004031 aa 6 01206 6211 00 eax1 pr6|646 004032 aa 010000 4310 07 fld 4096,dl 004033 aa 6 00044 3701 20 epp4 pr6|36,* 004034 la 4 00054 3521 20 epp2 pr4|44,* syserr 004035 aa 0 00622 7001 00 tsx0 pr0|402 call_ext_out_desc STATEMENT 1 ON LINE 1093 partsx = bin (Parts, 3); 004036 aa 6 00566 3735 20 epp7 pr6|374,* 004037 aa 7 00002 2351 20 lda pr7|2,* Parts 004040 aa 000105 7730 00 lrl 69 004041 aa 6 00572 7561 00 stq pr6|378 partsx STATEMENT 1 ON LINE 1094 if ^VALID_WRITE (partsx) then call syserr (CRASH, "vtoc_man: Invalid write"); 004042 ta 000033 2350 06 lda 27,ql 004043 aa 000021 6010 04 tnz 17,ic 004064 004044 aa 000 100 100 404 mlr (ic),(pr),fill(000) 004045 aa 774071 00 0030 desc9a -1991,24 000135 = 166164157143 004046 aa 6 01206 00 0030 desc9a pr6|646,24 004047 aa 774052 3520 04 epp2 -2006,ic 000121 = 000000000001 004050 aa 6 01174 2521 00 spri2 pr6|636 004051 aa 6 01206 3521 00 epp2 pr6|646 004052 aa 6 01176 2521 00 spri2 pr6|638 004053 aa 774054 3520 04 epp2 -2004,ic 000127 = 404000000021 004054 aa 6 01200 2521 00 spri2 pr6|640 004055 aa 774021 3520 04 epp2 -2031,ic 000076 = 524000000027 004056 aa 6 01202 2521 00 spri2 pr6|642 004057 aa 6 01172 6211 00 eax1 pr6|634 004060 aa 010000 4310 07 fld 4096,dl 004061 aa 6 00044 3701 20 epp4 pr6|36,* 004062 la 4 00054 3521 20 epp2 pr4|44,* syserr 004063 aa 0 00622 7001 00 tsx0 pr0|402 call_ext_out_desc STATEMENT 1 ON LINE 1097 Vtoc_buf_desc.err = "0"b; 004064 aa 000514 2350 04 lda 332,ic 004600 = 737777777777 004065 aa 6 00566 3735 20 epp7 pr6|374,* 004066 aa 7 00004 3715 20 epp5 pr7|4,* Vtoc_buf_descp 004067 aa 5 00000 3715 20 epp5 pr5|0,* Vtoc_buf_descp 004070 aa 5 00001 3551 00 ansa pr5|1 Vtoc_buf_desc.err STATEMENT 1 ON LINE 1098 Vtoc_buf_desc.notify_sw = "0"b; 004071 aa 000506 2350 04 lda 326,ic 004577 = 757777777777 004072 aa 5 00001 3551 00 ansa pr5|1 Vtoc_buf_desc.notify_sw STATEMENT 1 ON LINE 1099 Vtoc_buf_desc.ioq = "0"b; 004073 aa 000503 2350 04 lda 323,ic 004576 = 775777777777 004074 aa 5 00001 3551 00 ansa pr5|1 Vtoc_buf_desc.ioq STATEMENT 1 ON LINE 1100 Vtoc_buf_desc.write_sw = "1"b; 004075 aa 010000 2350 03 lda 4096,du 004076 aa 5 00001 2551 00 orsa pr5|1 Vtoc_buf_desc.write_sw STATEMENT 1 ON LINE 1101 Vtoc_buf_desc.os = "1"b; 004077 aa 004000 2350 03 lda 2048,du 004100 aa 5 00001 2551 00 orsa pr5|1 Vtoc_buf_desc.os STATEMENT 1 ON LINE 1103 dev_type = addr (pvt_array (Vtoc_buf_desc.pvtx)) -> pvte.device_type; 004101 aa 5 00000 2351 00 lda pr5|0 Vtoc_buf_desc.pvtx 004102 aa 000066 7330 00 lrs 54 004103 aa 000034 4020 07 mpy 28,dl 004104 aa 6 00416 3535 20 epp3 pr6|270,* pvt_arrayp 004105 aa 3 77750 2351 06 lda pr3|-24,ql pvte.device_type 004106 aa 6 01205 7561 00 stq pr6|645 004107 aa 000077 7330 00 lrs 63 004110 aa 6 00102 7561 00 stq pr6|66 dev_type STATEMENT 1 ON LINE 1105 if SECTORS_PER_VTOCE (dev_type) = 1 then do; 004111 ta 000021 2360 06 ldq 17,ql 004112 aa 000001 1160 07 cmpq 1,dl 004113 aa 000034 6010 04 tnz 28,ic 004147 STATEMENT 1 ON LINE 1107 n_sectors = 1; 004114 aa 000001 2360 07 ldq 1,dl 004115 aa 6 00573 7561 00 stq pr6|379 n_sectors STATEMENT 1 ON LINE 1108 if Parts ^= ALL_PARTS then do; 004116 aa 7 00002 2351 20 lda pr7|2,* Parts 004117 aa 0 00006 3771 00 anaq pr0|6 = 700000000000 000000000000 004120 aa 700000 1150 03 cmpa 229376,du 004121 aa 000031 6000 04 tze 25,ic 004152 STATEMENT 1 ON LINE 1110 call syserr (CRASH, "vtoc_man: Attempt to write less than entire VTOCE to ^d device.", MODELN (dev_type)); 004122 aa 000 100 100 404 mlr (ic),(pr),fill(000) 004123 aa 774165 00 0100 desc9a -1931,64 000307 = 166164157143 004124 aa 6 01220 00 0100 desc9a pr6|656,64 004125 aa 773774 3520 04 epp2 -2052,ic 000121 = 000000000001 004126 aa 6 01242 2521 00 spri2 pr6|674 004127 aa 6 01220 3521 00 epp2 pr6|656 004130 aa 6 01244 2521 00 spri2 pr6|676 004131 aa 6 00102 7271 00 lxl7 pr6|66 dev_type 004132 ta 777777 3520 17 epp2 -1,7 004133 aa 6 01246 2521 00 spri2 pr6|678 004134 aa 773773 3520 04 epp2 -2053,ic 000127 = 404000000021 004135 aa 6 01250 2521 00 spri2 pr6|680 004136 aa 6 01254 2521 00 spri2 pr6|684 004137 aa 773736 3520 04 epp2 -2082,ic 000075 = 524000000077 004140 aa 6 01252 2521 00 spri2 pr6|682 004141 aa 6 01240 6211 00 eax1 pr6|672 004142 aa 014000 4310 07 fld 6144,dl 004143 aa 6 00044 3701 20 epp4 pr6|36,* 004144 la 4 00054 3521 20 epp2 pr4|44,* syserr 004145 aa 0 00622 7001 00 tsx0 pr0|402 call_ext_out_desc STATEMENT 1 ON LINE 1112 end; STATEMENT 1 ON LINE 1113 end; 004146 aa 000004 7100 04 tra 4,ic 004152 STATEMENT 1 ON LINE 1114 else n_sectors = SECTORS_TO_WRITE (partsx); 004147 aa 6 00572 7271 00 lxl7 pr6|378 partsx 004150 ta 000043 2360 17 ldq 35,7 004151 aa 6 00573 7561 00 stq pr6|379 n_sectors STATEMENT 1 ON LINE 1115 call dctl$write_sectors ((Vtoc_buf_desc.pvtx), CORE (Vtoc_buf_descp) + CORE_OFFSET (partsx), RECORD (Vtoc_buf_descp), SECTOR (Vtoc_buf_descp) + SECTOR_OFFSET (partsx), n_sectors); 004152 aa 6 00566 3735 20 epp7 pr6|374,* 004153 aa 7 00004 3715 20 epp5 pr7|4,* Vtoc_buf_descp 004154 aa 5 00000 2351 20 lda pr5|0,* Vtoc_buf_desc.pvtx 004155 aa 000066 7330 00 lrs 54 004156 aa 6 01171 7561 00 stq pr6|633 004157 aa 7 00004 3521 20 epp2 pr7|4,* Vtoc_buf_descp 004160 aa 6 01210 2521 00 spri2 pr6|648 004161 aa 6 01256 3521 00 epp2 pr6|686 004162 aa 6 01212 2521 00 spri2 pr6|650 004163 aa 6 01206 3521 00 epp2 pr6|646 004164 aa 010000 4310 07 fld 4096,dl 004165 aa 2 00000 7571 00 staq pr2|0 004166 aa 776442 6700 04 tsp4 -734,ic 002630 004167 aa 6 01256 2361 00 ldq pr6|686 004170 aa 6 00572 7271 00 lxl7 pr6|378 partsx 004171 ta 000064 0760 17 adq 52,7 004172 aa 6 01256 7561 00 stq pr6|686 004173 aa 6 00566 3735 20 epp7 pr6|374,* 004174 aa 7 00004 3521 20 epp2 pr7|4,* Vtoc_buf_descp 004175 aa 6 01210 2521 00 spri2 pr6|648 004176 aa 6 01257 3521 00 epp2 pr6|687 004177 aa 6 01212 2521 00 spri2 pr6|650 004200 aa 6 01206 3521 00 epp2 pr6|646 004201 aa 010000 4310 07 fld 4096,dl 004202 aa 2 00000 7571 00 staq pr2|0 004203 aa 776437 6700 04 tsp4 -737,ic 002642 004204 aa 6 00566 3735 20 epp7 pr6|374,* 004205 aa 7 00004 3521 20 epp2 pr7|4,* Vtoc_buf_descp 004206 aa 6 01210 2521 00 spri2 pr6|648 004207 aa 6 01260 3521 00 epp2 pr6|688 004210 aa 6 01212 2521 00 spri2 pr6|650 004211 aa 6 01206 3521 00 epp2 pr6|646 004212 aa 010000 4310 07 fld 4096,dl 004213 aa 2 00000 7571 00 staq pr2|0 004214 aa 776445 6700 04 tsp4 -731,ic 002661 004215 aa 6 01260 2361 00 ldq pr6|688 004216 aa 6 00572 7271 00 lxl7 pr6|378 partsx 004217 ta 000053 0760 17 adq 43,7 004220 aa 6 01260 7561 00 stq pr6|688 004221 aa 6 01171 3521 00 epp2 pr6|633 004222 aa 6 01242 2521 00 spri2 pr6|674 004223 aa 6 01256 3521 00 epp2 pr6|686 004224 aa 6 01244 2521 00 spri2 pr6|676 004225 aa 6 01257 3521 00 epp2 pr6|687 004226 aa 6 01246 2521 00 spri2 pr6|678 004227 aa 6 01260 3521 00 epp2 pr6|688 004230 aa 6 01250 2521 00 spri2 pr6|680 004231 aa 6 00573 3521 00 epp2 pr6|379 n_sectors 004232 aa 6 01252 2521 00 spri2 pr6|682 004233 aa 6 01240 6211 00 eax1 pr6|672 004234 aa 024000 4310 07 fld 10240,dl 004235 aa 6 00044 3701 20 epp4 pr6|36,* 004236 la 4 00036 3521 20 epp2 pr4|30,* dctl$write_sectors 004237 aa 0 00623 7001 00 tsx0 pr0|403 call_ext_out STATEMENT 1 ON LINE 1118 Vtoc_buf_desc.ioq = "1"b; 004240 aa 002000 2350 03 lda 1024,du 004241 aa 6 00566 3735 20 epp7 pr6|374,* 004242 aa 7 00004 3715 20 epp5 pr7|4,* Vtoc_buf_descp 004243 aa 5 00000 3715 20 epp5 pr5|0,* Vtoc_buf_descp 004244 aa 5 00001 2551 00 orsa pr5|1 Vtoc_buf_desc.ioq STATEMENT 1 ON LINE 1119 if VALID_WRITE (bin ((Parts | Vtoc_buf_desc.parts_used), 3)) then Vtoc_buf_desc.parts_used = Vtoc_buf_desc.parts_used | Parts; 004245 aa 7 00002 2351 20 lda pr7|2,* Parts 004246 aa 0 00006 3771 00 anaq pr0|6 = 700000000000 000000000000 004247 aa 6 01260 7551 00 sta pr6|688 Parts 004250 aa 5 00001 2351 00 lda pr5|1 Vtoc_buf_desc.parts_used 004251 aa 0 00006 3771 00 anaq pr0|6 = 700000000000 000000000000 004252 aa 6 01257 7551 00 sta pr6|687 Vtoc_buf_desc.parts_used 004253 aa 6 01260 2751 00 ora pr6|688 Parts 004254 aa 000105 7730 00 lrl 69 004255 aa 6 01256 7561 00 stq pr6|686 004256 ta 000033 2350 06 lda 27,ql 004257 aa 000007 6000 04 tze 7,ic 004266 004260 aa 6 01257 2351 00 lda pr6|687 Vtoc_buf_desc.parts_used 004261 aa 6 01260 2751 00 ora pr6|688 Parts 004262 aa 5 00001 6751 00 era pr5|1 Vtoc_buf_desc.parts_used 004263 aa 0 00006 3751 00 ana pr0|6 = 700000000000 004264 aa 5 00001 6551 00 ersa pr5|1 Vtoc_buf_desc.parts_used 004265 aa 000005 7100 04 tra 5,ic 004272 STATEMENT 1 ON LINE 1121 else Vtoc_buf_desc.parts_used = Parts; 004266 aa 6 01260 2351 00 lda pr6|688 Parts 004267 aa 5 00001 6751 00 era pr5|1 Vtoc_buf_desc.parts_used 004270 aa 0 00006 3751 00 ana pr0|6 = 700000000000 004271 aa 5 00001 6551 00 ersa pr5|1 Vtoc_buf_desc.parts_used STATEMENT 1 ON LINE 1123 vtoc_buffer.meters.disk_writes = vtoc_buffer.meters.disk_writes + 1; 004272 aa 6 00422 3535 20 epp3 pr6|274,* vtoc_buffer_segp 004273 aa 3 00030 2351 00 lda pr3|24 vtoc_buffer.disk_writes 004274 aa 000044 7330 00 lrs 36 004275 aa 000001 0330 07 adl 1,dl 004276 aa 3 00030 7561 00 stq pr3|24 vtoc_buffer.disk_writes STATEMENT 1 ON LINE 1124 pds$vtoc_writes = pds$vtoc_writes + 1; 004277 aa 6 00044 3701 20 epp4 pr6|36,* 004300 la 4 00030 2351 20 lda pr4|24,* pds$vtoc_writes 004301 aa 000044 7330 00 lrs 36 004302 aa 000001 0330 07 adl 1,dl 004303 la 4 00030 7561 20 stq pr4|24,* pds$vtoc_writes STATEMENT 1 ON LINE 1126 end WRITE; 004304 aa 6 00564 6101 00 rtcd pr6|372 END PROCEDURE WRITE BEGIN PROCEDURE WAIT ENTRY TO WAIT STATEMENT 1 ON LINE 1132 WAIT: proc (Vtoc_buf_descp, Code); 004305 aa 6 00574 6501 00 spri4 pr6|380 004306 aa 6 00576 2521 00 spri2 pr6|382 STATEMENT 1 ON LINE 1140 Code = 0; 004307 aa 2 00004 4501 20 stz pr2|4,* Code STATEMENT 1 ON LINE 1141 vtoc_buffer.meters.wait_calls = vtoc_buffer.meters.wait_calls + 1; 004310 aa 6 00422 3735 20 epp7 pr6|274,* vtoc_buffer_segp 004311 aa 7 00033 2351 00 lda pr7|27 vtoc_buffer.wait_calls 004312 aa 000044 7330 00 lrs 36 004313 aa 000001 0330 07 adl 1,dl 004314 aa 7 00033 7561 00 stq pr7|27 vtoc_buffer.wait_calls STATEMENT 1 ON LINE 1143 do while (Vtoc_buf_desc.os); 004315 aa 000000 0110 03 nop 0,du 004316 aa 6 00576 3735 20 epp7 pr6|382,* 004317 aa 7 00002 3715 20 epp5 pr7|2,* Vtoc_buf_descp 004320 aa 5 00000 3715 20 epp5 pr5|0,* Vtoc_buf_descp 004321 aa 5 00001 2351 00 lda pr5|1 Vtoc_buf_desc.os 004322 aa 004000 3150 03 cana 2048,du 004323 aa 000100 6000 04 tze 64,ic 004423 STATEMENT 1 ON LINE 1144 wait_event = bit (bin (vtoc_buffer.wait_event_constant + Vtoc_buf_desc.wait_index, 36), 36); 004324 aa 5 00001 2351 00 lda pr5|1 Vtoc_buf_desc.wait_index 004325 aa 000022 7350 00 als 18 004326 aa 000066 7330 00 lrs 54 004327 aa 6 01261 7561 00 stq pr6|689 Vtoc_buf_desc.wait_index 004330 aa 6 00422 3535 20 epp3 pr6|274,* vtoc_buffer_segp 004331 aa 3 00007 2351 00 lda pr3|7 vtoc_buffer.wait_event_constant 004332 aa 000044 7730 00 lrl 36 004333 aa 6 01261 0331 00 adl pr6|689 Vtoc_buf_desc.wait_index 004334 aa 000002 6050 04 tpl 2,ic 004336 004335 aa 000000 5330 00 negl 0 004336 aa 000044 7370 00 lls 36 004337 aa 6 00414 7551 00 sta pr6|268 wait_event STATEMENT 1 ON LINE 1145 call pxss$addevent (wait_event); 004340 aa 6 00414 3521 00 epp2 pr6|268 wait_event 004341 aa 6 01264 2521 00 spri2 pr6|692 004342 aa 6 01262 6211 00 eax1 pr6|690 004343 aa 004000 4310 07 fld 2048,dl 004344 aa 6 00044 3701 20 epp4 pr6|36,* 004345 la 4 00046 3521 20 epp2 pr4|38,* pxss$addevent 004346 aa 0 00623 7001 00 tsx0 pr0|403 call_ext_out STATEMENT 1 ON LINE 1146 Vtoc_buf_desc.notify_sw = "1"b; 004347 aa 020000 2350 03 lda 8192,du 004350 aa 6 00576 3735 20 epp7 pr6|382,* 004351 aa 7 00002 3715 20 epp5 pr7|2,* Vtoc_buf_descp 004352 aa 5 00000 3715 20 epp5 pr5|0,* Vtoc_buf_descp 004353 aa 5 00001 2551 00 orsa pr5|1 Vtoc_buf_desc.notify_sw STATEMENT 1 ON LINE 1147 if Vtoc_buf_desc.os then do; 004354 aa 5 00001 2351 00 lda pr5|1 Vtoc_buf_desc.os 004355 aa 004000 3150 03 cana 2048,du 004356 aa 000030 6000 04 tze 24,ic 004406 STATEMENT 1 ON LINE 1149 vtoc_buffer.meters.wait_os = vtoc_buffer.meters.wait_os + 1; 004357 aa 6 00422 3535 20 epp3 pr6|274,* vtoc_buffer_segp 004360 aa 3 00034 2351 00 lda pr3|28 vtoc_buffer.wait_os 004361 aa 000044 7330 00 lrs 36 004362 aa 000001 0330 07 adl 1,dl 004363 aa 3 00034 7561 00 stq pr3|28 vtoc_buffer.wait_os STATEMENT 1 ON LINE 1150 call UNLOCK; 004364 aa 000172 6700 04 tsp4 122,ic 004556 STATEMENT 1 ON LINE 1151 call pxss$wait; 004365 aa 6 00056 6211 00 eax1 pr6|46 004366 aa 000000 4310 07 fld 0,dl 004367 aa 6 00044 3701 20 epp4 pr6|36,* 004370 la 4 00052 3521 20 epp2 pr4|42,* pxss$wait 004371 aa 0 00623 7001 00 tsx0 pr0|403 call_ext_out STATEMENT 1 ON LINE 1152 call LOCK_CHECK (Code); 004372 aa 6 00576 3735 20 epp7 pr6|382,* 004373 aa 7 00004 3521 20 epp2 pr7|4,* Code 004374 aa 6 01270 2521 00 spri2 pr6|696 004375 aa 6 01266 3521 00 epp2 pr6|694 004376 aa 004000 4310 07 fld 2048,dl 004377 aa 2 00000 7571 00 staq pr2|0 004400 aa 000107 6700 04 tsp4 71,ic 004507 STATEMENT 1 ON LINE 1153 if Code ^= 0 then return; 004401 aa 6 00576 3735 20 epp7 pr6|382,* 004402 aa 7 00004 2361 20 ldq pr7|4,* Code 004403 aa 000012 6000 04 tze 10,ic 004415 004404 aa 6 00574 6101 00 rtcd pr6|380 STATEMENT 1 ON LINE 1155 end; 004405 aa 000010 7100 04 tra 8,ic 004415 STATEMENT 1 ON LINE 1156 else call pxss$delevent (wait_event); 004406 aa 6 00414 3521 00 epp2 pr6|268 wait_event 004407 aa 6 01264 2521 00 spri2 pr6|692 004410 aa 6 01262 6211 00 eax1 pr6|690 004411 aa 004000 4310 07 fld 2048,dl 004412 aa 6 00044 3701 20 epp4 pr6|36,* 004413 la 4 00050 3521 20 epp2 pr4|40,* pxss$delevent 004414 aa 0 00623 7001 00 tsx0 pr0|403 call_ext_out STATEMENT 1 ON LINE 1157 Vtoc_buf_desc.notify_sw = "0"b; 004415 aa 000162 2350 04 lda 114,ic 004577 = 757777777777 004416 aa 6 00576 3735 20 epp7 pr6|382,* 004417 aa 7 00002 3715 20 epp5 pr7|2,* Vtoc_buf_descp 004420 aa 5 00000 3715 20 epp5 pr5|0,* Vtoc_buf_descp 004421 aa 5 00001 3551 00 ansa pr5|1 Vtoc_buf_desc.notify_sw STATEMENT 1 ON LINE 1158 end; 004422 aa 777674 7100 04 tra -68,ic 004316 STATEMENT 1 ON LINE 1160 end WAIT; 004423 aa 6 00574 6101 00 rtcd pr6|380 END PROCEDURE WAIT BEGIN PROCEDURE VALIDATE_VTOCX ENTRY TO VALIDATE_VTOCX STATEMENT 1 ON LINE 1167 VALIDATE_VTOCX: proc (Vtocx, Code); 004424 aa 6 00602 6501 00 spri4 pr6|386 004425 aa 6 00604 2521 00 spri2 pr6|388 STATEMENT 1 ON LINE 1173 if Vtocx < 0 | Vtocx >= pvte.n_vtoce then Code = error_table_$invalid_vtocx; 004426 aa 2 00002 2361 20 ldq pr2|2,* Vtocx 004427 aa 000007 6040 04 tmi 7,ic 004436 004430 aa 6 00420 3735 20 epp7 pr6|272,* pvtep 004431 aa 7 00017 2351 00 lda pr7|15 pvte.n_vtoce 004432 aa 000022 7350 00 als 18 004433 aa 000066 7330 00 lrs 54 004434 aa 2 00002 1161 20 cmpq pr2|2,* Vtocx 004435 aa 000005 6054 04 tpnz 5,ic 004442 004436 aa 6 00044 3701 20 epp4 pr6|36,* 004437 la 4 00012 2361 20 ldq pr4|10,* error_table_$invalid_vtocx 004440 aa 2 00004 7561 20 stq pr2|4,* Code 004441 aa 000002 7100 04 tra 2,ic 004443 STATEMENT 1 ON LINE 1175 else Code = 0; 004442 aa 2 00004 4501 20 stz pr2|4,* Code STATEMENT 1 ON LINE 1177 end VALIDATE_VTOCX; 004443 aa 6 00602 6101 00 rtcd pr6|386 END PROCEDURE VALIDATE_VTOCX BEGIN PROCEDURE SETUP_LOCK ENTRY TO SETUP_LOCK STATEMENT 1 ON LINE 1190 SETUP_LOCK: proc (Pvtx, Code); 004444 aa 6 00610 6501 00 spri4 pr6|392 004445 aa 6 00612 2521 00 spri2 pr6|394 STATEMENT 1 ON LINE 1199 vtoc_buffer_segp = addr (vtoc_buffer_seg$); 004446 aa 6 00044 3701 20 epp4 pr6|36,* 004447 la 4 00076 3735 20 epp7 pr4|62,* vtoc_buffer_seg$ 004450 aa 6 00422 6535 00 spri7 pr6|274 vtoc_buffer_segp STATEMENT 1 ON LINE 1200 vtoc_buf_desc_arrayp = ptr (vtoc_buffer_segp, vtoc_buffer.buf_desc_offset); 004451 aa 7 00010 2351 00 lda pr7|8 vtoc_buffer.buf_desc_offset 004452 aa 7 00000 3515 00 epp1 pr7|0 004453 aa 000000 3114 01 eawp1 0,au 004454 aa 6 00430 2515 00 spri1 pr6|280 vtoc_buf_desc_arrayp STATEMENT 1 ON LINE 1201 vtoc_buf_arrayp = ptr (vtoc_buffer_segp, vtoc_buffer.buf_offset); 004455 aa 7 00011 2351 00 lda pr7|9 vtoc_buffer.buf_offset 004456 aa 7 00000 3535 00 epp3 pr7|0 004457 aa 000000 3134 01 eawp3 0,au 004460 aa 6 00432 2535 00 spri3 pr6|282 vtoc_buf_arrayp STATEMENT 1 ON LINE 1202 pvt_arrayp = addr (pvt$array); 004461 la 4 00074 3715 20 epp5 pr4|60,* pvt$array 004462 aa 6 00416 6515 00 spri5 pr6|270 pvt_arrayp STATEMENT 1 ON LINE 1204 Code = 0; 004463 aa 2 00004 4501 20 stz pr2|4,* Code STATEMENT 1 ON LINE 1205 pvtep = null (); 004464 aa 773444 2370 04 ldaq -2268,ic 000130 = 077777000043 000001000000 004465 aa 6 00420 7571 00 staq pr6|272 pvtep STATEMENT 1 ON LINE 1207 if Pvtx < 0 | Pvtx > pvt$n_entries then Code = error_table_$invalid_pvtx; 004466 aa 2 00002 2361 20 ldq pr2|2,* Pvtx 004467 aa 000003 6040 04 tmi 3,ic 004472 004470 la 4 00032 1161 20 cmpq pr4|26,* pvt$n_entries 004471 aa 000004 6044 04 tmoz 4,ic 004475 004472 la 4 00010 2361 20 ldq pr4|8,* error_table_$invalid_pvtx 004473 aa 2 00004 7561 20 stq pr2|4,* Code 004474 aa 000004 7100 04 tra 4,ic 004500 STATEMENT 1 ON LINE 1209 else pvtep = addr (pvt_array (Pvtx)); 004475 aa 000034 4020 07 mpy 28,dl 004476 aa 5 77744 3735 06 epp7 pr5|-28,ql pvt_array 004477 aa 6 00420 6535 00 spri7 pr6|272 pvtep STATEMENT 1 ON LINE 1211 call LOCK_CHECK (code); 004500 aa 000072 3520 04 epp2 58,ic 004572 = 000002000000 004501 aa 000006 6700 04 tsp4 6,ic 004507 STATEMENT 1 ON LINE 1212 if code ^= 0 then Code = code; 004502 aa 6 00616 2361 00 ldq pr6|398 code 004503 aa 000003 6000 04 tze 3,ic 004506 004504 aa 6 00612 3735 20 epp7 pr6|394,* 004505 aa 7 00004 7561 20 stq pr7|4,* Code STATEMENT 1 ON LINE 1215 end SETUP_LOCK; 004506 aa 6 00610 6101 00 rtcd pr6|392 END PROCEDURE SETUP_LOCK BEGIN PROCEDURE LOCK_CHECK ENTRY TO LOCK_CHECK STATEMENT 1 ON LINE 1219 LOCK_CHECK: proc (Code); 004507 aa 6 00620 6501 00 spri4 pr6|400 004510 aa 6 00622 2521 00 spri2 pr6|402 STATEMENT 1 ON LINE 1224 Code = 0; 004511 aa 2 00002 4501 20 stz pr2|2,* Code STATEMENT 1 ON LINE 1226 if pvtep ^= null () then do; 004512 aa 6 00420 2371 00 ldaq pr6|272 pvtep 004513 aa 773415 6770 04 eraq -2291,ic 000130 = 077777000043 000001000000 004514 aa 0 00460 3771 00 anaq pr0|304 = 077777000077 777777077077 004515 aa 000027 6000 04 tze 23,ic 004544 STATEMENT 1 ON LINE 1228 if (pvid ^= ""b & pvid ^= pvte.pvid) then Code = error_table_$pvid_not_found; 004516 aa 6 00407 2351 00 lda pr6|263 pvid 004517 aa 000007 6000 04 tze 7,ic 004526 004520 aa 6 00420 1151 20 cmpa pr6|272,* pvte.pvid 004521 aa 000005 6000 04 tze 5,ic 004526 004522 aa 6 00044 3701 20 epp4 pr6|36,* 004523 la 4 00014 2361 20 ldq pr4|12,* error_table_$pvid_not_found 004524 aa 2 00002 7561 20 stq pr2|2,* Code 004525 aa 000017 7100 04 tra 15,ic 004544 STATEMENT 1 ON LINE 1230 else if pvte.device_inoperative then Code = error_table_$vtoc_io_err; 004526 aa 6 00420 3735 20 epp7 pr6|272,* pvtep 004527 aa 7 00004 2351 00 lda pr7|4 pvte.device_inoperative 004530 aa 002000 3150 07 cana 1024,dl 004531 aa 000005 6000 04 tze 5,ic 004536 004532 aa 6 00044 3701 20 epp4 pr6|36,* 004533 la 4 00016 2361 20 ldq pr4|14,* error_table_$vtoc_io_err 004534 aa 2 00002 7561 20 stq pr2|2,* Code 004535 aa 000007 7100 04 tra 7,ic 004544 STATEMENT 1 ON LINE 1232 else if pvte.being_demounted2 then Code = error_table_$pvid_not_found; 004536 aa 7 00004 2351 00 lda pr7|4 pvte.being_demounted2 004537 aa 000100 3150 07 cana 64,dl 004540 aa 000004 6000 04 tze 4,ic 004544 004541 aa 6 00044 3701 20 epp4 pr6|36,* 004542 la 4 00014 2361 20 ldq pr4|12,* error_table_$pvid_not_found 004543 aa 2 00002 7561 20 stq pr2|2,* Code STATEMENT 1 ON LINE 1234 end; STATEMENT 1 ON LINE 1236 call lock$lock_fast (addr (vtoc_buffer.lock)); 004544 aa 6 00422 3735 20 epp7 pr6|274,* vtoc_buffer.lock 004545 aa 6 01274 6535 00 spri7 pr6|700 004546 aa 6 01274 3521 00 epp2 pr6|700 004547 aa 6 01300 2521 00 spri2 pr6|704 004550 aa 6 01276 6211 00 eax1 pr6|702 004551 aa 004000 4310 07 fld 2048,dl 004552 aa 6 00044 3701 20 epp4 pr6|36,* 004553 la 4 00042 3521 20 epp2 pr4|34,* lock$lock_fast 004554 aa 0 00623 7001 00 tsx0 pr0|403 call_ext_out STATEMENT 1 ON LINE 1239 end LOCK_CHECK; 004555 aa 6 00620 6101 00 rtcd pr6|400 END PROCEDURE LOCK_CHECK BEGIN PROCEDURE UNLOCK ENTRY TO UNLOCK STATEMENT 1 ON LINE 1242 UNLOCK: proc; 004556 aa 6 00626 6501 00 spri4 pr6|406 STATEMENT 1 ON LINE 1245 call lock$unlock_fast (addr (vtoc_buffer.lock)); 004557 aa 6 00422 3735 20 epp7 pr6|274,* vtoc_buffer.lock 004560 aa 6 01302 6535 00 spri7 pr6|706 004561 aa 6 01302 3521 00 epp2 pr6|706 004562 aa 6 01306 2521 00 spri2 pr6|710 004563 aa 6 01304 6211 00 eax1 pr6|708 004564 aa 004000 4310 07 fld 2048,dl 004565 aa 6 00044 3701 20 epp4 pr6|36,* 004566 la 4 00044 3521 20 epp2 pr4|36,* lock$unlock_fast 004567 aa 0 00623 7001 00 tsx0 pr0|403 call_ext_out STATEMENT 1 ON LINE 1248 end UNLOCK; 004570 aa 6 00626 6101 00 rtcd pr6|406 END PROCEDURE UNLOCK END PROCEDURE vtoc_man$get_vtoce ----------------------------------------------------------- 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