COMPILATION LISTING OF SEGMENT init_volmap_seg 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 1002.5 mst Sat Options: optimize map 1 /****^ *********************************************************** 2* * * 3* * Copyright, (C) Honeywell Bull Inc., 1987 * 4* * * 5* * Copyright, (C) Honeywell Information Systems Inc., 1982 * 6* * * 7* *********************************************************** */ 8 /* format: style3 */ 9 init_volmap_seg: 10 proc (Pvtx, Pvname, Code); 11 12 /* Program to accomplish the following at physical volume mount time: 13* 14* 1. Create a volmap_seg for the volume 15* 16* 2. Determine whether the volume requires salvage 17* 18* 3. Allocate a record stock 19* 20* 4. Allocate a VTOCE stock 21* 22* 5. Initialize the dumper bit map 23* 24* 25* A volume is salvaged automatically if the following 26* conditions hold: 27* 28* 1. The volume is a member of the RLV 29* 30* 2. The vol_trouble_count is non-zero (i.e., the volume was not shut 31* down, or volume inconsistencies were detected). 32* 33* 3. The number of records left is less than 200, or the number of 34* VTOCEs left is less than 100. 35* 36* Some care is required in order than an RPV volume may be salvaged. 37* Specifically, no PVTE fields needed for HC partition withdrawal can be 38* modified until it is known that the RPV does not need salvage. That way, we 39* return an error code (causing the volume salvager to be invoked), and pages 40* can be withdrawn against the HC partition. We don't special-case the 41* RPV, but just order things so that the relevant PVTE fields are not 42* modified until after the check for salvage required. 43* 44* Written March 1982 by J. Bongiovanni 45* Modified September 1982 by J. Bongiovanni to set aste.vtocx 46* Modified January 1985 by Keith Loepere to return real error codes. 47**/ 48 49 /* Parameter */ 50 51 dcl Pvtx fixed bin parameter; /* PVTE index */ 52 dcl Pvname char (*) parameter; /* Physical volume name for error message */ 53 dcl Code fixed bin (35); /* Return code */ 54 55 /* Automatic */ 56 57 dcl base_add fixed bin; 58 dcl bias fixed bin; 59 dcl code fixed bin (35); 60 dcl n_free_vtoce fixed bin; 61 dcl ox fixed bin; 62 dcl p99 pic "99"; 63 dcl page_left fixed bin; 64 dcl page_n_words fixed bin; 65 dcl page_offset fixed bin (19); 66 dcl pagex fixed bin; 67 dcl ptp ptr; 68 dcl severity fixed bin; 69 dcl tsdw fixed bin (71); 70 dcl unused_mapp ptr; 71 dcl unused_map_words fixed bin; 72 dcl vastep ptr; 73 dcl vleft fixed bin; 74 dcl vsdw fixed bin (71); 75 dcl vtoc_header_pages fixed bin; 76 dcl vtoc_map_offset bit (18); 77 78 /* Static */ 79 80 dcl MIN_RECORDS fixed bin int static options (constant) init (200); 81 dcl MIN_VTOCES fixed bin int static options (constant) init (100); 82 83 /* Based */ 84 85 dcl unused_map (unused_map_words) bit (36) aligned based (unused_mapp); 86 dcl 1 vaste aligned like aste based (vastep); 87 88 /* External */ 89 90 dcl abs_seg$ external; 91 dcl error_table_$fsdisk_not_salv fixed bin (35) ext static; 92 dcl error_table_$fsdisk_phydev_err fixed bin (35) ext static; 93 dcl sst$astsize fixed bin external; 94 dcl 1 sst$level (0:3) aligned external, 95 2 ausedp bit (18) unaligned, 96 2 no_aste bit (18) unaligned; 97 dcl volmap_abs_seg$ external; 98 99 /* Entry */ 100 101 dcl dbm_man$init_map entry (fixed bin, ptr, fixed bin (35)); 102 dcl get_aste entry (fixed bin) returns (ptr); 103 dcl get_ptrs_$given_astep 104 entry (ptr) returns (fixed bin (71)); 105 dcl init_hc_part$terminate_hc_part 106 entry (fixed bin); 107 dcl lock$lock_ast entry; 108 dcl lock$unlock_ast entry; 109 dcl map_free_count entry (ptr, fixed bin, fixed bin); 110 dcl pc$cleanup entry (ptr); 111 dcl pmut$swap_sdw entry (ptr, ptr); 112 dcl ptw_util_$make_disk entry (ptr, fixed bin); 113 dcl put_aste entry (ptr); 114 dcl sdw_util_$set_size entry (ptr, fixed bin (19)); 115 dcl stock_man$allocate_record_stock 116 entry (ptr, ptr); 117 dcl stock_man$allocate_vtoce_stock 118 entry (ptr, ptr); 119 dcl stock_man$free_record_stock 120 entry (ptr, ptr); 121 dcl stock_man$free_vtoce_stock 122 entry (ptr, ptr); 123 dcl syserr entry options (variable); 124 dcl thread$out entry (ptr, bit (18) unaligned); 125 126 /* Builtin */ 127 128 dcl addr builtin; 129 dcl addrel builtin; 130 dcl bin builtin; 131 dcl convert builtin; 132 dcl divide builtin; 133 dcl hbound builtin; 134 dcl null builtin; 135 dcl ptr builtin; 136 dcl size builtin; 137 dcl unspec builtin; 138 139 /* Condition */ 140 141 dcl page_fault_error condition; 142 143 144 pvt_arrayp = addr (pvt$array); 145 pvtep = addr (pvt_array (Pvtx)); 146 astep = null (); 147 vastep = null (); 148 tsdw = 0; 149 vsdw = 0; 150 record_stockp = null (); 151 vtoce_stockp = null (); 152 153 154 /* Get an ASTE for the volmap_seg and one to read the VTOC header */ 155 156 call lock$lock_ast; 157 158 vtoc_header_pages = divide (size (vtoc_header) + 1023, 1024, 17); 159 astep = get_aste (vtoc_header_pages); 160 if astep = null () 161 then call syserr (CRASH, "init_volmap_seg: Unable to get ^dK ASTE for VTOC header.", vtoc_header_pages); 162 call thread$out (astep, sst$level (bin (aste.ptsi, 17)).ausedp); 163 164 aste.pvtx = Pvtx; 165 aste.nqsw, aste.dnzp, aste.ddnp = "1"b; 166 aste.vtocx = -1; 167 tsdw = get_ptrs_$given_astep (astep); 168 call pmut$swap_sdw (addr (abs_seg$), addr (tsdw)); 169 170 vastep = get_aste (N_OLD_VOLMAP_PAGES + 1); 171 if vastep = null () 172 then call syserr (CRASH, "init_volmap_seg: Unable to get ^dK ASTE for volmap_seg.", N_OLD_VOLMAP_PAGES + 1); 173 call thread$out (vastep, sst$level (bin (vaste.ptsi)).ausedp); 174 175 vaste.pvtx = Pvtx; 176 vaste.nqsw, vaste.dnzp, vaste.ddnp = "1"b; 177 vaste.volmap_seg = "1"b; 178 vaste.vtocx = -1; 179 vsdw = get_ptrs_$given_astep (vastep); 180 call sdw_util_$set_size (addr (vsdw), ((N_OLD_VOLMAP_PAGES + 1) * 1024)); 181 call pmut$swap_sdw (addr (volmap_abs_seg$), addr (vsdw)); 182 183 call lock$unlock_ast; 184 185 186 /* Fill in disk addresses */ 187 188 ptp = addrel (astep, sst$astsize); 189 do pagex = 1 to vtoc_header_pages; 190 call ptw_util_$make_disk (addrel (ptp, pagex - 1), DUMPER_BIT_MAP_ADDR + pagex - 1); 191 end; 192 193 ptp = addrel (vastep, sst$astsize); 194 do pagex = 1 to N_OLD_VOLMAP_PAGES; 195 call ptw_util_$make_disk (addrel (ptp, pagex - 1), VOLMAP_ADDR + pagex - 1); 196 end; 197 call ptw_util_$make_disk (addrel (ptp, N_OLD_VOLMAP_PAGES), VTOC_MAP_ADDR); 198 199 on page_fault_error goto CLEANUP_AFTER_IO_ERROR; 200 201 202 /* Clear unused space in Volume Map pages */ 203 204 vol_mapp = addr (volmap_abs_seg$); 205 206 if vol_map.bit_map_n_words < hbound (vol_map.bit_map, 1) 207 /* There is unused space */ 208 then do; 209 unused_mapp = addr (vol_map.bit_map (vol_map.bit_map_n_words + 1)); 210 unused_map_words = hbound (vol_map.bit_map, 1) - vol_map.bit_map_n_words; 211 unspec (unused_map) = "0"b; 212 end; 213 214 /* Determine the number of records really left in the Volume Map (it may 215* be different from the value in the header if the volume was not shut 216* down properly). */ 217 218 call map_free_count (addr (vol_map.bit_map), vol_map.bit_map_n_words, vleft); 219 if vleft ^= vol_map.n_free_rec 220 then do; 221 call syserr (LOG, "init_volmap_seg: Records left on ^a_^a(^a) changed from ^d to ^d.", pvte.devname, 222 convert (p99, pvte.logical_area_number), Pvname, vol_map.n_free_rec, vleft); 223 vol_map.n_free_rec = vleft; 224 end; 225 226 /* Setup the VTOC Map */ 227 228 vtoc_map_offset = bit (bin (1024 * N_OLD_VOLMAP_PAGES, 18), 18); 229 vtoc_mapp = ptr (addr (volmap_abs_seg$), vtoc_map_offset); 230 231 /* Clear any unused space in the VTOC Map */ 232 233 if vtoc_map.bit_map_n_words < hbound (vtoc_map.bit_map, 1) + 1 234 then do; 235 unused_mapp = addr (vtoc_map.bit_map (vtoc_map.bit_map_n_words)); 236 unused_map_words = hbound (vtoc_map.bit_map, 1) + 1 - vtoc_map.bit_map_n_words; 237 unspec (unused_map) = ""b; 238 end; 239 240 /* Get the count of free VTOCEs from the bit map, and compare with the 241* value in the header */ 242 243 call map_free_count (addr (vtoc_map.bit_map), vtoc_map.bit_map_n_words, n_free_vtoce); 244 if n_free_vtoce ^= vtoc_map.n_free_vtoce 245 then do; 246 call syserr (LOG, "init_volmap_seg: VTOCEs left on ^a_^a(^a) changed from ^d to ^d.", pvte.devname, 247 convert (p99, pvte.logical_area_number), Pvname, vtoc_map.n_free_vtoce, n_free_vtoce); 248 vtoc_map.n_free_vtoce = n_free_vtoce; 249 end; 250 251 252 253 /* Check to see whether a salvage is required. If so, undo everything and 254* return an error code indicating this. */ 255 256 if pvte.vol_trouble_count > 0 257 then do; 258 if vleft < MIN_RECORDS | n_free_vtoce < MIN_VTOCES 259 then severity = ANNOUNCE; 260 else severity = LOG; 261 call syserr (severity, 262 "init_volmap_seg: ^d volume inconsistenc^[y^;ies^] on ^a_^a(^a). ^d records left. ^d VTOCEs left." 263 , pvte.vol_trouble_count, (pvte.vol_trouble_count = 1), pvte.devname, 264 convert (p99, pvte.logical_area_number), Pvname, vleft, n_free_vtoce); 265 if pvte.hc_part_used 266 then do; /* Volume of RLV */ 267 if vleft < MIN_RECORDS | n_free_vtoce < MIN_VTOCES 268 then do; 269 code = error_table_$fsdisk_not_salv; 270 goto CLEANUP_AFTER_ERROR; 271 end; 272 end; 273 end; 274 275 /* Now we know that we're really going to mount the volume. So we can allocate 276* record and vtoce stocks, and fill in the fields in the PVTE from what we've 277* already done. 278**/ 279 280 revert page_fault_error; 281 282 if pvte.hc_part_used 283 then call init_hc_part$terminate_hc_part (Pvtx); /* No more use of HC partition */ 284 285 call stock_man$allocate_record_stock (pvtep, record_stockp); 286 call stock_man$allocate_vtoce_stock (pvtep, vtoce_stockp); 287 288 pvte.volmap_astep = vastep; 289 pvte.volmap_seg_sdw = vsdw; 290 pvte.totrec = vol_map.n_rec; 291 pvte.nleft = vol_map.n_free_rec; 292 pvte.vtoc_map_offset = vtoc_map_offset; 293 pvte.n_free_vtoce = vtoc_map.n_free_vtoce; 294 pvte.vtoc_size = vtoc_map.vtoc_last_recno + 1; 295 pvte.n_vtoce = vtoc_map.n_vtoce; 296 297 /* Walk the Bit Map and compute the base address and number of free records 298* in each page. There is a kludge for the first page's base address to make 299* life simple for Page Control. This is that the base address in the stock 300* is 64*32 lower than the actual base address, since the first 64 words 301* of the Volume Map are the header. */ 302 303 bias = 64 * 32; 304 base_add, pvte.baseadd = vol_map.base_add; 305 page_offset = 64; 306 page_n_words = 1024 - 64; 307 308 do ox = 1 to N_OLD_VOLMAP_PAGES; 309 call map_free_count (ptr (vol_mapp, page_offset), page_n_words, page_left); 310 /* Count free records */ 311 record_stock.volmap_page (ox).n_free = page_left; 312 record_stock.volmap_page (ox).baseadd = base_add - bias; 313 base_add = base_add + 1024 * 32; 314 page_offset = page_offset + page_n_words; 315 page_n_words = 1024; 316 end; 317 318 319 320 321 322 /* Allocate a dumper bit map for the volume */ 323 324 vtoc_headerp = addr (abs_seg$); 325 326 call dbm_man$init_map (Pvtx, addr (vtoc_header.dmpr_bit_map), code); 327 if code ^= 0 328 then call syserr (ANNOUNCE, "init_volmap_seg: Unable to initialize dumper map for ^a_^a(^a)", pvte.devname, 329 convert (p99, pvte.logical_area_number), Pvname); 330 code = 0; 331 332 333 call lock$lock_ast; 334 335 CLEANUP_FINISH: 336 if astep ^= null () 337 then do; 338 tsdw = 0; 339 call pmut$swap_sdw (addr (abs_seg$), addr (tsdw)); 340 call pc$cleanup (astep); 341 call put_aste (astep); 342 end; 343 344 vsdw = 0; 345 call pmut$swap_sdw (addr (volmap_abs_seg$), addr (vsdw)); 346 347 call lock$unlock_ast; 348 349 Code = code; 350 351 return; 352 353 354 CLEANUP_AFTER_IO_ERROR: 355 code = error_table_$fsdisk_phydev_err; 356 357 CLEANUP_AFTER_ERROR: 358 call lock$lock_ast; 359 360 if vastep ^= null () 361 then do; 362 if record_stockp ^= null () 363 then call stock_man$free_record_stock (pvtep, record_stockp); 364 if vtoce_stockp ^= null () 365 then call stock_man$free_vtoce_stock (pvtep, vtoce_stockp); 366 367 vsdw = 0; 368 call pmut$swap_sdw (addr (volmap_abs_seg$), addr (vsdw)); 369 call pc$cleanup (vastep); 370 call put_aste (vastep); 371 end; 372 373 374 goto CLEANUP_FINISH; 375 376 1 1 /* BEGIN INCLUDE FILE ...aste.incl.pl1 ... */ 1 2 1 3 /* Template for an AST entry. Length = 12 words. */ 1 4 1 5 /* Words 0 to 7, and 11 are read by PC; they are read and modified by SC. 1 6* Words 8, 9 and 10 are modified by PC; they should never be modified without locking the PC lock */ 1 7 /* Modified January 1985 by Keith Loepere for multi_class. */ 1 8 1 9 dcl astep ptr; 1 10 1 11 dcl 1 aste based (astep) aligned, 1 12 1 13 (2 fp bit (18), /* forward used list rel pointer */ 1 14 2 bp bit (18), /* backward used list rel pointer */ 1 15 1 16 2 infl bit (18), /* ptr to NEXT in list of ASTE's of my brothers */ 1 17 2 infp bit (18), /* ptr to FIRST in list of ASTE's of my children */ 1 18 1 19 2 strp bit (18), /* rel pointer to process trailer */ 1 20 2 par_astep bit (18), /* rel pointer to parent aste */ 1 21 1 22 2 uid bit (36), /* segment unique id */ 1 23 1 24 2 msl bit (9), /* maximum segment length in 1024 word units */ 1 25 2 pvtx fixed bin (8), /* physical volume table index */ 1 26 2 vtocx fixed bin (17), /* vtoc entry index */ 1 27 1 28 2 usedf bit (1), /* ast entry is being used if non-zero */ 1 29 2 init bit (1), /* used bit - insure 1 lap */ 1 30 2 gtus bit (1), /* global transparent usage switch */ 1 31 2 gtms bit (1), /* global transparent modified switch */ 1 32 2 hc bit (1), /* hard core segment */ 1 33 2 hc_sdw bit (1), /* aste with sdw for hardcore seg if non-zero */ 1 34 2 any_access_on bit (1), /* any sdw allows access, unless write_access_on */ 1 35 2 write_access_on bit (1), /* any sdw allows write access */ 1 36 2 inhibit_cache bit (1), /* flag not to reset above bits */ 1 37 2 explicit_deact_ok bit (1), /* set if user can deactivate seg */ 1 38 2 deact_error bit (1), /* set if error occurred while deactivating */ 1 39 2 hc_part bit (1), /* set if pages are in a hardcore partition */ 1 40 2 fm_damaged bit (1), /* set if filemap checksum was ever bad */ 1 41 2 multi_class bit (1), /* set if page_control should watch state changes to this segment */ 1 42 2 pad1 bit (2), /* OO */ 1 43 2 dius bit (1), /* dumper in use switch */ 1 44 2 nid bit (1), /* if on prevents addtion to incremental dump map */ 1 45 2 dmpr_pad bit (1), 1 46 2 ehs bit (1), /* entry hold switch */ 1 47 2 nqsw bit (1), /* no quota switch - no checking for pages of this seg */ 1 48 2 dirsw bit (1), /* directory switch */ 1 49 2 master_dir bit (1), /* master dir - a root for the log volume */ 1 50 2 volmap_seg bit (1), /* volmap_seg for some volume */ 1 51 2 tqsw (0:1) bit (1), /* terminal quota switch - (0) for non dir pages */ 1 52 2 pad_ic bit (10), /* Used to be aste.ic */ 1 53 1 54 2 dtu bit (36), /* date and time segment last used */ 1 55 1 56 2 dtm bit (36), /* date and time segment last modified */ 1 57 1 58 1 59 2 quota (0:1) fixed bin (18) unsigned, /* sec storage quota - (0) for non dir pages */ 1 60 1 61 2 used (0:1) fixed bin (18) unsigned, /* sec storage used - (0) for non dir pages */ 1 62 1 63 2 csl bit (9), /* current segment length in 1024 words units */ 1 64 2 fmchanged bit (1), /* turned on by page if file map changed */ 1 65 2 fms bit (1), /* file modified switch */ 1 66 2 npfs bit (1), /* no page fault switch */ 1 67 2 gtpd bit (1), /* global transparent paging device switch */ 1 68 2 dnzp bit (1), /* don't null out if zero page switch */ 1 69 2 per_process bit (1), /* use master quota for this entry */ 1 70 2 ddnp bit (1), /* don't deposit nulled pages */ 1 71 2 pad2 bit (2), 1 72 2 records bit (9), /* number of records used by the seg in sec storage */ 1 73 2 np bit (9), /* number of pages in core */ 1 74 1 75 1 76 2 ht_fp bit (18), /* hash table forward rel pointer */ 1 77 2 fmchanged1 bit (1), /* value of "fmchanged" saved by pc$get_file_map */ 1 78 2 damaged bit (1), /* PC declared segment unusable */ 1 79 2 pack_ovfl bit (1), /* page fault on seg would cause pack overflow */ 1 80 2 synchronized bit (1), /* Data Management synchronized segment */ 1 81 2 pad3 bit (6), /* OOOOOOOOO */ 1 82 2 ptsi bit (2), /* page table size index */ 1 83 2 marker bit (6)) unaligned; /* marker to indicate last word of ASTE */ 1 84 1 85 1 86 dcl asta (0 : 8000) bit (36*12 /* sst-> sst.astsize */) based aligned; 1 87 1 88 1 89 dcl 1 aste_part aligned based (astep), 1 90 1 91 2 one bit (36) unaligned, /* fp and bp */ 1 92 2 two bit (36*11 - 8) unaligned, /* part that has to be zeroed when ASTE is freed */ 1 93 2 three bit (8) unaligned; /* ptsi and marker */ 1 94 1 95 1 96 dcl 1 seg_aste based (astep) aligned, /* Overlay because quota is only for dirs */ 1 97 2 pad1 bit (8*36), 1 98 2 usage fixed bin (35), /* page fault count: overlays quota */ 1 99 2 pad2 bit (3*36); 1 100 1 101 /* END INCLUDE FILE ... aste.incl.pl1 */ 377 378 2 1 /* BEGIN INCLUDE FILE...disk_pack.incl.pl1 Last Modified January 1982 for new volume map */ 2 2 2 3 2 4 2 5 2 6 /****^ HISTORY COMMENTS: 2 7* 1) change(86-01-14,Fawcett), approve(86-05-13,MCR7383), 2 8* audit(86-05-14,LJAdams), install(86-07-18,MR12.0-1098): 2 9* Add vars PAGE_SIZE and VTOCE_SIZE, Also change the SECTORS_PER_VTOCE and 2 10* VTOCES_PER_RECORD form fixed bin constants to arrays of fixed bin 2 11* constants indexed by device type as defined in fs_dev_types.incl.pl1. 2 12* This was done for support of the 3380, and 3390 devices for 512_WORD_IO. 2 13* 2) change(86-10-21,Fawcett), approve(86-10-21,MCR7533), 2 14* audit(86-10-21,Farley), install(86-10-22,MR12.0-1193): 2 15* Change PAGE_SIZE and VTOCE_SIZE from automatic to static constants. 2 16* END HISTORY COMMENTS */ 2 17 2 18 2 19 /* 2 20* All disk packs have the standard layout described below: 2 21* 2 22* Record 0 : contains the label, as declared in fs_vol_label.incl.pl1. 2 23* Record 1 to 3 : contains the volume map, as declared in vol_map.incl.pl1 2 24* Record 4 to 5 : contains the dumper bit map, as declared in dumper_bit_map.incl.pl1 2 25* Record 6 : contains the vtoc map, as declared in vtoc_map.incl.pl1 2 26* Record 7 : formerly contained bad track list; no longer used. 2 27* Records 8 to n-1 : contain the array of vtoc entries; ( n is specified in the label) 2 28* each record contains 5 192-word vtoc entries. The last 64 words are unused. 2 29* Records n to N-1 : contain the pages of the Multics segments. ( N is specified in the label) 2 30* 2 31* Sundry partitions may exist within the region n to N-1, withdrawn or not as befits the meaning 2 32* of the particular partition. 2 33* 2 34* 2 35* 2 36* A conceptual declaration for a disk pack could be: 2 37* 2 38* dcl 1 disk_pack, 2 39* 2 label_record (0 : 0) bit(36 * 1024), 2 40* 2 volume_map_record (1 : 3) bit(36 * 1024), 2 41* 2 dumper_bit_map_record (4 : 5) bit(36 * 1024), 2 42* 2 vtoc_map_record (6 : 6) bit(36 * 1024), 2 43* 2 spare_record (7 : 7) bit(36 * 1024), 2 44* 2 vtoc_array_records (8 : n-1), 2 45* 3 vtoc_entry ( 5 ) bit(36 * 192), 2 46* 3 unused bit(36 * 64), 2 47* 2 Multics_pages_records (n : N-1) bit(36 * 1024); 2 48* 2 49* 2 50* 2 51* 2 52**/ 2 53 2 54 dcl (LABEL_ADDR init (0), /* Address of Volume Label */ 2 55 VOLMAP_ADDR init (1), /* Address of first Volume Map record */ 2 56 DUMPER_BIT_MAP_ADDR init (4), /* For initial release compaitiblity */ 2 57 VTOC_MAP_ADDR init (6), /* Address of first VTOC Map Record */ 2 58 VTOC_ORIGIN init (8), /* Address of first record of VTOC */ 2 59 DEFAULT_HCPART_SIZE init (1000), /* Size of Hardcore Partition */ 2 60 MAX_VTOCE_PER_PACK init (31774)) /* Limited by size of VTOC Map */ 2 61 fixed bin (17) int static options (constant); 2 62 2 63 /* SECTORS_PER_VTOCE & VTOCES_PER_RECORD are indexed via device type as */ 2 64 /* defined by fs_dev_types and extracted form the disk_table entry (dte) */ 2 65 /* or the physical volume table entry (pvte) device type. */ 2 66 2 67 dcl PAGE_SIZE fixed bin (17) init (1024) static options (constant); 2 68 dcl VTOCE_SIZE fixed bin (17) init (192) static options (constant); 2 69 2 70 dcl SECTORS_PER_VTOCE (9) fixed bin static options (constant) init 2 71 (0, 3, 3, 3, 3, 3, 3, 1, 1); 2 72 dcl VTOCES_PER_RECORD (9) fixed bin static options (constant) init 2 73 (0, 5, 5, 5, 5, 5, 5, 2, 2); 2 74 dcl SECTORS_PER_RECORD (9) fixed bin static options (constant) init 2 75 (0, 16, 16, 16, 16, 16, 16, 2, 2); 2 76 2 77 /* END INCLUDE FILE...disk_pack.incl.pl1 */ 379 380 3 1 /* START OF: pvte.incl.pl1 July 1982 * * * * * * * * * * * * * * * * */ 3 2 3 3 /* Added pc_vacating, Benson Margulies 84-10-17 */ 3 4 3 5 /****^ HISTORY COMMENTS: 3 6* 1) change(86-04-11,Fawcett), approve(86-04-11,MCR7383), 3 7* audit(86-05-29,GDixon), install(86-07-18,MR12.0-1098): 3 8* Add the support for subvolumes 3 9* 2) change(86-04-11,Lippard), approve(86-04-11,MCR7309), 3 10* audit(86-05-29,GDixon), install(86-07-18,MR12.0-1098): 3 11* Add root_lv flag to mount RLVs that do not have hardcore partitions. 3 12* 3) change(88-05-27,GWMay), approve(88-05-27,MCR7883), 3 13* audit(88-06-14,Beattie), install(88-07-19,MR12.2-1061): 3 14* Added inconsistent_dbm bit for determining the status of volume 3 15* dumper bit maps. 3 16* END HISTORY COMMENTS */ 3 17 3 18 dcl pvt$array aligned external; 3 19 dcl pvt$max_n_entries fixed bin external; 3 20 3 21 dcl pvt_arrayp ptr; 3 22 dcl pvtep ptr; 3 23 3 24 dcl 1 pvt_array (pvt$max_n_entries) aligned like pvte based (pvt_arrayp); 3 25 3 26 dcl 1 pvte based (pvtep) aligned, 3 27 3 28 2 pvid bit (36), /* physical volume ID */ 3 29 3 30 2 lvid bit (36), /* logical volume ID */ 3 31 3 32 2 dmpr_in_use (3) bit (1) unaligned, /* physical volume dumper interlock */ 3 33 2 is_sv bit (1) unaligned, /* true if this entry defines a subvolume */ 3 34 2 root_lv bit (1) unaligned, /* true if this is on the root LV */ 3 35 2 removable_pack bit (1) unaligned, /* true if packs are eremoveable */ 3 36 2 inconsistent_dbm bit (1) unaligned, /* true if trouble count is incremented */ 3 37 2 pad3 bit (2) unaligned, 3 38 2 brother_pvtx fixed bin (8) unaligned,/* next pvte in lv chain */ 3 39 2 skip_queue_count fixed bin (18) unsigned unaligned, /* number of times this pv skipped for per-proc allocation due to saturation */ 3 40 3 41 3 42 3 43 2 devname char (4), /* device name */ 3 44 3 45 (2 device_type fixed bin (8), /* device type */ 3 46 2 logical_area_number fixed bin (8), /* disk drive number */ 3 47 2 used bit (1), /* TRUE if this entry is used */ 3 48 2 storage_system bit (1), /* TRUE for storage system (vs io disk) */ 3 49 2 permanent bit (1), /* TRUE if cannot be demounted */ 3 50 2 testing bit (1), /* Protocol bit for read_disk$test */ 3 51 2 being_mounted bit (1), /* TRUE if the physical volume is being mounted */ 3 52 2 being_demounted bit (1), /* TRUE if the pysical volume is being demounted */ 3 53 2 check_read_incomplete bit (1), /* page control should check read incomplete */ 3 54 2 device_inoperative bit (1), /* TRUE if disk_control decides dev busted */ 3 55 2 rpv bit (1), /* TRUE if this is the root physical volume */ 3 56 2 scav_check_address 3 57 bit (1), /* TRUE is page control should check deposits/withdrawals against scavenger table */ 3 58 2 deposit_to_volmap bit (1), /* TRUE if deposits should got to volume map, not stock */ 3 59 2 being_demounted2 bit (1), /* No more vtoc I/O during demount */ 3 60 2 pc_vacating bit (1), /* No more withdraws from this volume -- for debugging */ 3 61 2 vacating bit (1), /* don't put new segs on this vol */ 3 62 2 hc_part_used bit (1), /* HC part set up by init_pvt */ 3 63 2 volmap_lock_notify bit (1) unal, /* TRUE if notify required when volmap lock is unlocked */ 3 64 2 volmap_idle_notify bit (1) unal, /* TRUE if notify required when volmap state is idle */ 3 65 2 vtoc_map_lock_notify bit (1) unal, /* TRUE if notify required when vtoc map lock is unlocked */ 3 66 3 67 3 68 2 n_free_vtoce fixed bin (17), /* number of free VTOC entries */ 3 69 2 vtoc_size fixed bin (17), /* size of the VTOC part of the disk - in records */ 3 70 3 71 2 dbmrp (2) bit (18), /* rel ptr to dumber bit maps for this volume */ 3 72 3 73 2 nleft fixed bin (17), /* number of records left */ 3 74 2 totrec fixed bin (17)) unaligned, /* Total records in this map */ 3 75 3 76 2 dim_info bit (36), /* Information peculiar to DIM */ 3 77 2 sv_num fixed bin, /* the number of this subvolume starting at 0 */ 3 78 2 num_of_svs fixed bin, /* number of subvolumes for this device */ 3 79 2 records_per_cyl fixed bin, 3 80 2 record_factor fixed bin, /* the record factor for logical to real seek calculation */ 3 81 2 sv_name char (2) aligned, 3 82 2 curn_dmpr_vtocx (3) fixed bin unaligned,/* current vtocx being dumped */ 3 83 2 n_vtoce fixed bin unaligned, /* number of vtoce on this volume */ 3 84 3 85 2 baseadd fixed bin (18) uns unaligned, /* Base of paging region */ 3 86 2 pad2 bit (18) unaligned, 3 87 3 88 2 pad_for_mod_2 fixed bin (35), /* Make volmap_seg_sdw double word aligned */ 3 89 3 90 2 volmap_seg_sdw fixed bin (71), /* SDW describing volmap_seg */ 3 91 3 92 2 volmap_astep ptr unal, /* Packed pointer to ASTE for volmap_seg */ 3 93 3 94 2 volmap_offset bit (18) unal, /* Offset in volmap_seg of volume map */ 3 95 2 vtoc_map_offset bit (18) unal, /* Offset in volmap_seg of VTOC map */ 3 96 3 97 3 98 2 volmap_lock bit (36) aligned, /* Lock on volume map operations */ 3 99 3 100 2 vtoc_map_lock bit (36) aligned, /* Lock on VTOC map operations */ 3 101 3 102 2 volmap_stock_ptr ptr unal, /* Packed pointer to record stock */ 3 103 3 104 2 vtoc_map_stock_ptr ptr unal, /* Packed pointer to VTOCE stock */ 3 105 3 106 2 volmap_async_state fixed bin (17) unaligned, /* Asynchronous update state of Volume Map */ 3 107 2 volmap_async_page fixed bin (17) unaligned, /* Page number for asynchronous update */ 3 108 3 109 2 vol_trouble_count fixed bin (17) unaligned, /* Count of inconsistencies since last salvage */ 3 110 2 scavenger_block_rel bit (18) unaligned; /* Offset to scavenger block, ^0 => scavenging */ 3 111 3 112 3 113 dcl (VOLMAP_ASYNC_IDLE init (0), /* for volmap_async_state */ 3 114 VOLMAP_ASYNC_READ init (1), 3 115 VOLMAP_ASYNC_WRITE init (2)) fixed bin int static options (constant); 3 116 3 117 3 118 /* END OF: pvte.incl.pl1 * * * * * * * * * * * * * * * * */ 381 382 4 1 /* START OF: stock_seg.incl.pl1 * * * * * * * * * * * * * * * * */ 4 2 4 3 dcl stock_segp ptr; 4 4 dcl record_stockp ptr; 4 5 dcl vtoce_stockp ptr; 4 6 dcl stock_seg$ ext; 4 7 4 8 dcl n_in_record_stock fixed bin; 4 9 dcl n_volmap_pages fixed bin; 4 10 dcl n_in_vtoce_stock fixed bin; 4 11 4 12 4 13 dcl 1 stock_seg aligned based (stock_segp), 4 14 4 15 2 meters aligned like rsmeters, 4 16 4 17 2 record_stock_entries fixed bin, /* Number of entries in a record stock */ 4 18 2 vtoce_stock_entries fixed bin, /* Number of entries in a VTOCE stock */ 4 19 2 record_stock_size fixed bin, /* Size of a record stock in words */ 4 20 2 vtoce_stock_size fixed bin, /* Size of a VTOCE stock in words */ 4 21 2 n_stock_entries fixed bin, /* Number of stocks of each type */ 4 22 2 record_stock_arrayp ptr, /* Record stock region */ 4 23 2 vtoce_stock_arrayp ptr; /* VTOCE stock region */ 4 24 4 25 4 26 dcl 1 record_stock aligned based (record_stockp), 4 27 4 28 2 pvtep ptr unal, /* PVTE for this stock */ 4 29 4 30 2 n_in_stock fixed bin (18) uns unal,/* Max number of addresses in stock */ 4 31 2 n_volmap_pages fixed bin (18) uns unal,/* Number of pages in Volume Map */ 4 32 4 33 2 n_free_in_stock fixed bin (18) uns unal,/* Number addresses currently free */ 4 34 2 n_os_in_stock fixed bin (18) uns unal,/* Number addresses currently out-of-service */ 4 35 4 36 2 low_threshold fixed bin (18) uns unal,/* Low threshold for withdrawing from volmap */ 4 37 2 high_threshold fixed bin (18) uns unal,/* High threshold for depositing to volmap */ 4 38 4 39 2 target fixed bin (18) uns unal,/* Target for stock */ 4 40 2 stock_offset bit (18) unal, /* Offset of stock in this structure */ 4 41 4 42 2 n_words_in_stock fixed bin (18) uns unal,/* Number of words = Number of entries / 2 */ 4 43 2 search_index fixed bin (18) uns unal,/* Roving pointer */ 4 44 4 45 2 old_volmap_page (3) aligned, /* N_OLD_VOLMAP_PAGES (cif) */ 4 46 3 last fixed bin (18) uns unal,/* Roving pointer */ 4 47 3 pad bit (18) unal, 4 48 4 49 2 volmap_page (n_volmap_pages refer (record_stock.n_volmap_pages)) aligned, 4 50 3 n_free fixed bin (18) uns unal,/* Number free records in this volmap page */ 4 51 3 baseadd fixed bin (17) unal, /* First record address described by this page */ 4 52 4 53 2 stock (n_in_record_stock refer (record_stock.n_in_stock)) bit (18) unal; /* Stock array of addresses */ 4 54 /* bit 0 ON => out-of-service */ 4 55 4 56 4 57 dcl 1 vtoce_stock aligned based (vtoce_stockp), 4 58 2 pvtep ptr unal, /* PVTE for this stock */ 4 59 2 n_in_stock fixed bin (18) uns unal,/* Max number indices in stock */ 4 60 2 n_free_in_stock fixed bin (18) uns unal,/* Number indices currently free */ 4 61 2 target fixed bin (18) uns unal,/* Target when withdrawing/depositing */ 4 62 2 search_index fixed bin (18) uns unal,/* Roving pointer */ 4 63 2 stock (n_in_vtoce_stock refer (vtoce_stock.n_in_stock)) fixed bin (17) unal; /* Stock array of VTOCE indices */ 4 64 4 65 4 66 dcl 1 rsmeters aligned based, 4 67 4 68 2 async_read_calls fixed bin (35), /* Number of asynchronous read attempts */ 4 69 2 async_page_reads fixed bin (35), /* Number of times page read was required */ 4 70 2 async_post_io_calls fixed bin (35), /* Number of times read or write posted */ 4 71 2 deposit_calls fixed bin (35), /* Number of times deposit called */ 4 72 2 async_post_io_time fixed bin (71), /* CPU time posting I/Os (interrupt side) */ 4 73 2 deposit_time fixed bin (71), /* CPU time in deposit (call side) */ 4 74 2 low_thresh_detected fixed bin (35), /* Number of times stock below low threshold */ 4 75 2 high_thresh_detected fixed bin (35), /* Number of times stock above high threshold */ 4 76 2 low_thresh_fails fixed bin (35), /* Number of times no records in volmap */ 4 77 2 withdraw_stock_steps fixed bin (35), /* Number steps thru stock in withdraw */ 4 78 2 withdraw_stock_losses fixed bin (35), /* Number lockless losses */ 4 79 2 n_withdraw_attempt fixed bin (35), /* Number attempts to withdraw a page */ 4 80 2 n_withdraw_range fixed bin (35), /* Number attempts to withdraw within range */ 4 81 2 n_pages_withdraw_stock fixed bin (35), /* Number pages withdrawn from stock */ 4 82 2 n_pages_withdraw_async fixed bin (35), /* Number pages withdrawn from volmap */ 4 83 2 n_v_withdraw_attempts fixed bin (35), /* Number attempts to withdraw from volmap */ 4 84 2 withdraw_volmap_steps fixed bin (35), /* Number steps thru volmap in withdraw */ 4 85 2 deposit_stock_steps fixed bin (35), /* Number steps thru stock in deposit */ 4 86 2 deposit_stock_losses fixed bin (35), /* Number lockless losses */ 4 87 2 n_deposit_attempt fixed bin (35), /* Number attempts to deposit a page */ 4 88 2 n_pages_deposit_stock fixed bin (35), /* Number pages deposited to stock */ 4 89 2 n_pages_deposit_volmap fixed bin (35), /* Number pages deposited to volmap */ 4 90 2 n_v_deposit_attempts fixed bin (35), /* Number attempts to deposit to volmap */ 4 91 2 reset_os_calls fixed bin (35), /* Number calls to reset_os */ 4 92 2 reset_os_losses fixed bin (35), /* Number lockless losses */ 4 93 2 withdraw_calls fixed bin (35), /* Number calls to withdraw */ 4 94 2 withdraw_time fixed bin (71), /* CPU time in withdraw (page-fault) */ 4 95 2 pc_deposit_time fixed bin (71), /* CPU time in pc_deposit */ 4 96 2 pc_deposit_calls fixed bin (35), /* Number calls to pc_deposit */ 4 97 2 pc_deposit_pages fixed bin (35), /* Number pages deposited by pc_deposit */ 4 98 2 get_free_vtoce_calls fixed bin (35), /* Number calls to get_free_vtoce */ 4 99 2 return_free_vtoce_call fixed bin (35), /* Number calls to return_free_vtoce */ 4 100 2 deposit_vstock_calls fixed bin (35), /* Number attempts to deposit to vtoce stock */ 4 101 2 deposit_vstock_fails fixed bin (35), /* Number times deposit failed */ 4 102 2 withdraw_vstock_calls fixed bin (35), /* Number attempts to withdraw from vtoce stock */ 4 103 2 withdraw_vstock_fails fixed bin (35), /* Number times withdraw failed */ 4 104 2 deposit_vtoc_map fixed bin (35), /* Number times vtoce deposited to map */ 4 105 2 withdraw_check_scav fixed bin (35), /* Number times withdraw checked an address for scavenge */ 4 106 2 withdraw_conflict fixed bin (35), /* Number times conflict found */ 4 107 2 pad (11) fixed bin (35); 4 108 4 109 4 110 dcl N_OLD_VOLMAP_PAGES fixed bin init (3) int static options (constant); 4 111 dcl DEFAULT_N_IN_RECORD_STOCK fixed bin init (104) int static options (constant); 4 112 dcl DEFAULT_N_IN_VTOCE_STOCK fixed bin init (10) int static options (constant); 4 113 4 114 4 115 /* END OF: stock_seg.incl.pl1 * * * * * * * * * * * * * * * * */ 383 384 5 1 /* BEGIN INCLUDE FILE syserr_constants.incl.pl1 ... 11/11/80 W. Olin Sibert */ 5 2 /* 85-02-12, EJ Sharpe - Added sorting class constants, removed AIM_MESSAGE, added new action code names. */ 5 3 /* 85-04-24, G. Palter - Renamed SYSERR_UNUSED_10 to SYSERR_RING1_ERROR to reflect its actual use. */ 5 4 5 5 /* This include file has an ALM version. Keep 'em in sync! */ 5 6 5 7 dcl ( 5 8 5 9 /* The following constants define the message action codes. This indicates 5 10*how a message is to be handled. */ 5 11 5 12 SYSERR_CRASH_SYSTEM init (1), 5 13 CRASH init (1), /* Crash the system, and bleat plaintively. */ 5 14 5 15 SYSERR_TERMINATE_PROCESS init (2), 5 16 TERMINATE_PROCESS init (2), /* Terminate the process, print the message, and beep. */ 5 17 5 18 SYSERR_PRINT_WITH_ALARM init (3), 5 19 BEEP init (3), /* Beep and print the message on the console. */ 5 20 5 21 SYSERR_PRINT_ON_CONSOLE init (0), 5 22 ANNOUNCE init (0), /* Just print the message on the console. */ 5 23 5 24 SYSERR_LOG_OR_PRINT init (4), 5 25 LOG init (4), /* Log the message, or print it if it can't be logged */ 5 26 5 27 SYSERR_LOG_OR_DISCARD init (5), 5 28 JUST_LOG init (5), /* Just try to log the message, and discard it if it can't be */ 5 29 5 30 5 31 /* The following constants are added to the normal severities to indicate 5 32*different sorting classes of messages. */ 5 33 5 34 SYSERR_SYSTEM_ERROR init (00), /* indicates a standard level system error */ 5 35 SYSERR_RING1_ERROR init (10), /* indicates an error detected in ring 1 (mseg_, RCP) */ 5 36 SYSERR_COVERT_CHANNEL init (20), /* indicates covert channel audit trail message */ 5 37 SYSERR_UNSUCCESSFUL_ACCESS init (30), /* indicates access denial audit trail message */ 5 38 SYSERR_SUCCESSFUL_ACCESS init (40) /* indicates access grant audit trail message */ 5 39 ) fixed bin internal static options (constant); 5 40 5 41 /* END INCLUDE FILE syserr_constants.incl.pl1 */ 385 386 6 1 /* BEGIN INCLUDE FILE ... vol_map.incl.pl1 */ 6 2 6 3 dcl vol_mapp ptr; 6 4 6 5 dcl 1 vol_map based (vol_mapp) aligned, 6 6 6 7 2 n_rec fixed bin(17), /* number of records represented in the map */ 6 8 2 base_add fixed bin(17), /* record number for first bit in bit map */ 6 9 2 n_free_rec fixed bin(17), /* number of free records */ 6 10 2 bit_map_n_words fixed bin(17), /* number of words of the bit map */ 6 11 2 pad (60) bit(36), /* pad to 64 words */ 6 12 2 bit_map (3*1024 - 64) bit(36) ; /* bit map - the entire vol map occupies 3 records */ 6 13 6 14 /* END INCLUDE ... vol_map */ 387 388 7 1 /* BEGIN INCLUDE FILE ... vtoc_header.incl.pl1 */ 7 2 7 3 dcl vtoc_headerp ptr; 7 4 7 5 dcl 1 vtoc_header based (vtoc_headerp) aligned, 7 6 7 7 2 version fixed bin (17), /* version number. The current version number is 1. * */ 7 8 2 n_vtoce fixed bin (17), /* number of vtoc entries */ 7 9 2 vtoc_last_recno fixed bin (17), /* record number of the last record of the vtoc */ 7 10 2 n_free_vtoce fixed bin (17), /* number of free vtoc entries */ 7 11 2 first_free_vtocx fixed bin (17), /* index of the first vtoce in the free list */ 7 12 2 pad (3) bit (36), 7 13 2 dmpr_bit_map (2048 - 8) bit (36); /* space for dmpr bit map */ 7 14 7 15 /* END INCLUDE ... vtoc_header */ 7 16 389 390 8 1 /* START OF: vtoc_map.incl.pl1 ... March 1982 ... * * * * * * * * * * * * * * * * */ 8 2 8 3 dcl vtoc_mapp ptr; 8 4 dcl bit_map_wordp ptr; 8 5 8 6 dcl 1 vtoc_map aligned based (vtoc_mapp), 8 7 2 n_vtoce fixed bin, /* Number of VTOCEs on the device */ 8 8 2 n_free_vtoce fixed bin, /* Number of free VTOCEs */ 8 9 2 bit_map_n_words fixed bin, /* Number of words in the bit map below */ 8 10 2 vtoc_last_recno fixed bin, /* Last record number in VTOC */ 8 11 2 pad (4) fixed bin, 8 12 2 bit_map (0:1024 - 9) bit (36); /* This structure consumes exactly 1 page */ 8 13 8 14 dcl 1 bit_map_word aligned based (bit_map_wordp), 8 15 2 pad1 bit (1) unal, 8 16 2 bits bit (32) unal, /* 32 VTOCES ON => free */ 8 17 2 pad2 bit (3) unal; 8 18 8 19 8 20 8 21 /* END OF: vtoc_map.incl.pl1 * * * * * * * * * * * * * * * * */ 391 392 393 /* BEGIN MESSAGE DOCUMENTATION 394* 395* Message: 396* init_volmap_seg: Unable to initialize dumper map for dskX_NN(PVNAME) 397* 398* S: $info 399* 400* T: During system initialization as physical volumes of the Root 401* Logical Volume (RLV) are accepted, during system start_up as physical 402* volumes which were mounted at the last shutdown are accepted, or 403* when a physical volume is mounted and accepted. 404* 405* M: An unexpected error was encountered in initializing the 406* backup queue bit map for the Physical Volume Dumper. The volume 407* on which the error occurred cannot be backed up with the Physical 408* Volume Dumper. 409* 410* A: $inform 411* 412* 413* Message: 414* init_volmap_seg: Unable to get NK ASTE for VTOC header. 415* 416* S: $crash 417* 418* T: During system initialization as physical volumes of the Root 419* Logical Volume (RLV) are accepted, during system start_up as physical 420* volumes which were mounted at the last shutdown are accepted, or 421* when a physical volume is mounted and accepted. 422* 423* M: An NK ASTE was not available for accessing the VTOC header. 424* The most likely cause is an ASTE pool size which is too small. 425* 426* A: $recover 427* Increase the number of ASTEs in the appropriate pool by means of the 428* SST configuration card. 429* 430* Message: 431* init_volmap_seg: Unable to get NK ASTE for volmap_seg. 432* 433* S: $crash 434* 435* T: During system initialization as physical volumes of the Root 436* Logical Volume (RLV) are accepted, during system start_up as physical 437* volumes which were mounted at the last shutdown are accepted, or 438* when a physical volume is mounted and accepted. 439* 440* M: An NK ASTE was not available for accessing the Volume Map. 441* The most likely cause is an ASTE pool size which is too small. 442* 443* A: $recover 444* Increase the number of ASTEs in the appropriate pool by means of the 445* SST configuration card. 446* 447* Message: 448* init_volmap_seg: Records left on dskX_NN(PVNAME) changed from X to Y. 449* 450* S: $log 451* 452* T: During system initialization as physical volumes of the Root 453* Logical Volume (RLV) are accepted, during system start_up as physical 454* volumes which were mounted at the last shutdown are accepted, or 455* when a physical volume is mounted and accepted. 456* 457* M: A VTOC header was encountered which did not agree with the Volume 458* Map. This will occur when a volume which was not shut down properly is 459* mounted. 460* 461* A: $inform 462* 463* Message: 464* init_volmap_seg: VTOCEs left on dskX_NN(PVNAME) changed from X to Y. 465* 466* S: $log 467* 468* T: During system initialization as physical volumes of the Root 469* Logical Volume (RLV) are accepted, during system start_up as physical 470* volumes which were mounted at the last shutdown are accepted, or 471* when a physical volume is mounted and accepted. 472* 473* M: A VTOC header was encountered which did not agree with the VTOC 474* Map. This will occur when a volume which was not shut down properly is 475* mounted. 476* 477* A: $inform 478* 479* Message: 480* init_volmap_seg: YYYY volume inconsistencies on dskX_NN(PVNAME). UUUU records left. VVVV VTOCEs left. 481* 482* S: Logged only if the number of free records and the number of free 483* VTOCEs are both above thresholds. Logged and printed on the console if 484* either is below threshold. 485* 486* T: During system initialization as physical volumes of the Root 487* Logical Volume (RLV) are accepted, during system start_up as physical 488* volumes which were mounted at the last shutdown are accepted, or 489* when a physical volume is mounted and accepted. 490* 491* M: The volume was not shut down properly or inconsistencies were 492* detected while the volume was mounted. The effect of these inconsistencies 493* is that free records and free VTOCEs are lost to the system. Lost records 494* and VTOCEs can be recovered by a volume salvage. 495* 496* A: $inform 497* 498* END MESSAGE DOCUMENTATION */ 499 500 end init_volmap_seg; SOURCE FILES USED IN THIS COMPILATION. LINE NUMBER DATE MODIFIED NAME PATHNAME 0 11/11/89 0838.7 init_volmap_seg.pl1 >special_ldd>install>MR12.3-1114>init_volmap_seg.pl1 377 1 01/30/85 1523.9 aste.incl.pl1 >ldd>include>aste.incl.pl1 379 2 10/22/86 1450.1 disk_pack.incl.pl1 >ldd>include>disk_pack.incl.pl1 381 3 07/21/88 2036.0 pvte.incl.pl1 >ldd>include>pvte.incl.pl1 383 4 10/25/82 1015.6 stock_seg.incl.pl1 >ldd>include>stock_seg.incl.pl1 385 5 05/17/85 0615.7 syserr_constants.incl.pl1 >ldd>include>syserr_constants.incl.pl1 387 6 04/29/76 1050.5 vol_map.incl.pl1 >ldd>include>vol_map.incl.pl1 389 7 05/23/77 0919.3 vtoc_header.incl.pl1 >ldd>include>vtoc_header.incl.pl1 391 8 05/27/82 1525.9 vtoc_map.incl.pl1 >ldd>include>vtoc_map.incl.pl1 NAMES DECLARED IN THIS COMPILATION. IDENTIFIER OFFSET LOC STORAGE CLASS DATA TYPE ATTRIBUTES AND REFERENCES (* indicates a set context) NAMES DECLARED BY DECLARE STATEMENT. ANNOUNCE 000024 constant fixed bin(17,0) initial dcl 5-7 set ref 258 327* CRASH 000021 constant fixed bin(17,0) initial dcl 5-7 set ref 160* 171* Code parameter fixed bin(35,0) dcl 53 set ref 9 349* DUMPER_BIT_MAP_ADDR 000001 constant fixed bin(17,0) initial dcl 2-54 ref 190 LOG 000001 constant fixed bin(17,0) initial dcl 5-7 set ref 221* 246* 260 MIN_RECORDS constant fixed bin(17,0) initial dcl 80 ref 258 267 MIN_VTOCES constant fixed bin(17,0) initial dcl 81 ref 258 267 N_OLD_VOLMAP_PAGES constant fixed bin(17,0) initial dcl 4-110 ref 170 171 180 194 197 197 228 308 Pvname parameter char packed unaligned dcl 52 set ref 9 221* 246* 261* 327* Pvtx parameter fixed bin(17,0) dcl 51 set ref 9 145 164 175 282* 326* VOLMAP_ADDR constant fixed bin(17,0) initial dcl 2-54 ref 195 VTOC_MAP_ADDR 000000 constant fixed bin(17,0) initial dcl 2-54 set ref 197* abs_seg$ 000010 external static fixed bin(17,0) dcl 90 set ref 168 168 324 339 339 addr builtin function dcl 128 ref 144 145 168 168 168 168 180 180 181 181 181 181 204 209 218 218 229 235 243 243 324 326 326 339 339 339 339 345 345 345 345 368 368 368 368 addrel builtin function dcl 129 ref 188 190 190 193 195 195 197 197 aste based structure level 1 dcl 1-11 astep 000142 automatic pointer dcl 1-9 set ref 146* 159* 160 162* 162 164 165 165 165 166 167* 188 335 340* 341* ausedp 000020 external static bit(18) array level 2 packed packed unaligned dcl 94 set ref 162* 173* base_add 000100 automatic fixed bin(17,0) dcl 57 in procedure "init_volmap_seg" set ref 304* 312 313* 313 base_add 1 based fixed bin(17,0) level 2 in structure "vol_map" dcl 6-5 in procedure "init_volmap_seg" ref 304 baseadd 20 based fixed bin(18,0) level 2 in structure "pvte" packed packed unsigned unaligned dcl 3-26 in procedure "init_volmap_seg" set ref 304* baseadd 11(18) based fixed bin(17,0) array level 3 in structure "record_stock" packed packed unaligned dcl 4-26 in procedure "init_volmap_seg" set ref 312* bias 000101 automatic fixed bin(17,0) dcl 58 set ref 303* 312 bin builtin function dcl 130 ref 162 173 228 bit_map 100 based bit(36) array level 2 in structure "vol_map" dcl 6-5 in procedure "init_volmap_seg" set ref 206 209 210 218 218 bit_map 10 based bit(36) array level 2 in structure "vtoc_map" dcl 8-6 in procedure "init_volmap_seg" set ref 233 235 236 243 243 bit_map_n_words 3 based fixed bin(17,0) level 2 in structure "vol_map" dcl 6-5 in procedure "init_volmap_seg" set ref 206 209 210 218* bit_map_n_words 2 based fixed bin(17,0) level 2 in structure "vtoc_map" dcl 8-6 in procedure "init_volmap_seg" set ref 233 235 236 243* code 000102 automatic fixed bin(35,0) dcl 59 set ref 269* 326* 327 330* 349 354* convert builtin function dcl 131 ref 221 221 246 246 261 261 327 327 dbm_man$init_map 000024 constant entry external dcl 101 ref 326 ddnp 12(15) based bit(1) level 2 in structure "aste" packed packed unaligned dcl 1-11 in procedure "init_volmap_seg" set ref 165* ddnp 12(15) based bit(1) level 2 in structure "vaste" packed packed unaligned dcl 86 in procedure "init_volmap_seg" set ref 176* devname 3 based char(4) level 2 dcl 3-26 set ref 221* 246* 261* 327* divide builtin function dcl 132 ref 158 dmpr_bit_map 10 based bit(36) array level 2 dcl 7-5 set ref 326 326 dnzp 12(13) based bit(1) level 2 in structure "aste" packed packed unaligned dcl 1-11 in procedure "init_volmap_seg" set ref 165* dnzp 12(13) based bit(1) level 2 in structure "vaste" packed packed unaligned dcl 86 in procedure "init_volmap_seg" set ref 176* error_table_$fsdisk_not_salv 000012 external static fixed bin(35,0) dcl 91 ref 269 error_table_$fsdisk_phydev_err 000014 external static fixed bin(35,0) dcl 92 ref 354 get_aste 000026 constant entry external dcl 102 ref 159 170 get_ptrs_$given_astep 000030 constant entry external dcl 103 ref 167 179 hbound builtin function dcl 133 ref 206 210 233 236 hc_part_used 4(32) based bit(1) level 2 packed packed unaligned dcl 3-26 ref 265 282 init_hc_part$terminate_hc_part 000032 constant entry external dcl 105 ref 282 lock$lock_ast 000034 constant entry external dcl 107 ref 156 333 357 lock$unlock_ast 000036 constant entry external dcl 108 ref 183 347 logical_area_number 4(09) based fixed bin(8,0) level 2 packed packed unaligned dcl 3-26 ref 221 221 246 246 261 261 327 327 map_free_count 000040 constant entry external dcl 109 ref 218 243 309 n_free 11 based fixed bin(18,0) array level 3 packed packed unsigned unaligned dcl 4-26 set ref 311* n_free_rec 2 based fixed bin(17,0) level 2 dcl 6-5 set ref 219 221* 223* 291 n_free_vtoce 5 based fixed bin(17,0) level 2 in structure "pvte" packed packed unaligned dcl 3-26 in procedure "init_volmap_seg" set ref 293* n_free_vtoce 1 based fixed bin(17,0) level 2 in structure "vtoc_map" dcl 8-6 in procedure "init_volmap_seg" set ref 244 246* 248* 293 n_free_vtoce 000103 automatic fixed bin(17,0) dcl 60 in procedure "init_volmap_seg" set ref 243* 244 246* 248 258 261* 267 n_rec based fixed bin(17,0) level 2 dcl 6-5 ref 290 n_vtoce based fixed bin(17,0) level 2 in structure "vtoc_map" dcl 8-6 in procedure "init_volmap_seg" ref 295 n_vtoce 17(18) based fixed bin(17,0) level 2 in structure "pvte" packed packed unaligned dcl 3-26 in procedure "init_volmap_seg" set ref 295* nleft 7 based fixed bin(17,0) level 2 packed packed unaligned dcl 3-26 set ref 291* nqsw 5(20) based bit(1) level 2 in structure "vaste" packed packed unaligned dcl 86 in procedure "init_volmap_seg" set ref 176* nqsw 5(20) based bit(1) level 2 in structure "aste" packed packed unaligned dcl 1-11 in procedure "init_volmap_seg" set ref 165* null builtin function dcl 134 ref 146 147 150 151 160 171 335 360 362 364 ox 000104 automatic fixed bin(17,0) dcl 61 set ref 308* 311 312* p99 automatic picture(2) packed unaligned dcl 62 ref 221 221 246 246 261 261 327 327 page_fault_error 000134 stack reference condition dcl 141 ref 199 280 page_left 000105 automatic fixed bin(17,0) dcl 63 set ref 309* 311 page_n_words 000106 automatic fixed bin(17,0) dcl 64 set ref 306* 309* 314 315* page_offset 000107 automatic fixed bin(19,0) dcl 65 set ref 305* 309 309 314* 314 pagex 000110 automatic fixed bin(17,0) dcl 66 set ref 189* 190 190 190* 194* 195 195 195* pc$cleanup 000042 constant entry external dcl 110 ref 340 369 pmut$swap_sdw 000044 constant entry external dcl 111 ref 168 181 339 345 368 ptp 000112 automatic pointer dcl 67 set ref 188* 190 190 193* 195 195 197 197 ptr builtin function dcl 135 ref 229 309 309 ptsi 13(28) based bit(2) level 2 in structure "vaste" packed packed unaligned dcl 86 in procedure "init_volmap_seg" ref 173 ptsi 13(28) based bit(2) level 2 in structure "aste" packed packed unaligned dcl 1-11 in procedure "init_volmap_seg" ref 162 ptw_util_$make_disk 000046 constant entry external dcl 112 ref 190 195 197 put_aste 000050 constant entry external dcl 113 ref 341 370 pvt$array 000070 external static fixed bin(17,0) dcl 3-18 set ref 144 pvt_array based structure array level 1 dcl 3-24 set ref 145 pvt_arrayp 000144 automatic pointer dcl 3-21 set ref 144* 145 pvte based structure level 1 dcl 3-26 pvtep 000146 automatic pointer dcl 3-22 set ref 145* 221 221 221 246 246 246 256 261 261 261 261 261 265 282 285* 286* 288 289 290 291 292 293 294 295 304 327 327 327 362* 364* pvtx 4(09) based fixed bin(8,0) level 2 in structure "vaste" packed packed unaligned dcl 86 in procedure "init_volmap_seg" set ref 175* pvtx 4(09) based fixed bin(8,0) level 2 in structure "aste" packed packed unaligned dcl 1-11 in procedure "init_volmap_seg" set ref 164* record_stock based structure level 1 dcl 4-26 record_stockp 000150 automatic pointer dcl 4-4 set ref 150* 285* 311 312 362 362* rsmeters based structure level 1 dcl 4-66 sdw_util_$set_size 000052 constant entry external dcl 114 ref 180 severity 000114 automatic fixed bin(17,0) dcl 68 set ref 258* 260* 261* size builtin function dcl 136 ref 158 sst$astsize 000016 external static fixed bin(17,0) dcl 93 ref 188 193 sst$level 000020 external static structure array level 1 dcl 94 stock_man$allocate_record_stock 000054 constant entry external dcl 115 ref 285 stock_man$allocate_vtoce_stock 000056 constant entry external dcl 117 ref 286 stock_man$free_record_stock 000060 constant entry external dcl 119 ref 362 stock_man$free_vtoce_stock 000062 constant entry external dcl 121 ref 364 syserr 000064 constant entry external dcl 123 ref 160 171 221 246 261 327 thread$out 000066 constant entry external dcl 124 ref 162 173 totrec 7(18) based fixed bin(17,0) level 2 packed packed unaligned dcl 3-26 set ref 290* tsdw 000116 automatic fixed bin(71,0) dcl 69 set ref 148* 167* 168 168 338* 339 339 unspec builtin function dcl 137 set ref 211* 237* unused_map based bit(36) array dcl 85 set ref 211* 237* unused_map_words 000122 automatic fixed bin(17,0) dcl 71 set ref 210* 211 236* 237 unused_mapp 000120 automatic pointer dcl 70 set ref 209* 211 235* 237 vaste based structure level 1 dcl 86 vastep 000124 automatic pointer dcl 72 set ref 147* 170* 171 173* 173 175 176 176 176 177 178 179* 193 288 360 369* 370* vleft 000126 automatic fixed bin(17,0) dcl 73 set ref 218* 219 221* 223 258 261* 267 vol_map based structure level 1 dcl 6-5 vol_mapp 000154 automatic pointer dcl 6-3 set ref 204* 206 206 209 209 210 210 218 218 218 219 221 223 290 291 304 309 309 vol_trouble_count 33 based fixed bin(17,0) level 2 packed packed unaligned dcl 3-26 set ref 256 261* 261 volmap_abs_seg$ 000022 external static fixed bin(17,0) dcl 97 set ref 181 181 204 229 345 345 368 368 volmap_astep 24 based pointer level 2 packed packed unaligned dcl 3-26 set ref 288* volmap_page 11 based structure array level 2 dcl 4-26 volmap_seg 5(23) based bit(1) level 2 packed packed unaligned dcl 86 set ref 177* volmap_seg_sdw 22 based fixed bin(71,0) level 2 dcl 3-26 set ref 289* vsdw 000130 automatic fixed bin(71,0) dcl 74 set ref 149* 179* 180 180 181 181 289 344* 345 345 367* 368 368 vtoc_header based structure level 1 dcl 7-5 set ref 158 vtoc_header_pages 000132 automatic fixed bin(17,0) dcl 75 set ref 158* 159* 160* 189 vtoc_headerp 000156 automatic pointer dcl 7-3 set ref 158 324* 326 326 vtoc_last_recno 3 based fixed bin(17,0) level 2 dcl 8-6 ref 294 vtoc_map based structure level 1 dcl 8-6 vtoc_map_offset 25(18) based bit(18) level 2 in structure "pvte" packed packed unaligned dcl 3-26 in procedure "init_volmap_seg" set ref 292* vtoc_map_offset 000133 automatic bit(18) packed unaligned dcl 76 in procedure "init_volmap_seg" set ref 228* 229 292 vtoc_mapp 000160 automatic pointer dcl 8-3 set ref 229* 233 233 235 235 236 236 243 243 243 244 246 248 293 294 295 vtoc_size 5(18) based fixed bin(17,0) level 2 packed packed unaligned dcl 3-26 set ref 294* vtoce_stockp 000152 automatic pointer dcl 4-5 set ref 151* 286* 364 364* vtocx 4(18) based fixed bin(17,0) level 2 in structure "vaste" packed packed unaligned dcl 86 in procedure "init_volmap_seg" set ref 178* vtocx 4(18) based fixed bin(17,0) level 2 in structure "aste" packed packed unaligned dcl 1-11 in procedure "init_volmap_seg" set ref 166* NAMES DECLARED BY DECLARE STATEMENT AND NEVER REFERENCED. BEEP internal static fixed bin(17,0) initial dcl 5-7 DEFAULT_HCPART_SIZE internal static fixed bin(17,0) initial dcl 2-54 DEFAULT_N_IN_RECORD_STOCK internal static fixed bin(17,0) initial dcl 4-111 DEFAULT_N_IN_VTOCE_STOCK internal static fixed bin(17,0) initial dcl 4-112 JUST_LOG internal static fixed bin(17,0) initial dcl 5-7 LABEL_ADDR internal static fixed bin(17,0) initial dcl 2-54 MAX_VTOCE_PER_PACK internal static fixed bin(17,0) initial dcl 2-54 PAGE_SIZE internal static fixed bin(17,0) initial dcl 2-67 SECTORS_PER_RECORD internal static fixed bin(17,0) initial array dcl 2-74 SECTORS_PER_VTOCE internal static fixed bin(17,0) initial array dcl 2-70 SYSERR_COVERT_CHANNEL internal static fixed bin(17,0) initial dcl 5-7 SYSERR_CRASH_SYSTEM internal static fixed bin(17,0) initial dcl 5-7 SYSERR_LOG_OR_DISCARD internal static fixed bin(17,0) initial dcl 5-7 SYSERR_LOG_OR_PRINT internal static fixed bin(17,0) initial dcl 5-7 SYSERR_PRINT_ON_CONSOLE internal static fixed bin(17,0) initial dcl 5-7 SYSERR_PRINT_WITH_ALARM internal static fixed bin(17,0) initial dcl 5-7 SYSERR_RING1_ERROR internal static fixed bin(17,0) initial dcl 5-7 SYSERR_SUCCESSFUL_ACCESS internal static fixed bin(17,0) initial dcl 5-7 SYSERR_SYSTEM_ERROR internal static fixed bin(17,0) initial dcl 5-7 SYSERR_TERMINATE_PROCESS internal static fixed bin(17,0) initial dcl 5-7 SYSERR_UNSUCCESSFUL_ACCESS internal static fixed bin(17,0) initial dcl 5-7 TERMINATE_PROCESS internal static fixed bin(17,0) initial dcl 5-7 VOLMAP_ASYNC_IDLE internal static fixed bin(17,0) initial dcl 3-113 VOLMAP_ASYNC_READ internal static fixed bin(17,0) initial dcl 3-113 VOLMAP_ASYNC_WRITE internal static fixed bin(17,0) initial dcl 3-113 VTOCES_PER_RECORD internal static fixed bin(17,0) initial array dcl 2-72 VTOCE_SIZE internal static fixed bin(17,0) initial dcl 2-68 VTOC_ORIGIN internal static fixed bin(17,0) initial dcl 2-54 asta based bit(432) array dcl 1-86 aste_part based structure level 1 dcl 1-89 bit_map_word based structure level 1 dcl 8-14 bit_map_wordp automatic pointer dcl 8-4 n_in_record_stock automatic fixed bin(17,0) dcl 4-8 n_in_vtoce_stock automatic fixed bin(17,0) dcl 4-10 n_volmap_pages automatic fixed bin(17,0) dcl 4-9 pvt$max_n_entries external static fixed bin(17,0) dcl 3-19 seg_aste based structure level 1 dcl 1-96 stock_seg based structure level 1 dcl 4-13 stock_seg$ external static fixed bin(17,0) dcl 4-6 stock_segp automatic pointer dcl 4-3 vtoce_stock based structure level 1 dcl 4-57 NAMES DECLARED BY EXPLICIT CONTEXT. CLEANUP_AFTER_ERROR 001661 constant label dcl 357 ref 270 CLEANUP_AFTER_IO_ERROR 001656 constant label dcl 354 ref 199 CLEANUP_FINISH 001565 constant label dcl 335 ref 374 init_volmap_seg 000205 constant entry external dcl 9 NAME DECLARED BY CONTEXT OR IMPLICATION. bit builtin function ref 228 STORAGE REQUIREMENTS FOR THIS PROGRAM. Object Text Link Symbol Defs Static Start 0 0 2316 2410 1762 2326 Length 3006 1762 72 361 333 0 BLOCK NAME STACK SIZE TYPE WHY NONQUICK/WHO SHARES STACK FRAME init_volmap_seg 248 external procedure is an external procedure. on unit on line 199 64 on unit STORAGE FOR AUTOMATIC VARIABLES. STACK FRAME LOC IDENTIFIER BLOCK NAME init_volmap_seg 000100 base_add init_volmap_seg 000101 bias init_volmap_seg 000102 code init_volmap_seg 000103 n_free_vtoce init_volmap_seg 000104 ox init_volmap_seg 000105 page_left init_volmap_seg 000106 page_n_words init_volmap_seg 000107 page_offset init_volmap_seg 000110 pagex init_volmap_seg 000112 ptp init_volmap_seg 000114 severity init_volmap_seg 000116 tsdw init_volmap_seg 000120 unused_mapp init_volmap_seg 000122 unused_map_words init_volmap_seg 000124 vastep init_volmap_seg 000126 vleft init_volmap_seg 000130 vsdw init_volmap_seg 000132 vtoc_header_pages init_volmap_seg 000133 vtoc_map_offset init_volmap_seg 000142 astep init_volmap_seg 000144 pvt_arrayp init_volmap_seg 000146 pvtep init_volmap_seg 000150 record_stockp init_volmap_seg 000152 vtoce_stockp init_volmap_seg 000154 vol_mapp init_volmap_seg 000156 vtoc_headerp init_volmap_seg 000160 vtoc_mapp init_volmap_seg THE FOLLOWING EXTERNAL OPERATORS ARE USED BY THIS PROGRAM. r_e_as call_ext_out_desc call_ext_out return_mac tra_ext_1 enable_op ext_entry_desc int_entry THE FOLLOWING EXTERNAL ENTRIES ARE CALLED BY THIS PROGRAM. dbm_man$init_map get_aste get_ptrs_$given_astep init_hc_part$terminate_hc_part lock$lock_ast lock$unlock_ast map_free_count pc$cleanup pmut$swap_sdw ptw_util_$make_disk put_aste sdw_util_$set_size stock_man$allocate_record_stock stock_man$allocate_vtoce_stock stock_man$free_record_stock stock_man$free_vtoce_stock syserr thread$out THE FOLLOWING EXTERNAL VARIABLES ARE USED BY THIS PROGRAM. abs_seg$ error_table_$fsdisk_not_salv error_table_$fsdisk_phydev_err pvt$array sst$astsize sst$level volmap_abs_seg$ LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC LINE LOC 9 000201 144 000220 145 000222 146 000227 147 000231 148 000232 149 000234 150 000235 151 000237 156 000240 158 000244 159 000247 160 000260 162 000307 164 000324 165 000331 166 000337 167 000341 168 000352 170 000367 171 000402 173 000434 175 000451 176 000456 177 000464 178 000466 179 000470 180 000501 181 000516 183 000533 188 000540 189 000545 190 000555 191 000576 193 000600 194 000605 195 000615 196 000636 197 000640 199 000654 204 000673 206 000676 209 000701 210 000703 211 000706 218 000714 219 000730 221 000734 223 001015 228 001020 229 001026 233 001033 235 001040 236 001043 237 001045 243 001053 244 001070 246 001074 248 001155 256 001160 258 001164 260 001176 261 001200 265 001274 267 001300 269 001306 270 001311 280 001312 282 001313 285 001327 286 001340 288 001351 289 001354 290 001356 291 001360 292 001364 293 001367 294 001373 295 001376 303 001400 304 001402 305 001406 306 001410 308 001412 309 001421 311 001440 312 001446 313 001452 314 001454 315 001456 316 001460 324 001462 326 001465 327 001502 330 001557 333 001560 335 001565 338 001571 339 001573 340 001610 341 001617 344 001626 345 001630 347 001645 349 001652 351 001655 354 001656 357 001661 360 001665 362 001671 364 001706 367 001723 368 001725 369 001742 370 001751 374 001760 ----------------------------------------------------------- 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