COMPILATION LISTING OF SEGMENT bjm_rollback Compiled by: Multics PL/I Compiler, Release 28e, of February 14, 1985 Compiled at: Honeywell Multics Op. - System M Compiled on: 05/08/85 1045.5 mst Wed Options: optimize map 1 /* *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Information Systems Inc., 1983 * 4* * * 5* *********************************************************** */ 6 7 /* DESCRIPTION: 8* 9* This program rolls back the before images created by any process 10* during the current transaction. 11* 12* The transaction ID, transaction index, and checkpoint number are 13* input parameters. p_code is an output parameter. Rollback should 14* only be called by transacton_manager_, and it is assumed the 15* transaction being rolled back was started in this process. An added 16* check is made if the process does not own the transaction to try to 17* adopt the transaction to roll it back. 18* 19* NOTE: checkpoints are not currently supported. 20**/ 21 22 /* HISTORY: 23*Written by M. Pandolf, 07/23/82. 24*Modified: 25*08/23/83 by M. Pandolf: to become bjm_rollback for operation in any proces. 26*08/15/82 by M. Pandolf: to use file_manager_ to manipulate data 27* management files. 28*11/11/82 by M. Pandolf: to not die when a before image cannot be rolled back. 29*12/15/82 by M. Pandolf: to not change txte.n_rec_written. 30*01/04/83 by M. Pandolf: to check TID from image, verify number of records 31* read, and keep track of instances of rollback failures. 32*01/24/83 by M. Pandolf: to log errors and to not use "addr (substr)". 33*02/14/83 by M. Pandolf: to get bj_txt_ptr before getting bj_txte_ptr. 34*03/02/83 by M. Pandolf: to use new txte protocol and new bj marks. 35*03/16/83 by M. Pandolf: to get report errors more intellegently. 36*04/29/83 by M. Pandolf: to add meters and report n_recs_rolledback. 37*05/12/83 by L. A. Newcomb: made TEMP MOD to special handle deleted protected 38* files until file_manager_ does so. 39*05/13/83 by L. A. Newcomb: Modified Rollback summary to be more accurate in 40* wording and easier to read. 41*12/06/83 by L. A. Newcomb: Renamed before_journal_manager_static_ to 42* bjm_data_ and moved some cells from dm_data_ to bjm_data_. 43*06/07/84 by Lee Baldwin: Fixed to call dm_error_$no_current_transaction 44* instead of $bj_no_txn, renamed dm_error_$bj_txt_version_bad 45* to $bj_bad_txt_version. 46*10/23/84 by M. Sharpe: to use addcharno; to check for et_$noinfo in the 47* "TEMP MOD" section of the code; cleanup dcls and format; to 48* use "call ERROR_RETURN (code)" technique; to set level to 49* current (lower) ring before calling file_manager and reset 50* it after returning; 51*10/29/84 by Matthew Pierret: Changed handling of FM_ROLLBACK_HANDLER record 52* to call file_manager_$undo instead of $rollback_handler and to 53* not attempt to open the file if no opening id is supplied in 54* in the bj_fm_handler_rec. 55*11/29/84 by M. Sharpe: to correct call to cu_$level_get. 56*12/10/84 by R. Michael Tague: Changed incl name to dm_daemon_sv_codes. 57*12/14/84 by Matthew C. Pierret: Removed FM_ROLLBACK_HANDLER code which 58* special cased bj_handler_rec.oid equal to ZERO and attempted to 59* get an oid if a non-null oid was supplied, but the process is 60* different from the owner process. We only want opening 61* information if this is the owner process. 62*01/07/84 by R. Michael Tague: changed error_table_$noinfo to $no_info. 63*01/14/85 by Lee A. Newcomb: Corrected my_ci_parts declaration in 64* RESTORE_BEFORE_IMAGE to have the must_be_zero component; removed 65* the unused before_image_array; declared builtin's used; fixed to 66* use dm_log_sv_codes.incl.pl1; corrected internal procs' variables 67* to use project naming standard; removed temporary modification 68* added before deletes of DM files were protected; changed to only 69* report rollback errors instead of a complete summary of the 70* rollback (to make it easier to read the log); changed to use init 71* clauses to initialize most automatic storage; fixed to have one 72* format comment instead of two conflicting ones. 73*01/16/85 by Lee A. Newcomb: Fixed to not set bjm_data_$bj_exit_err or the 74* cleanup handler until it is known =$bj_operation may be set. 75*03/05/85 by Steve Herbst: Replaced dm_log_ with dm_misc_util_$log. 76*03/19/85 by Steve Herbst: Fixed to initialize bjm_data_$bj_code to zero. 77*04/26/85 by Lee A. Newcomb: Fixed to always reset validation level after 78* setting it and to understand some errors are benign, such as when 79* a file was created, deleted in a rollback, but the rollback was 80* re-run due to an error in the first run. 81*05/02/85 by Lee A. Newcomb: Fixed to open DM files when a FM_ROLLBACK_HANDLER 82* record is found; this is required so recovery can find the file in 83* the UID-pathname table. 84**/ 85 /* format: style2,ll79,ind3,^indprocbody,ifthendo,ifthen,^indnoniterdo,^inddcls,dclind5,idind35,comcol80,linecom */ 86 87 bjm_rollback: 88 proc (p_tid, p_tix, p_checkpoint_no, p_code); 89 90 91 /* DECLARATIONS */ 92 93 /* Parameter */ 94 dcl ( 95 p_tid bit (36) aligned, /* transaction id */ 96 p_tix fixed bin, /* transaction index */ 97 p_checkpoint_no fixed bin (35), /* checkpoint to rollback to */ 98 p_code fixed bin (35) /* standard system status code */ 99 ) parameter; 100 101 /* Automatic */ 102 dcl ( 103 before_image_length fixed bin (24), /* bit length of before image */ 104 code fixed bin (35) init (0), /* local error code */ 105 current_ring fixed bin (3), 106 fm_oid bit (36) aligned init (NULL_ID), /* local copy of file manager OID */ 107 n_bi_unput fixed bin (35) init (0), 108 n_bytes_unput fixed bin (71) init (0), 109 n_get_oid_errors fixed bin (35) init (0), 110 n_handler_errors fixed bin (35) init (0), 111 n_rec_bytes fixed bin, /* size of current before image */ 112 n_rec_read fixed bin (35) init (0), /* # of records in BJ for this TID */ 113 n_unput_errors fixed bin (35) init (0), 114 number_of_ci_parts fixed bin (17) init (0), /* # of ci parts in before image record */ 115 prev_get_oid_code fixed bin (35) init (0), 116 prev_handler_code fixed bin (35) init (0), 117 prev_unput_code fixed bin (35) init (0), 118 records_used_mismatch bit (1) aligned init ("0"b), /* # records read ^= txte.n_rec_written */ 119 saved_level fixed bin, 120 this_rec_id bit (36) aligned, /* record currently rolling back */ 121 tid bit (36) aligned, /* copy of transaction id */ 122 tix fixed bin, /* copy of the transaction index */ 123 uns_ci_no fixed bin (24) unsigned /* for file_manager_ calling seq */ 124 ) automatic; 125 126 /* Builtin */ 127 dcl (addcharno, addr, fixed, null) builtin; 128 129 /* Condition */ 130 dcl cleanup condition; 131 132 /* Constant */ 133 dcl ( 134 ME char (32) init ("bjm_rollback"), 135 NULL_ID bit (36) aligned init ((36)"0"b) 136 ) internal static options (constant); 137 138 /* Entry */ 139 dcl ( 140 bj_adopt_txn$get_pf_oid entry (bit (36) aligned, 141 bit (36) aligned), 142 bj_cleanup_tables$handler entry (fixed bin (35)), 143 bj_storage_get entry (bit (36) aligned, 144 bit (36) aligned, ptr, fixed bin), 145 bj_txte_util$synchronize_txte_pste entry (ptr), 146 cu_$level_get entry (fixed bin), 147 cu_$level_set entry (fixed bin), 148 dm_misc_util_$log entry () options (variable), 149 file_manager_$undo entry (bit (36) aligned, 150 bit (36) aligned, ptr, fixed bin, 151 fixed bin (35)), 152 file_manager_$unput entry (bit (36) aligned, 153 uns fixed bin (24), ptr, 154 fixed bin (35)), 155 get_ring_ entry returns (fixed bin (3)) 156 ) external; 157 158 /* External */ 159 dcl ( 160 bjm_data_$bj_ppt_ptr pointer, 161 bjm_data_$bj_pst_ptr pointer, 162 bjm_data_$bj_rollback_buffer_ptr pointer, 163 dm_data_$bj_txt_ptr pointer, 164 ( 165 dm_error_$bj_bad_rec_count, 166 dm_error_$bj_bad_tid, 167 dm_error_$bj_bad_txt_version, 168 dm_error_$bj_incomplete_rollback, 169 dm_error_$bj_not_my_txn, 170 dm_error_$bj_recursive_invoc, 171 dm_error_$bj_rollback_bad_cp_no, 172 dm_error_$bj_txn_aborted, 173 dm_error_$bj_txn_committed, 174 dm_error_$bj_unexpected_aborted_mark, 175 dm_error_$bj_unexpected_committed_mark, 176 dm_error_$bj_unknown_record_type, 177 dm_error_$file_doesnt_exist, 178 dm_error_$file_was_deleted, 179 dm_error_$no_current_transaction, 180 error_table_$noentry 181 ) fixed bin (35) 182 ) external static; 183 184 /* Static */ 185 186 /* END OF DECLARATIONS */ 187 188 COPY_AND_INIT_PARAMETERS: 189 do; 190 tid = p_tid; 191 tix = p_tix; 192 p_code = 0; 193 end COPY_AND_INIT_PARAMETERS; 194 195 SETUP_ERROR_HANDLING: 196 do; 197 if bjm_data_$bj_operation ^= "" then do; 198 p_code = dm_error_$bj_recursive_invoc; /* do not use ERROR_RETURN so */ 199 goto MAIN_RETURN; /* CLEAN_UP will not be called */ 200 end; 201 202 call cu_$level_get (saved_level); 203 on cleanup call CLEAN_UP (); 204 205 bjm_data_$bj_operation = ME; 206 bjm_data_$bj_exit_err = NONLOCAL_ERROR_EXIT; 207 bjm_data_$bj_code = 0; 208 209 end SETUP_ERROR_HANDLING; 210 211 212 UPDATE_METERS: 213 bjm_data_$bj_pst_ptr -> bj_pst.meters.n_calls_rollback = 214 bjm_data_$bj_pst_ptr -> bj_pst.meters.n_calls_rollback + 1; 215 216 217 VALIDATE_PARAMETERS_AND_SYSTEM_TABLES: 218 do; 219 220 if tix < 1 | tix > dm_system_data_$max_n_transactions | tid = NULL_ID 221 then 222 call ERROR_RETURN (dm_error_$no_current_transaction); 223 224 bj_txt_ptr = dm_data_$bj_txt_ptr; 225 bj_txte_ptr = addr (bj_txt.entry (tix)); 226 227 if bj_txt.version ^= BJ_TXT_VERSION_1 then 228 call ERROR_RETURN (dm_error_$bj_bad_txt_version); 229 230 if bj_txte.tid ^= tid then 231 if bj_txte.tid = NULL_ID then 232 call ERROR_RETURN (dm_error_$no_current_transaction); 233 else call ERROR_RETURN (dm_error_$bj_bad_tid); 234 235 /* checkpoint numbers for version 1 will be 0 and -1 only */ 236 237 if p_checkpoint_no ^= 0 & p_checkpoint_no ^= -1 then 238 call ERROR_RETURN (dm_error_$bj_rollback_bad_cp_no); 239 240 end VALIDATE_PARAMETERS_AND_SYSTEM_TABLES; 241 242 SYNC_TXTE_WITH_PSTE: 243 do; 244 245 /* This might complete a pending operation. */ 246 247 call bj_txte_util$synchronize_txte_pste (bj_txte_ptr); 248 249 if bj_txte.tid = NULL_ID then 250 call ERROR_RETURN (dm_error_$no_current_transaction); 251 252 end SYNC_TXTE_WITH_PSTE; 253 254 255 IS_BJ_OPEN_IN_THIS_PROCESS: 256 if bj_txte.operator_info.process_id 257 ^= bjm_data_$bj_ppt_ptr -> bj_ppt.process_id then 258 call ERROR_RETURN (dm_error_$bj_not_my_txn); 259 260 261 /* set up bj_rec_hdr_ptr so we can get before images, and */ 262 /* current_ring so we do not have to keep calling get_ring_.*/ 263 264 bj_rec_hdr_ptr = bjm_data_$bj_rollback_buffer_ptr; 265 current_ring = get_ring_ (); 266 267 /* walk the transaction records backward, restoring before images */ 268 /* This loop assumes no checkpoint facility exists. */ 269 270 ROLLBACK_LOOP: 271 do this_rec_id = bj_txte.last_bj_rec_id 272 repeat (bj_rec_hdr.prev_rec_id) while (this_rec_id ^= NULL_ID); 273 274 call bj_storage_get (bj_txte.bj_oid, this_rec_id, bj_rec_hdr_ptr, 275 n_rec_bytes); /* get before image record */ 276 277 if bj_rec_hdr.tid ^= bj_txte.tid then /* validate TID threading in the */ 278 call ERROR_RETURN (dm_error_$bj_bad_tid); /* before images */ 279 280 n_rec_read = n_rec_read + 1; 281 282 283 CHECK_IMAGE_TYPE_AND_ROLLBACK: 284 do; 285 286 if bj_rec_hdr.type = COMMITTED | bj_rec_hdr.type = BEGIN_COMMIT then 287 if this_rec_id ^= bj_txte.last_bj_rec_id then 288 call ERROR_RETURN (dm_error_$bj_unexpected_committed_mark); 289 else call ERROR_RETURN (dm_error_$bj_txn_committed); 290 291 if bj_rec_hdr.type = ABORTED then 292 if this_rec_id ^= bj_txte.last_bj_rec_id then 293 call ERROR_RETURN (dm_error_$bj_unexpected_aborted_mark); 294 else call ERROR_RETURN (dm_error_$bj_txn_aborted); 295 296 if bj_rec_hdr.type = BEFORE_IMAGE then 297 DATA_TO_ROLLBACK: 298 do; 299 300 number_of_ci_parts = bj_before_image.n_parts; 301 before_image_length = bj_before_image.image_len; 302 303 RESTORE_BEFORE_IMAGE: 304 begin; 305 306 /* This begin block automatically allocates the correct amount of */ 307 /* storage for the ci_parts structure; the number of elements in the */ 308 /* parts array is determined by number_of_ci_parts, set in the main */ 309 /* procedure block. */ 310 311 dcl 1 my_ci_parts aligned, 312 2 number_of_parts fixed bin, 313 2 must_be_zero fixed bin init (0), 314 2 part dim (number_of_ci_parts) 315 like ci_parts.part; 316 dcl curr_image_pos fixed bin (24) init (0); 317 dcl this_part fixed bin; 318 319 my_ci_parts.number_of_parts = number_of_ci_parts; 320 321 do this_part = 1 to number_of_ci_parts; 322 323 my_ci_parts.part (this_part).offset_in_bytes = 324 bj_before_image.part (this_part).byte_offset; 325 my_ci_parts.part (this_part).length_in_bytes = 326 bj_before_image.part (this_part).byte_length; 327 328 my_ci_parts.part (this_part).local_ptr = 329 addcharno (addr (bj_before_image.image), curr_image_pos) 330 ; 331 332 curr_image_pos = 333 curr_image_pos 334 + bj_before_image.part (this_part).byte_length; 335 end; 336 337 if bj_txte.owner_info.process_id 338 ^= bjm_data_$bj_ppt_ptr -> bj_ppt.process_id then 339 call bj_adopt_txn$get_pf_oid (bj_before_image.fm_uid, fm_oid) 340 ; 341 else fm_oid = bj_before_image.fm_oid; 342 343 if fm_oid ^= NULL_ID then /* have file to work with */ 344 UNPUT_IMAGE: 345 do uns_ci_no = bj_before_image.ci_no; 346 call cu_$level_set ((current_ring)); 347 call file_manager_$unput (fm_oid, uns_ci_no, 348 addr (my_ci_parts), code); 349 call cu_$level_set (saved_level); 350 if code ^= 0 & code ^= dm_error_$file_doesnt_exist 351 & code ^= dm_error_$file_was_deleted then do; 352 n_unput_errors = n_unput_errors + 1; 353 if prev_unput_code ^= code then do; 354 call dm_misc_util_$log (ERROR_SV, code, ME, 355 "Error occurred ^i times consecutively calling unput", 356 n_unput_errors); 357 n_unput_errors = 0; 358 prev_unput_code = code; 359 end; 360 end; 361 else do; 362 n_bi_unput = n_bi_unput + 1; 363 n_bytes_unput = n_bytes_unput + before_image_length; 364 end; 365 end UNPUT_IMAGE; 366 else if bjm_data_$bj_code ^= error_table_$noentry then do; 367 n_get_oid_errors = n_get_oid_errors + 1; 368 if prev_get_oid_code ^= bjm_data_$bj_code then do; 369 call dm_misc_util_$log (ERROR_SV, bjm_data_$bj_code, ME, 370 "Error occurred ^i consecutive times while getting OID, file UID ^w", 371 n_get_oid_errors, bj_before_image.fm_uid); 372 n_get_oid_errors = 0; 373 prev_get_oid_code = bjm_data_$bj_code; 374 end; 375 end; 376 else ; /* OK, image of a now deleted file */ 377 378 bjm_data_$bj_code = 0; /* reset for the next round */ 379 end RESTORE_BEFORE_IMAGE; 380 381 end DATA_TO_ROLLBACK; 382 383 else if bj_rec_hdr.type = ROLLED_BACK then 384 ; 385 386 else if bj_rec_hdr.type = FM_POSTCOMMIT_HANDLER then 387 ; 388 389 else if bj_rec_hdr.type = FM_ROLLBACK_HANDLER then 390 ACTION_TO_ROLLBACK: 391 do; 392 393 if bj_txte.owner_info.process_id 394 ^= bjm_data_$bj_ppt_ptr -> bj_ppt.process_id then 395 call bj_adopt_txn$get_pf_oid (bj_fm_handler_rec.fm_uid, fm_oid); 396 else fm_oid = bj_fm_handler_rec.fm_oid; 397 398 if fm_oid ^= NULL_ID then /* have file to work with */ 399 RUN_FM_ROLLBACK_HANDLER: 400 do; 401 call cu_$level_set ((current_ring)); 402 call file_manager_$undo (bj_fm_handler_rec.fm_uid, fm_oid, 403 addr (bj_fm_handler_rec.info_bytes), 404 bj_fm_handler_rec.info_len, code); 405 call cu_$level_set (saved_level); 406 if code ^= 0 then do; 407 n_handler_errors = n_handler_errors + 1; 408 if prev_handler_code ^= code then do; 409 call dm_misc_util_$log (ERROR_SV, code, ME, 410 "Error occurred ^i consecutive times while calling rollback handler.", 411 n_handler_errors); 412 n_handler_errors = 0; 413 prev_handler_code = code; 414 end; 415 end; 416 end RUN_FM_ROLLBACK_HANDLER; 417 else if bjm_data_$bj_code ^= error_table_$noentry then do; 418 n_get_oid_errors = n_get_oid_errors + 1; 419 if prev_get_oid_code ^= bjm_data_$bj_code then do; 420 call dm_misc_util_$log (ERROR_SV, bjm_data_$bj_code, ME, 421 "Error occurred ^i consecutive times while getting OID, file UID ^w", 422 n_get_oid_errors, bj_before_image.fm_uid); 423 n_get_oid_errors = 0; 424 prev_get_oid_code = bjm_data_$bj_code; 425 end; 426 end; 427 else ; /* OK, handler for a now deleted file */ 428 429 bjm_data_$bj_code = 0; /* reset for the next round */ 430 431 end ACTION_TO_ROLLBACK; 432 433 434 else call ERROR_RETURN (dm_error_$bj_unknown_record_type); /* unknown or unsupported BJ rec type */ 435 436 end CHECK_IMAGE_TYPE_AND_ROLLBACK; 437 438 end ROLLBACK_LOOP; 439 440 bj_txte.curr_checkpoint_rec_id = this_rec_id; /* change when checkpoints implemented */ 441 442 CHECK_FOR_ERRORS: 443 do; 444 records_used_mismatch = (n_rec_read ^= bj_txte.n_rec_written); 445 446 if records_used_mismatch then 447 bjm_data_$bj_code = dm_error_$bj_bad_rec_count; 448 else if n_get_oid_errors + n_unput_errors + n_handler_errors > 0 then 449 bjm_data_$bj_code = dm_error_$bj_incomplete_rollback; 450 451 if bjm_data_$bj_code ^= 0 then 452 LOG_ERROR_SUMMARY: 453 do; 454 call dm_misc_util_$log (LOG_SV, bjm_data_$bj_code, ME, 455 "TID ^d^[;^2x^d images read vs. ^d written^;^2s^]^[;^2x^d unput errors^;^s^]^[;^2x^d OID errors^;^s^]^[;^2x^d handler errors.^]", 456 fixed (tid), records_used_mismatch, n_rec_read, 457 bj_txte.n_rec_written, (n_unput_errors > 0), n_unput_errors, 458 (n_get_oid_errors > 0), n_get_oid_errors, (n_handler_errors > 0), 459 n_handler_errors); 460 call ERROR_RETURN (bjm_data_$bj_code); 461 462 end LOG_ERROR_SUMMARY; 463 464 end CHECK_FOR_ERRORS; 465 466 call FINISH (); 467 468 MAIN_RETURN: 469 return; 470 471 472 /* end bjm_rollback; */ 473 474 NONLOCAL_ERROR_EXIT: 475 call ERROR_RETURN (bjm_data_$bj_code); 476 477 478 479 480 ERROR_RETURN: 481 proc (er_p_code); 482 483 dcl er_p_code fixed bin (35) parameter; 484 485 call CLEAN_UP (); 486 p_code = er_p_code; 487 goto MAIN_RETURN; 488 489 end ERROR_RETURN; 490 491 492 493 CLEAN_UP: 494 procedure (); 495 496 dcl cu_code fixed bin (35) automatic; 497 498 call bj_cleanup_tables$handler (cu_code); 499 500 call FINISH (); 501 502 return; 503 504 end CLEAN_UP; 505 506 507 508 509 FINISH: 510 proc (); 511 512 /* operations we must do no matter how we exit bjm_rollback */ 513 514 bjm_data_$bj_operation = ""; 515 bjm_data_$bj_exit_err = bjm_data_$bj_default_error_label; 516 call cu_$level_set (saved_level); 517 518 return; 519 520 end FINISH; 521 1 1 /* BEGIN INCLUDE FILE dm_bj_global_error_info.incl.pl1 */ 1 2 1 3 /* Originally found in before journal primitives written by */ 1 4 /* A. Bensoussan. Gathered into an include file for ease of use. */ 1 5 /* See the bjm_data_.alm source for details of use. */ 1 6 1 7 /* HISTORY: 1 8*Written by Mike Pandolf, 07/14/82. 1 9*Modified: 1 10*12/06/83 by L. A. Newcomb: Renamed before_journal_manager_static_ to 1 11* bjm_data_ and moved some cells from dm_data_ to bjm_data_. 1 12**/ 1 13 1 14 /* format: style4,indattr,ifthenstmt,ifthen,^indcomtxt,idind33 */ 1 15 dcl bjm_data_$bj_operation char (32) external static; 1 16 1 17 dcl bjm_data_$bj_exit_err label variable external; 1 18 1 19 dcl bjm_data_$bj_code fixed bin (35) external; 1 20 1 21 dcl bjm_data_$bj_default_error_label label external static; 1 22 1 23 1 24 /* END INCLUDE FILE dm_bj_global_error_info.incl.pl1 */ 522 523 2 1 /* BEGIN INCLUDE FILE: dm_bj_ppt.incl.pl1 */ 2 2 /* 2 3*Layout of the per-process before journal table and entries. 2 4* 2 5*Written by Andre Bensoussan June/July 1982 2 6*Modified: 2 7*09/29/82 by Lee A. Newcomb: To make two default oid cells, pad ppte's 2 8* to account for all used space, and use dm_system_data_ for 2 9* determining dimension of bj_ppt.e. 2 10**/ 2 11 /* format: style4,indattr,idind33,^indcomtxt */ 2 12 2 13 dcl BJ_PPT_VERSION_1 fixed bin int static options (constant) init (1); 2 14 dcl BJ_PPTE_VERSION_1 fixed bin int static options (constant) init (1); 2 15 2 16 dcl bj_ppt_ptr ptr; 2 17 2 18 dcl 1 bj_ppt based (bj_ppt_ptr) aligned, 2 19 2 version fixed bin, 2 20 2 max_n_entries fixed bin, /* should be = dm_system_data_$bj_max_n_journals */ 2 21 2 n_entries_used fixed bin, /* # of BJs open in this process */ 2 22 2 highest_ix_used fixed bin, /* max. # of BJs ever opened in this process */ 2 23 2 default_bj, /* for selecting a txn def. BJ by write_before_mark protocol */ 2 24 3 user_set_oid bit (36), /* explicit user setting via $set_default_bj */ 2 25 3 last_opened_oid bit (36), /* implicit if no user setting, set by open and close */ 2 26 /* if both zero, use system default BJ */ 2 27 2 process_id bit (36), /* so we don't have to keep calling for it. */ 2 28 2 process_ix fixed bin, /* index into bj_check_in_table */ 2 29 2 mod_list_area (100) fixed bin (35), /* for keeping track of ppt mods, not curr. used */ 2 30 2 31 2 e dim (dm_system_data_$bj_max_n_journals refer (bj_ppt.max_n_entries)) 2 32 like bj_ppte; /* an entry for each BJ open in this process */ 2 33 /* always make sure bj_ppt.e is on a even word boundary */ 2 34 2 35 /* now specify the format of each per-process BJ table entry */ 2 36 2 37 dcl bj_ppte_ptr ptr; 2 38 2 39 dcl 1 bj_ppte based (bj_ppte_ptr) aligned, 2 40 2 version fixed bin, /* better be the same for all entries in a bj_ppt */ 2 41 2 bj_uid bit (36), /* UID of the BJ page file */ 2 42 2 pf_oid bit (36), /* OID of the BJ page file */ 2 43 2 n_opening fixed bin, /* how many openings this process has done for this BJ */ 2 44 2 bj_pste_ptr ptr, /* "link" to per-system BJ table entry */ 2 45 2 open_time fixed bin (71); /* used to fill in bj_ppt.default_bj.last_opened_oid */ 2 46 /* if the last opened BJ is closed */ 2 47 2 48 /* END INCLUDE FILE: bj_ppt.incl.pl1 */ 524 525 3 1 /* BEGIN INCLUDE FILE: dm_bj_pst.incl.pl1 */ 3 2 /* 3 3*Layout of the before journal per-system table header and BJ table entries. 3 4* 3 5*Written by Andre Bensoussan 06-15-1982 3 6*Modified: 3 7*09/29/82 by Lee A. Newcomb: To use dm_system_data_ for determining 3 8* dimension of bj_pst.e and force bj_pst.mod_list_area and 3 9* bj_pst.e to even word boundaries. 3 10*04/27/82 by M. Pandolf: To add meter space by cutting away from mod_list_area. 3 11**/ 3 12 /* format: style4,indattr,idind33,^indcomtxt */ 3 13 3 14 dcl BJ_PST_VERSION_1 fixed bin internal static options (constant) init (1); 3 15 3 16 dcl bj_pst_ptr ptr; 3 17 3 18 dcl 1 bj_pst based (bj_pst_ptr) aligned, 3 19 2 version fixed bin, 3 20 2 pad1 bit (36), 3 21 2 lock, 3 22 3 pid bit (36), /* process_id holding lock */ 3 23 3 event bit (36), 3 24 2 time_of_bootload fixed bin (71), /* for ease of access */ 3 25 2 max_n_entries fixed bin, /* as determined from dm_system_data_$bj_max_n_journals */ 3 26 2 n_entries_used fixed bin, /* current # of BJs open on the system */ 3 27 2 highest_ix_used fixed bin, /* max. # of BJs that has ever been open of the system */ 3 28 2 pn_table_offset fixed bin (18) uns, /* relative offset of bj_pn_table in bj_pst seg. */ 3 29 2 check_in_table_offset fixed bin (18) uns, /* ditto for bj_check_in_table */ 3 30 2 buffer_table_offset fixed bin (18) uns, /* ditto for where our BJ buffers are located */ 3 31 2 max_n_buffers fixed bin, /* must be <= to max_n_entries */ 3 32 2 pad2 bit (36), /* force next on even word boundary */ 3 33 2 meters, /* dim (50) fixed bin (71), */ 3 34 3 n_calls_begin_txn fixed bin (71), /* meter (1) */ 3 35 3 n_calls_before_image fixed bin (71), /* meter (2) */ 3 36 3 n_calls_abort fixed bin (71), /* meter (3) */ 3 37 3 n_calls_commit fixed bin (71), /* meter (4) */ 3 38 3 n_calls_rb_mark fixed bin (71), /* meter (5) */ 3 39 3 n_calls_fm_pc_mark fixed bin (71), /* meter (6) */ 3 40 3 n_calls_fm_rbh fixed bin (71), /* meter (7) */ 3 41 3 n_calls_rollback fixed bin (71), /* meter (8) */ 3 42 3 meter dim (9:50) fixed bin (71), /* meter (9) - meter (50) */ 3 43 2 mod_list_area (100) fixed bin (35), /* for keeping track of pst mods */ 3 44 3 45 2 e dim (dm_system_data_$bj_max_n_journals refer (bj_pst.max_n_entries)) 3 46 like bj_pste; /* per system BJ table entries */ 3 47 3 48 3 49 /* END INCLUDE FILE: dm_bj_pst.incl.pl1 */ 526 527 4 1 /* BEGIN INCLUDE FILE: dm_bj_pste.incl.pl1 */ 4 2 4 3 /* DESCRIPTION 4 4* 4 5* Layout of the per-system before journal table 4 6* entries. This structure is used to contain information 4 7* about a before journal active in a running DMS. It is 4 8* currently also used as the header of a before journal 4 9* (see dm_bj_header.incl.pl1). Version changes to this 4 10* structure require either automatic conversion to be set 4 11* up, or users to be told to re-create their journals. 4 12* 4 13* Currently, a bj_pste must be 64 words long; any 4 14* future changes must at least make sure a bj_pste is an 4 15* even # of words for the alignment of some of its 4 16* elements. 4 17**/ 4 18 4 19 /* HISTORY: 4 20* 4 21*Written by Andre Bensoussan, 06/15/82. 4 22*Modified: 4 23*08/16/82 by Andre Bensoussan: to add stamp_for_last_ci_put. 4 24*09/29/82 by Lee A. Newcomb: to fix BJ_PSTE_VERSION_1 and fix some 4 25* alignments. 4 26*11/01/82 by Andre Bensoussan: to add "stamp_for_last_ci_on_disk", 4 27* "n_bi_still_unsafe", and "n_bi_being_saved". 4 28*02/08/83 by M. Pandolf: to add append_state structure. 4 29*03/19/83 by L. A. Newcomb: to fix up some alignments and spelling problems. 4 30*04/27/83 by M. Pandolf: to add meter structure at end. 4 31*02/11/85 by Lee A. Newcomb: Fixed version constant name to agree with its 4 32* value of 2; fixed references to page files or PF's; fixed format 4 33* of description and history sections. 4 34*03/07/85 by Lee A. Newcomb: Changed a pad word to be txn_storage_limit and 4 35* expanded on the description for future generations (no 4 36* version was made). 4 37*03/27/85 by Lee A. Newcomb: Changed one of the unused meters to 4 38* n_txn_storage_limit_hits (again without a version change). 4 39**/ 4 40 /* format: style2,ll79,ind3,^indprocbody,ifthendo,ifthen,^indnoniterdo,^inddcls,dclind5,idind35,linecom */ 4 41 4 42 dcl BJ_PSTE_VERSION_2 fixed bin internal static 4 43 options (constant) init (2); 4 44 4 45 dcl bj_pste_ptr ptr; 4 46 4 47 /* MUST HAVE EVEN NUMBER OR WORDS */ 4 48 dcl 1 bj_pste based (bj_pste_ptr) aligned, 4 49 2 version fixed bin, 4 50 2 bj_ix fixed bin, /* Index of this entry in bj_pst table */ 4 51 2 lock aligned, 4 52 3 pid bit (36), /* process ID of lock owner */ 4 53 3 event bit (36), 4 54 2 bj_uid bit (36), /* UID of BJ file */ 4 55 2 ci_size fixed bin, /* In number of bytes */ 4 56 2 max_size fixed bin, /* In number of ci's */ 4 57 2 active bit (1) aligned, /* 0 means journal not being used */ 4 58 2 time_header_updated fixed bin (71), 4 59 2 earliest_meaningful_time fixed bin (71), /* time stamp on first valid control interval */ 4 60 2 update_frequency fixed bin, /* Not used yet, probably will be how many CIs */ 4 61 2 last_rec_id bit (36), /* rec id of the last logical record in journal */ 4 62 2 n_processes fixed bin, /* Number of processes using this BJ */ 4 63 2 n_txn fixed bin, /* Number of txn in progress using this BJ */ 4 64 2 last_ci_info aligned, 4 65 3 last_ci_buffered fixed bin (24) uns, /* Last ci encached in the buffer */ 4 66 3 last_ci_put fixed bin (24) uns, /* Last ci put in the BJ */ 4 67 3 last_ci_flushed fixed bin (24) uns, /* Last ci for which flush initiated */ 4 68 3 last_ci_on_disk fixed bin (24) uns, /* Last ci of that portion of the BJ known to be ... */ 4 69 /* .. completely on disk */ 4 70 3 stamp_for_last_ci_put fixed bin (71), /* Time stamp associated with the last ci put in the BJ */ 4 71 3 stamp_for_last_ci_on_disk fixed bin (71), /* Time stamp associated with the last ci on disk in the BJ */ 4 72 2 n_bi_still_unsafe fixed bin, /* number of bi's still not on disk */ 4 73 2 n_bi_being_saved fixed bin, /* number of bi's for which flush initiated */ 4 74 2 buffer_offset fixed bin (18) uns, /* Now allocated in the bj_pst segment */ 4 75 2 txn_storage_limit fixed bin (35), /* # of bytes a single txn may write */ 4 76 2 cl aligned, /* Circular List */ 4 77 3 origin_ci fixed bin (24) uns, 4 78 3 lowest_ci fixed bin (24) uns, 4 79 3 highest_ci fixed bin (24) uns, 4 80 3 number_ci fixed bin (24) uns, 4 81 2 append_state aligned, 4 82 3 current_operation char (4), /* equal to "appe" when append in progress */ 4 83 3 pending_n_txn fixed bin, /* n_txn value when append done */ 4 84 3 pending_last_rec_id bit (36), /* last_rec_id value after append done */ 4 85 3 pending_last_element_id bit (36), /* last element id after append done */ 4 86 3 txte_rec_id_relp bit (18), /* rel ptr into seg containing TXT for txte.pending_bj_rec_id */ 4 87 2 pad_to_even_word1 bit (36) aligned, 4 88 2 meters aligned, /* dim (10) fixed bin (71), */ 4 89 3 n_bi_written fixed bin (71), /* meter (1) */ 4 90 3 n_bi_bytes_written fixed bin (71), /* meter (2) */ 4 91 3 n_journal_full fixed bin (71), /* meter (3) */ 4 92 3 n_successful_recycles fixed bin (71), /* meter (4) */ 4 93 3 n_ci_recycled fixed bin (71), /* meter (5) */ 4 94 3 n_txn_started fixed bin (71), /* meter (6) */ 4 95 3 n_non_null_txn fixed bin (71), /* meter (7) */ 4 96 3 n_txn_storage_limit_hits fixed bin (71), /* meter (8) */ 4 97 3 meter (9:10) fixed bin (71), 4 98 /* meter (9) - meter (10) */ 4 99 2 pad_to_64_words (6) bit (36); /* 64 is even (see below) */ 4 100 4 101 4 102 /* END INCLUDE FILE: dm_bj_pste.incl.pl1 */ 528 529 5 1 /* format: style4,indattr,idind33,^indcomtxt */ 5 2 5 3 /* BEGIN INCLUDE FILE: dm_bj_records.incl.pl1 */ 5 4 /* 5 5*Before journal records - images and marks 5 6* 5 7*Designed by Andre Bensoussan 02/03/82 5 8*Written by Mike Pandolf 07/07/82 5 9*Modified: 5 10*10/01/82 by Lee A. Newcomb: To add n_txn to all records so rollback after 5 11* crash knows how many transactions were active at crash time. 5 12*15feb83 by M. Pandolf: To add fm_handler_rec for both rollback and postcommit 5 13* handler used exclusively by file_manager_, add BEGIN_COMMIT mark, 5 14* and add PREFORM_BEGIN mark (for housekeeping, never written). 5 15*05apr83 by M. Pandolf to add BEGIN_MARK for bj_txte.last_completed_operation 5 16**/ 5 17 5 18 5 19 dcl bj_rec_hdr_ptr ptr; /* pointer to various bj records */ 5 20 5 21 dcl 1 bj_rec_hdr aligned based (bj_rec_hdr_ptr), 5 22 2 type char (4), /* see types below */ 5 23 2 tid bit (36), /* transaction id for this record */ 5 24 2 process_id bit (36), /* of process initiating this transaction */ 5 25 2 prev_rec_id bit (36), /* of record in this transaction */ 5 26 2 prev_rec_byte_size fixed bin (24), /* of record in this transaction */ 5 27 2 tx_rec_no fixed bin (35), /* number of this record in transaction list */ 5 28 2 n_txn fixed bin; /* number of active txn's in the BJ containing this txn */ 5 29 /* with at least one record written in the BJ. This is */ 5 30 /* used for rollback after crash */ 5 31 /* N.B. commits and abort marks do not count themselves */ 5 32 5 33 /* before journal records for the various record types */ 5 34 5 35 dcl 1 bj_committed_rec aligned like bj_rec_hdr based (bj_rec_hdr_ptr); 5 36 5 37 dcl 1 bj_begin_commit_rec aligned like bj_rec_hdr based (bj_rec_hdr_ptr); 5 38 5 39 dcl 1 bj_aborted_rec aligned like bj_rec_hdr based (bj_rec_hdr_ptr); 5 40 5 41 dcl 1 bj_rolled_back_rec aligned based (bj_rec_hdr_ptr), 5 42 2 header like bj_rec_hdr, 5 43 2 checkpoint_no fixed bin (35), 5 44 2 last_rolled_back_rec_id bit (36); 5 45 5 46 dcl 1 bj_rollback_handler_rec aligned based (bj_rec_hdr_ptr), 5 47 2 header like bj_rec_hdr, 5 48 2 name_len fixed bin (24), 5 49 2 info_len fixed bin (24), 5 50 2 proc_name char (bj_rollback_name_len refer (bj_rollback_handler_rec.name_len)), 5 51 2 info_bits bit (bj_rollback_info_len refer (bj_rollback_handler_rec.info_len)); 5 52 5 53 /* dm_bj_records.incl.pl1 CONTINUED NEXT PAGE */ 5 54 5 55 /* dm_bj_records.incl.pl1 CONTINUATION FROM PREVIOUS PAGE */ 5 56 5 57 dcl 1 bj_before_image aligned based (bj_rec_hdr_ptr), 5 58 2 header like bj_rec_hdr, 5 59 2 fm_uid bit (36), 5 60 2 fm_oid bit (36), 5 61 2 ci_no fixed bin (35), 5 62 2 n_parts fixed bin (17), 5 63 2 image_len fixed bin (24), 5 64 2 part dim (bj_before_image_n_parts refer (bj_before_image.n_parts)), 5 65 3 byte_offset fixed bin (24), 5 66 3 byte_length fixed bin (24), 5 67 2 image char (bj_before_image_len refer (bj_before_image.image_len)); 5 68 5 69 dcl 1 bj_fm_handler_rec aligned based (bj_rec_hdr_ptr), 5 70 2 header like bj_rec_hdr, 5 71 2 fm_uid bit (36), 5 72 2 fm_oid bit (36), 5 73 2 prev_fm_handler_rec_id bit (36), 5 74 2 info_len fixed bin, 5 75 2 info_bytes char (bj_fm_handler_info_len refer (bj_fm_handler_rec.info_len)); 5 76 5 77 /* extent definers */ 5 78 5 79 dcl bj_rollback_name_len fixed bin (24); 5 80 dcl bj_rollback_info_len fixed bin (24); 5 81 dcl bj_before_image_n_parts fixed bin; 5 82 dcl bj_before_image_len fixed bin (24); 5 83 dcl bj_fm_handler_info_len fixed bin (24); 5 84 5 85 /* record type identifiers */ 5 86 5 87 dcl 1 BJ_RECORD_TYPE int static options (constant) aligned, 5 88 ( 2 BEGIN_COMMIT init ("bcom"), 5 89 2 PERFORM_COMMIT init ("pcom"), 5 90 2 COMMITTED init ("comm"), 5 91 2 ABORTED init ("abor"), 5 92 2 ROLLED_BACK init ("roll"), 5 93 2 HANDLER init ("hand"), 5 94 2 FM_ROLLBACK_HANDLER init ("fmrb"), 5 95 2 FM_POSTCOMMIT_HANDLER init ("fmpc"), 5 96 2 BEGIN_MARK init ("begi"), 5 97 2 BEFORE_IMAGE init ("befo")) char (4); 5 98 5 99 /* END INCLUDE FILE: dm_bj_records.incl.pl1 */ 530 531 6 1 /* BEGIN dm_bj_static.incl.pl1 */ 6 2 /* 6 3*Modified: 6 4*10/04/82 by Lee A. Newcomb: To change from internal static to external 6 5* static. 6 6**/ 6 7 6 8 dcl dm_system_data_$bj_max_n_journals fixed bin ext static; 6 9 dcl dm_system_data_$bj_max_n_processes fixed bin ext static; 6 10 dcl dm_system_data_$max_n_transactions fixed bin ext static; 6 11 6 12 /* END dm_bj_static.incl.pl1 */ 6 13 532 533 7 1 /* BEGIN INCLUDE FILE: dm_bj_txt.incl.pl1 */ 7 2 /* 7 3*dm_bj_txt - before journal per-system transaction table. 7 4* 7 5*Designed by A. Bensoussan 7 6*Written by M. Pandolf 06/02/82 7 7*Modified: 7 8*10/01/82 by Lee A. Newcomb: To use dm_system_data_ for dimension attributes 7 9* and specify alignment on level one. 7 10*08feb83 by M. Pandolf: To restructure the TXT and TXTE. 7 11*30mar83 by M. Pandolf: To add last_completed_operation and ok_to_write. 7 12**/ 7 13 /* format: style4,indattr,idind33,^indcomtxt */ 7 14 7 15 dcl BJ_TXT_VERSION_1 fixed bin int static options (constant) init (1); 7 16 7 17 dcl bj_txt_ptr ptr; /* pointer to transaction table */ 7 18 dcl bj_txte_ptr ptr; /* pointer to transaction table element */ 7 19 7 20 dcl 1 bj_txt aligned based (bj_txt_ptr), /* transaction table */ 7 21 2 version fixed bin, /* should be BJ_TXT_VERSION_1 */ 7 22 2 max_n_entries fixed bin, 7 23 2 n_entries_used fixed bin, /* assumed contiguous */ 7 24 2 pad_header_to_32_words bit (36) dim (29), /* to mod32 align bj_txt.entry */ 7 25 2 entry dim (dm_system_data_$max_n_transactions refer (bj_txt.max_n_entries)) 7 26 like bj_txte; 7 27 7 28 dcl 1 bj_txte based (bj_txte_ptr) aligned, /* single entry, must be mod32 word aligned */ 7 29 2 tid bit (36), /* transaction id if this or last txn */ 7 30 2 bj_uid bit (36), /* UID of before journal chosen at begin mark */ 7 31 2 entry_state aligned, 7 32 3 last_completed_operation char (4), /* to prevent multiple abort and commit */ 7 33 3 ok_to_write bit (1), /* basically validates using this entry */ 7 34 2 owner_info aligned, /* info about creation of txte */ 7 35 3 process_id bit (36), /* of process that wrote begin mark */ 7 36 2 operator_info aligned, /* of process that is currently using this txte */ 7 37 3 process_id bit (36), /* of process that shall write subsequent marks */ 7 38 3 ppte_ptr ptr, /* pointer to PPTE for this transaction */ 7 39 3 bj_oid bit (36), /* before journal opening ID for operator */ 7 40 2 records_info aligned, /* grouped to be saved and restored as one unit */ 7 41 3 curr_checkpoint_rec_id bit (36), /* ident of checkpoint record if doing a rollback, */ 7 42 /* else, this value must be zero. */ 7 43 3 first_bj_rec_id bit (36), /* ident of first mark for this transaction */ 7 44 3 last_bj_rec_id bit (36), /* ident of current mark for this transaction */ 7 45 3 n_rec_written fixed bin (35), /* count of marks written for this transaction */ 7 46 3 n_bytes_written fixed bin (35), /* count of total bytes written to journal */ 7 47 3 last_fm_postcommit_handler_rec_id 7 48 bit (36), /* ident of last special handler in list */ 7 49 2 append_state aligned, /* the first two members define the state of this */ 7 50 3 current_operation char (4), /* transaction and its interaction with bj_storage: */ 7 51 3 pending_bj_rec_id bit (36), /* operation rec_id state */ 7 52 /* *null* XXX quiesed */ 7 53 /* ^null "0"b write pending */ 7 54 /* ^null ^"0"b write completed, needs flushing */ 7 55 /* */ 7 56 3 pending_n_rec_written fixed bin (35), /* copy to n_rec_written before flush */ 7 57 3 pending_n_bytes_written fixed bin (35), /* copy to n_bytes_written before flush */ 7 58 2 pad_entry_to_32_words bit (36) dim (13); /* make any part of table 32 words long */ 7 59 7 60 /* END INCLUDE FILE: dm_bj_txt_ptr */ 534 535 8 1 /* BEGIN INCLUDE FILE: dm_ci_parts.incl.pl1 */ 8 2 8 3 /* DESCRIPTION: 8 4* 8 5* This include file contains the ci_parts structure. This structure 8 6* is used across the file_manager_ interface to specify the parts of a 8 7* control interval to get or put. If the number_of parts is equal to 0, 8 8* modules which take ci_parts interpret this case to mean to do everything 8 9* except the actual requested operation, i.e., lock the control interval 8 10* but don't get anything. offset_in_bytes is the 0-originned offset in 8 11* bytes from the beginning of the addressable portion of the control interval. 8 12* An offset_in_bytes which is in the addressable portion is in error. 8 13* Likewise, if offset_in_bytes + length_in_bytes is outside of the addressable 8 14* portion, it is in error. 8 15**/ 8 16 8 17 /* HISTORY: 8 18*Written by Matthew Pierret, 01/28/82. 8 19* (01/28/82 Andre Bensoussan, Design.) 8 20*Modified: 8 21*11/07/84 by Matthew Pierret: To add must_be_zero, initial attributes on 8 22* automatic storge. 8 23**/ 8 24 8 25 /* format: style2,ind3 */ 8 26 8 27 dcl 1 ci_parts aligned based (ci_parts_ptr), 8 28 2 number_of_parts fixed bin (17), 8 29 2 must_be_zero fixed bin, 8 30 2 part (cip_number_of_parts refer (ci_parts.number_of_parts)), 8 31 3 offset_in_bytes fixed bin (17), 8 32 3 length_in_bytes fixed bin (17), 8 33 3 local_ptr ptr; 8 34 8 35 dcl ci_parts_ptr ptr init (null ()); 8 36 dcl cip_number_of_parts fixed bin (17) init (0); 8 37 8 38 8 39 /* BEGIN INCLUDE FILE: dm_ci_parts.incl.pl1 */ 536 537 9 1 /* BEGIN INCLUDE FILE dm_log_sv_codes.incl.pl1 */ 9 2 9 3 /* format: ^indcom */ 9 4 9 5 /* DESCRIPTION: 9 6* These are the severity codes used by the dms daemon when calling its logger. 9 7* The severity is ranked thusly: 9 8* 9 9* severity log write situation 9 10* -------- --- ----- --------- 9 11* 0 no yes standard output, query, etc. 9 12* 1 yes yes fatal error, terminate dms daemon. 9 13* 2 yes yes nonfatal error. 9 14* 3 yes yes informative message. 9 15* 4 yes no log information only. 9 16**/ 9 17 9 18 /* HISTORY: 9 19* 9 20*Written by M. Pandolf, 10/06/82. 9 21*Modified: 9 22*12/10/84 by R. Michael Tague: Rename and reformat description/history. 9 23*01/13/85 by Lee A. Newcomb: Renamed to dm_log_sv_codes from 9 24* dm_daemon_sv_codes as the severity codes for the DM log are not 9 25* restrained to the DM Daemon's use. 9 26*01/24/85 by Lee A. Newcomb: Fixed to say dm_log_sv_codes.incl.pl1 in the 9 27* BEGIN and END INCLUDE comments, instead of dm_daemon_sv_codes.==. 9 28**/ 9 29 9 30 /* format: style5 */ 9 31 9 32 dcl (PRINT_SV, QUERY_SV) fixed bin internal static 9 33 options (constant) init (0); 9 34 dcl (CRASH_SV, FATAL_SV) fixed bin internal static 9 35 options (constant) init (1); 9 36 dcl ERROR_SV fixed bin internal static 9 37 options (constant) init (2); 9 38 dcl INFORM_SV fixed bin internal static 9 39 options (constant) init (3); 9 40 dcl LOG_SV fixed bin internal static 9 41 options (constant) init (4); 9 42 9 43 /* END INCLUDE FILE dm_log_sv_codes.incl.pl1 */ 538 539 540 541 end bjm_rollback; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 05/08/85 1036.7 bjm_rollback.pl1 >special_ldd>online>dm.5.5-05/08/85>bjm_rollback.pl1 522 1 01/07/85 0857.3 dm_bj_global_error_info.incl.pl1 >ldd>include>dm_bj_global_error_info.incl.pl1 524 2 01/07/85 0857.6 dm_bj_ppt.incl.pl1 >ldd>include>dm_bj_ppt.incl.pl1 526 3 01/07/85 0857.7 dm_bj_pst.incl.pl1 >ldd>include>dm_bj_pst.incl.pl1 528 4 04/05/85 0924.4 dm_bj_pste.incl.pl1 >ldd>include>dm_bj_pste.incl.pl1 530 5 01/07/85 0857.7 dm_bj_records.incl.pl1 >ldd>include>dm_bj_records.incl.pl1 532 6 01/07/85 0857.8 dm_bj_static.incl.pl1 >ldd>include>dm_bj_static.incl.pl1 534 7 01/07/85 0858.0 dm_bj_txt.incl.pl1 >ldd>include>dm_bj_txt.incl.pl1 536 8 01/07/85 0900.8 dm_ci_parts.incl.pl1 >ldd>include>dm_ci_parts.incl.pl1 538 9 03/06/85 1031.1 dm_log_sv_codes.incl.pl1 >ldd>include>dm_log_sv_codes.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. ABORTED 3 000000 constant char(4) initial level 2 dcl 5-87 ref 291 BEFORE_IMAGE 11 000000 constant char(4) initial level 2 dcl 5-87 ref 296 BEGIN_COMMIT 000000 constant char(4) initial level 2 dcl 5-87 ref 286 BJ_RECORD_TYPE 000000 constant structure level 1 dcl 5-87 BJ_TXT_VERSION_1 constant fixed bin(17,0) initial dcl 7-15 ref 227 COMMITTED 2 000000 constant char(4) initial level 2 dcl 5-87 ref 286 ERROR_SV 000034 constant fixed bin(17,0) initial dcl 9-36 set ref 354* 369* 409* 420* FM_POSTCOMMIT_HANDLER 7 000000 constant char(4) initial level 2 dcl 5-87 ref 386 FM_ROLLBACK_HANDLER 6 000000 constant char(4) initial level 2 dcl 5-87 ref 389 LOG_SV 000032 constant fixed bin(17,0) initial dcl 9-40 set ref 454* ME 000012 constant char(32) initial unaligned dcl 133 set ref 205 354* 369* 409* 420* 454* NULL_ID constant bit(36) initial dcl 133 ref 102 220 230 249 270 343 398 ROLLED_BACK 4 000000 constant char(4) initial level 2 dcl 5-87 ref 383 addcharno builtin function dcl 127 ref 328 addr builtin function dcl 127 ref 225 328 347 347 402 402 before_image_length 000100 automatic fixed bin(24,0) dcl 102 set ref 301* 363 bj_adopt_txn$get_pf_oid 000010 constant entry external dcl 139 ref 337 393 bj_before_image based structure level 1 dcl 5-57 bj_cleanup_tables$handler 000012 constant entry external dcl 139 ref 498 bj_fm_handler_rec based structure level 1 dcl 5-69 bj_oid 12 based bit(36) level 3 dcl 7-28 set ref 274* bj_ppt based structure level 1 dcl 2-18 bj_ppte based structure level 1 dcl 2-39 bj_pst based structure level 1 dcl 3-18 bj_pste based structure level 1 dcl 4-48 bj_rec_hdr based structure level 1 dcl 5-21 bj_rec_hdr_ptr 000136 automatic pointer dcl 5-19 set ref 264* 274* 277 286 286 291 296 300 301 323 325 328 332 337 341 343 369 383 386 389 393 396 402 402 402 402 420 438 bj_storage_get 000014 constant entry external dcl 139 ref 274 bj_txt based structure level 1 dcl 7-20 bj_txt_ptr 000140 automatic pointer dcl 7-17 set ref 224* 225 227 bj_txte based structure level 1 dcl 7-28 bj_txte_ptr 000142 automatic pointer dcl 7-18 set ref 225* 230 230 247* 249 255 270 274 277 286 291 337 393 440 444 454 bj_txte_util$synchronize_txte_pste 000016 constant entry external dcl 139 ref 247 bjm_data_$bj_code 000110 external static fixed bin(35,0) dcl 1-19 set ref 207* 366 368 369* 373 378* 417 419 420* 424 429* 446* 448* 451 454* 460* 474* bjm_data_$bj_default_error_label 000112 external static label variable dcl 1-21 ref 515 bjm_data_$bj_exit_err 000106 external static label variable dcl 1-17 set ref 206* 515* bjm_data_$bj_operation 000104 external static char(32) unaligned dcl 1-15 set ref 197 205* 514* bjm_data_$bj_ppt_ptr 000034 external static pointer dcl 159 ref 255 337 393 bjm_data_$bj_pst_ptr 000036 external static pointer dcl 159 ref 212 212 bjm_data_$bj_rollback_buffer_ptr 000040 external static pointer dcl 159 ref 264 byte_length 15 based fixed bin(24,0) array level 3 dcl 5-57 ref 325 332 byte_offset 14 based fixed bin(24,0) array level 3 dcl 5-57 ref 323 ci_no 11 based fixed bin(35,0) level 2 dcl 5-57 ref 343 ci_parts based structure level 1 dcl 8-27 ci_parts_ptr 000144 automatic pointer initial dcl 8-35 set ref 8-35* cip_number_of_parts 000146 automatic fixed bin(17,0) initial dcl 8-36 set ref 8-36* cleanup 000130 stack reference condition dcl 130 ref 203 code 000101 automatic fixed bin(35,0) initial dcl 102 set ref 102* 347* 350 350 350 353 354* 358 402* 406 408 409* 413 cu_$level_get 000020 constant entry external dcl 139 ref 202 cu_$level_set 000022 constant entry external dcl 139 ref 346 349 401 405 516 cu_code 000100 automatic fixed bin(35,0) dcl 496 set ref 498* curr_checkpoint_rec_id 13 based bit(36) level 3 dcl 7-28 set ref 440* curr_image_pos 000100 automatic fixed bin(24,0) initial dcl 316 set ref 316* 328 332* 332 current_ring 000102 automatic fixed bin(3,0) dcl 102 set ref 265* 346 401 dm_data_$bj_txt_ptr 000042 external static pointer dcl 159 ref 224 dm_error_$bj_bad_rec_count 000044 external static fixed bin(35,0) dcl 159 ref 446 dm_error_$bj_bad_tid 000046 external static fixed bin(35,0) dcl 159 set ref 233* 277* dm_error_$bj_bad_txt_version 000050 external static fixed bin(35,0) dcl 159 set ref 227* dm_error_$bj_incomplete_rollback 000052 external static fixed bin(35,0) dcl 159 ref 448 dm_error_$bj_not_my_txn 000054 external static fixed bin(35,0) dcl 159 set ref 255* dm_error_$bj_recursive_invoc 000056 external static fixed bin(35,0) dcl 159 ref 198 dm_error_$bj_rollback_bad_cp_no 000060 external static fixed bin(35,0) dcl 159 set ref 237* dm_error_$bj_txn_aborted 000062 external static fixed bin(35,0) dcl 159 set ref 294* dm_error_$bj_txn_committed 000064 external static fixed bin(35,0) dcl 159 set ref 289* dm_error_$bj_unexpected_aborted_mark 000066 external static fixed bin(35,0) dcl 159 set ref 291* dm_error_$bj_unexpected_committed_mark 000070 external static fixed bin(35,0) dcl 159 set ref 286* dm_error_$bj_unknown_record_type 000072 external static fixed bin(35,0) dcl 159 set ref 434* dm_error_$file_doesnt_exist 000074 external static fixed bin(35,0) dcl 159 ref 350 dm_error_$file_was_deleted 000076 external static fixed bin(35,0) dcl 159 ref 350 dm_error_$no_current_transaction 000100 external static fixed bin(35,0) dcl 159 set ref 220* 230* 249* dm_misc_util_$log 000024 constant entry external dcl 139 ref 354 369 409 420 454 dm_system_data_$max_n_transactions 000114 external static fixed bin(17,0) dcl 6-10 ref 220 entry 40 based structure array level 2 dcl 7-20 set ref 225 er_p_code parameter fixed bin(35,0) dcl 483 ref 480 486 error_table_$noentry 000102 external static fixed bin(35,0) dcl 159 ref 366 417 file_manager_$undo 000026 constant entry external dcl 139 ref 402 file_manager_$unput 000030 constant entry external dcl 139 ref 347 fixed builtin function dcl 127 ref 454 454 fm_oid 10 based bit(36) level 2 in structure "bj_fm_handler_rec" dcl 5-69 in procedure "bjm_rollback" ref 396 fm_oid 10 based bit(36) level 2 in structure "bj_before_image" dcl 5-57 in procedure "bjm_rollback" ref 341 fm_oid 000103 automatic bit(36) initial dcl 102 in procedure "bjm_rollback" set ref 102* 337* 341* 343 347* 393* 396* 398 402* fm_uid 7 based bit(36) level 2 in structure "bj_fm_handler_rec" dcl 5-69 in procedure "bjm_rollback" set ref 393* 402* fm_uid 7 based bit(36) level 2 in structure "bj_before_image" dcl 5-57 in procedure "bjm_rollback" set ref 337* 369* 420* get_ring_ 000032 constant entry external dcl 139 ref 265 image based char level 2 dcl 5-57 set ref 328 image_len 13 based fixed bin(24,0) level 2 dcl 5-57 ref 301 328 info_bytes 13 based char level 2 dcl 5-69 set ref 402 402 info_len 12 based fixed bin(17,0) level 2 dcl 5-69 set ref 402 402 402* last_bj_rec_id 15 based bit(36) level 3 dcl 7-28 ref 270 286 291 length_in_bytes 3 000100 automatic fixed bin(17,0) array level 3 dcl 311 set ref 325* local_ptr 4 000100 automatic pointer array level 3 dcl 311 set ref 328* meters 16 based structure level 2 dcl 3-18 must_be_zero 1 000100 automatic fixed bin(17,0) initial level 2 dcl 311 set ref 311* my_ci_parts 000100 automatic structure level 1 dcl 311 set ref 347 347 n_bi_unput 000104 automatic fixed bin(35,0) initial dcl 102 set ref 102* 362* 362 n_bytes_unput 000106 automatic fixed bin(71,0) initial dcl 102 set ref 102* 363* 363 n_calls_rollback 34 based fixed bin(71,0) level 3 dcl 3-18 set ref 212* 212 n_get_oid_errors 000110 automatic fixed bin(35,0) initial dcl 102 set ref 102* 367* 367 369* 372* 418* 418 420* 423* 448 454 454* n_handler_errors 000111 automatic fixed bin(35,0) initial dcl 102 set ref 102* 407* 407 409* 412* 448 454 454* n_parts 12 based fixed bin(17,0) level 2 dcl 5-57 ref 300 328 n_rec_bytes 000112 automatic fixed bin(17,0) dcl 102 set ref 274* n_rec_read 000113 automatic fixed bin(35,0) initial dcl 102 set ref 102* 280* 280 444 454* n_rec_written 16 based fixed bin(35,0) level 3 dcl 7-28 set ref 444 454* n_unput_errors 000114 automatic fixed bin(35,0) initial dcl 102 set ref 102* 352* 352 354* 357* 448 454 454* null builtin function dcl 127 ref 8-35 number_of_ci_parts 000115 automatic fixed bin(17,0) initial dcl 102 set ref 102* 300* 311 319 321 number_of_parts 000100 automatic fixed bin(17,0) level 2 dcl 311 set ref 319* offset_in_bytes 2 000100 automatic fixed bin(17,0) array level 3 dcl 311 set ref 323* operator_info 6 based structure level 2 dcl 7-28 owner_info 4 based structure level 2 dcl 7-28 p_checkpoint_no parameter fixed bin(35,0) dcl 94 ref 87 237 237 p_code parameter fixed bin(35,0) dcl 94 set ref 87 192* 198* 486* p_tid parameter bit(36) dcl 94 ref 87 190 p_tix parameter fixed bin(17,0) dcl 94 ref 87 191 part 2 000100 automatic structure array level 2 in structure "my_ci_parts" dcl 311 in begin block on line 303 part 14 based structure array level 2 in structure "bj_before_image" dcl 5-57 in procedure "bjm_rollback" part 2 based structure array level 2 in structure "ci_parts" dcl 8-27 in procedure "bjm_rollback" prev_get_oid_code 000116 automatic fixed bin(35,0) initial dcl 102 set ref 102* 368 373* 419 424* prev_handler_code 000117 automatic fixed bin(35,0) initial dcl 102 set ref 102* 408 413* prev_rec_id 3 based bit(36) level 2 dcl 5-21 ref 438 prev_unput_code 000120 automatic fixed bin(35,0) initial dcl 102 set ref 102* 353 358* process_id 6 based bit(36) level 2 in structure "bj_ppt" dcl 2-18 in procedure "bjm_rollback" ref 255 337 393 process_id 6 based bit(36) level 3 in structure "bj_txte" dcl 7-28 in procedure "bjm_rollback" ref 255 process_id 4 based bit(36) level 3 in structure "bj_txte" dcl 7-28 in procedure "bjm_rollback" ref 337 393 records_info 13 based structure level 2 dcl 7-28 records_used_mismatch 000121 automatic bit(1) initial dcl 102 set ref 102* 444* 446 454* saved_level 000122 automatic fixed bin(17,0) dcl 102 set ref 202* 349* 405* 516* this_part 000101 automatic fixed bin(17,0) dcl 317 set ref 321* 323 323 325 325 328 332* this_rec_id 000123 automatic bit(36) dcl 102 set ref 270* 270* 274* 286 291* 440 tid 000124 automatic bit(36) dcl 102 in procedure "bjm_rollback" set ref 190* 220 230 454 454 tid 1 based bit(36) level 2 in structure "bj_rec_hdr" dcl 5-21 in procedure "bjm_rollback" ref 277 tid based bit(36) level 2 in structure "bj_txte" dcl 7-28 in procedure "bjm_rollback" ref 230 230 249 277 tix 000125 automatic fixed bin(17,0) dcl 102 set ref 191* 220 220 225 type based char(4) level 2 dcl 5-21 ref 286 286 291 296 383 386 389 uns_ci_no 000126 automatic fixed bin(24,0) unsigned dcl 102 set ref 343* 347* version based fixed bin(17,0) level 2 dcl 7-20 ref 227 NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. BJ_PPTE_VERSION_1 internal static fixed bin(17,0) initial dcl 2-14 BJ_PPT_VERSION_1 internal static fixed bin(17,0) initial dcl 2-13 BJ_PSTE_VERSION_2 internal static fixed bin(17,0) initial dcl 4-42 BJ_PST_VERSION_1 internal static fixed bin(17,0) initial dcl 3-14 CRASH_SV internal static fixed bin(17,0) initial dcl 9-34 FATAL_SV internal static fixed bin(17,0) initial dcl 9-34 INFORM_SV internal static fixed bin(17,0) initial dcl 9-38 PRINT_SV internal static fixed bin(17,0) initial dcl 9-32 QUERY_SV internal static fixed bin(17,0) initial dcl 9-32 bj_aborted_rec based structure level 1 dcl 5-39 bj_before_image_len automatic fixed bin(24,0) dcl 5-82 bj_before_image_n_parts automatic fixed bin(17,0) dcl 5-81 bj_begin_commit_rec based structure level 1 dcl 5-37 bj_committed_rec based structure level 1 dcl 5-35 bj_fm_handler_info_len automatic fixed bin(24,0) dcl 5-83 bj_ppt_ptr automatic pointer dcl 2-16 bj_ppte_ptr automatic pointer dcl 2-37 bj_pst_ptr automatic pointer dcl 3-16 bj_pste_ptr automatic pointer dcl 4-45 bj_rollback_handler_rec based structure level 1 dcl 5-46 bj_rollback_info_len automatic fixed bin(24,0) dcl 5-80 bj_rollback_name_len automatic fixed bin(24,0) dcl 5-79 bj_rolled_back_rec based structure level 1 dcl 5-41 dm_system_data_$bj_max_n_journals external static fixed bin(17,0) dcl 6-8 dm_system_data_$bj_max_n_processes external static fixed bin(17,0) dcl 6-9 NAMES DECLARED BY EXPLICIT CONTEXT. ACTION_TO_ROLLBACK 001133 constant label dcl 389 CHECK_FOR_ERRORS 001372 constant label dcl 442 CHECK_IMAGE_TYPE_AND_ROLLBACK 000515 constant label dcl 283 CLEAN_UP 001561 constant entry internal dcl 493 ref 203 485 COPY_AND_INIT_PARAMETERS 000220 constant label dcl 188 DATA_TO_ROLLBACK 000576 constant label dcl 296 ERROR_RETURN 001545 constant entry internal dcl 480 ref 220 227 230 233 237 249 255 277 286 289 291 294 434 460 474 FINISH 001603 constant entry internal dcl 509 ref 466 500 IS_BJ_OPEN_IN_THIS_PROCESS 000424 constant label dcl 255 LOG_ERROR_SUMMARY 001416 constant label dcl 451 MAIN_RETURN 001534 constant label dcl 468 ref 199 487 NONLOCAL_ERROR_EXIT 001535 constant label dcl 474 ref 206 RESTORE_BEFORE_IMAGE 000603 constant label dcl 303 ROLLBACK_LOOP 000453 constant label dcl 270 RUN_FM_ROLLBACK_HANDLER 001161 constant label dcl 398 SETUP_ERROR_HANDLING 000226 constant label dcl 195 SYNC_TXTE_WITH_PSTE 000404 constant label dcl 242 UNPUT_IMAGE 000706 constant label dcl 343 UPDATE_METERS 000300 constant label dcl 212 VALIDATE_PARAMETERS_AND_SYSTEM_TABLES 000305 constant label dcl 217 bjm_rollback 000172 constant entry external dcl 87 THERE WERE NO NAMES DECLARED BY CONTEXT OR IMPLICATION. STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 2344 2462 1634 2354 Length 3126 1634 116 427 510 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME bjm_rollback 302 external procedure is an external procedure. on unit on line 203 64 on unit begin block on line 303 152 begin block uses auto adjustable storage. ERROR_RETURN internal procedure shares stack frame of external procedure bjm_rollback. CLEAN_UP 70 internal procedure is called by several nonquick procedures. FINISH 68 internal procedure is called by several nonquick procedures. STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME CLEAN_UP 000100 cu_code CLEAN_UP begin block on line 303 000100 curr_image_pos begin block on line 303 000100 my_ci_parts begin block on line 303 000101 this_part begin block on line 303 bjm_rollback 000100 before_image_length bjm_rollback 000101 code bjm_rollback 000102 current_ring bjm_rollback 000103 fm_oid bjm_rollback 000104 n_bi_unput bjm_rollback 000106 n_bytes_unput bjm_rollback 000110 n_get_oid_errors bjm_rollback 000111 n_handler_errors bjm_rollback 000112 n_rec_bytes bjm_rollback 000113 n_rec_read bjm_rollback 000114 n_unput_errors bjm_rollback 000115 number_of_ci_parts bjm_rollback 000116 prev_get_oid_code bjm_rollback 000117 prev_handler_code bjm_rollback 000120 prev_unput_code bjm_rollback 000121 records_used_mismatch bjm_rollback 000122 saved_level bjm_rollback 000123 this_rec_id bjm_rollback 000124 tid bjm_rollback 000125 tix bjm_rollback 000126 uns_ci_no bjm_rollback 000136 bj_rec_hdr_ptr bjm_rollback 000140 bj_txt_ptr bjm_rollback 000142 bj_txte_ptr bjm_rollback 000144 ci_parts_ptr bjm_rollback 000146 cip_number_of_parts bjm_rollback THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_g_a r_ne_as enter_begin leave_begin call_ext_out_desc call_ext_out call_int_this call_int_other return alloc_auto_adj enable ext_entry int_entry THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. bj_adopt_txn$get_pf_oid bj_cleanup_tables$handler bj_storage_get bj_txte_util$synchronize_txte_pste cu_$level_get cu_$level_set dm_misc_util_$log file_manager_$undo file_manager_$unput get_ring_ THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. bjm_data_$bj_code bjm_data_$bj_default_error_label bjm_data_$bj_exit_err bjm_data_$bj_operation bjm_data_$bj_ppt_ptr bjm_data_$bj_pst_ptr bjm_data_$bj_rollback_buffer_ptr dm_data_$bj_txt_ptr dm_error_$bj_bad_rec_count dm_error_$bj_bad_tid dm_error_$bj_bad_txt_version dm_error_$bj_incomplete_rollback dm_error_$bj_not_my_txn dm_error_$bj_recursive_invoc dm_error_$bj_rollback_bad_cp_no dm_error_$bj_txn_aborted dm_error_$bj_txn_committed dm_error_$bj_unexpected_aborted_mark dm_error_$bj_unexpected_committed_mark dm_error_$bj_unknown_record_type dm_error_$file_doesnt_exist dm_error_$file_was_deleted dm_error_$no_current_transaction dm_system_data_$max_n_transactions error_table_$noentry LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 87 000165 102 000177 8 35 000215 8 36 000217 190 000220 191 000223 192 000225 197 000226 198 000233 199 000235 202 000236 203 000244 205 000266 206 000273 207 000277 212 000300 220 000305 224 000322 225 000326 227 000333 230 000344 233 000361 237 000370 247 000404 249 000413 255 000424 264 000441 265 000445 270 000453 274 000460 277 000476 280 000511 286 000515 289 000536 291 000545 294 000564 296 000573 300 000576 301 000601 303 000603 311 000606 316 000616 319 000617 321 000621 323 000627 325 000641 328 000643 332 000651 335 000654 337 000656 341 000700 343 000703 346 000711 347 000722 349 000742 350 000752 352 000762 353 000766 354 000771 357 001023 358 001025 360 001027 362 001030 363 001034 365 001037 366 001040 367 001044 368 001050 369 001053 372 001112 373 001114 378 001117 379 001121 381 001122 383 001123 386 001126 389 001131 393 001133 396 001154 398 001157 401 001161 402 001172 405 001215 406 001224 407 001226 408 001232 409 001235 412 001270 413 001271 416 001273 417 001274 418 001300 419 001304 420 001307 423 001346 424 001347 429 001352 431 001354 434 001355 438 001364 440 001370 444 001372 446 001376 448 001403 451 001413 454 001416 460 001521 466 001530 468 001534 474 001535 541 001544 480 001545 485 001547 486 001553 487 001557 493 001560 498 001566 500 001574 502 001601 509 001602 514 001610 515 001614 516 001622 518 001631 ----------------------------------------------------------- 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