-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathunicos.html
961 lines (833 loc) · 334 KB
/
unicos.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
<!DOCTYPE html>
<!--[if IE 6]>
<html id="ie6" lang="en-US">
<![endif]-->
<!--[if IE 7]>
<html id="ie7" lang="en-US">
<![endif]-->
<!--[if IE 8]>
<html id="ie8" lang="en-US">
<![endif]-->
<!--[if !(IE 6) & !(IE 7) & !(IE 8)]><!-->
<html lang="en-US">
<!--<![endif]-->
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width" />
<title>The UNICOS File-system | Modular Circuits</title>
<link rel="profile" href="http://gmpg.org/xfn/11" />
<link rel="stylesheet" type="text/css" media="all" href="http://www.modularcircuits.com/blog/wp-content/themes/twentyeleven-child/style.css" />
<link rel="pingback" href="http://www.modularcircuits.com/blog/xmlrpc.php" />
<!--[if lt IE 9]>
<script src="http://www.modularcircuits.com/blog/wp-content/themes/twentyeleven/js/html5.js" type="text/javascript"></script>
<![endif]-->
<link rel='dns-prefetch' href='//s.w.org' />
<link rel="alternate" type="application/rss+xml" title="Modular Circuits » Feed" href="http://www.modularcircuits.com/blog/feed/" />
<link rel="alternate" type="application/rss+xml" title="Modular Circuits » Comments Feed" href="http://www.modularcircuits.com/blog/comments/feed/" />
<script type="text/javascript">
window._wpemojiSettings = {"baseUrl":"https:\/\/s.w.org\/images\/core\/emoji\/2.3\/72x72\/","ext":".png","svgUrl":"https:\/\/s.w.org\/images\/core\/emoji\/2.3\/svg\/","svgExt":".svg","source":{"concatemoji":"http:\/\/www.modularcircuits.com\/blog\/wp-includes\/js\/wp-emoji-release.min.js?ver=4.8.1"}};
!function(a,b,c){function d(a){var b,c,d,e,f=String.fromCharCode;if(!k||!k.fillText)return!1;switch(k.clearRect(0,0,j.width,j.height),k.textBaseline="top",k.font="600 32px Arial",a){case"flag":return k.fillText(f(55356,56826,55356,56819),0,0),b=j.toDataURL(),k.clearRect(0,0,j.width,j.height),k.fillText(f(55356,56826,8203,55356,56819),0,0),c=j.toDataURL(),b===c&&(k.clearRect(0,0,j.width,j.height),k.fillText(f(55356,57332,56128,56423,56128,56418,56128,56421,56128,56430,56128,56423,56128,56447),0,0),b=j.toDataURL(),k.clearRect(0,0,j.width,j.height),k.fillText(f(55356,57332,8203,56128,56423,8203,56128,56418,8203,56128,56421,8203,56128,56430,8203,56128,56423,8203,56128,56447),0,0),c=j.toDataURL(),b!==c);case"emoji4":return k.fillText(f(55358,56794,8205,9794,65039),0,0),d=j.toDataURL(),k.clearRect(0,0,j.width,j.height),k.fillText(f(55358,56794,8203,9794,65039),0,0),e=j.toDataURL(),d!==e}return!1}function e(a){var c=b.createElement("script");c.src=a,c.defer=c.type="text/javascript",b.getElementsByTagName("head")[0].appendChild(c)}var f,g,h,i,j=b.createElement("canvas"),k=j.getContext&&j.getContext("2d");for(i=Array("flag","emoji4"),c.supports={everything:!0,everythingExceptFlag:!0},h=0;h<i.length;h++)c.supports[i[h]]=d(i[h]),c.supports.everything=c.supports.everything&&c.supports[i[h]],"flag"!==i[h]&&(c.supports.everythingExceptFlag=c.supports.everythingExceptFlag&&c.supports[i[h]]);c.supports.everythingExceptFlag=c.supports.everythingExceptFlag&&!c.supports.flag,c.DOMReady=!1,c.readyCallback=function(){c.DOMReady=!0},c.supports.everything||(g=function(){c.readyCallback()},b.addEventListener?(b.addEventListener("DOMContentLoaded",g,!1),a.addEventListener("load",g,!1)):(a.attachEvent("onload",g),b.attachEvent("onreadystatechange",function(){"complete"===b.readyState&&c.readyCallback()})),f=c.source||{},f.concatemoji?e(f.concatemoji):f.wpemoji&&f.twemoji&&(e(f.twemoji),e(f.wpemoji)))}(window,document,window._wpemojiSettings);
</script>
<style type="text/css">
img.wp-smiley,
img.emoji {
display: inline !important;
border: none !important;
box-shadow: none !important;
height: 1em !important;
width: 1em !important;
margin: 0 .07em !important;
vertical-align: -0.1em !important;
background: none !important;
padding: 0 !important;
}
</style>
<link rel='stylesheet' id='crayon-css' href='http://www.modularcircuits.com/blog/wp-content/plugins/crayon-syntax-highlighter/css/min/crayon.min.css?ver=_2.7.2_beta' type='text/css' media='all' />
<link rel='stylesheet' id='crayon-theme-classic-css' href='http://www.modularcircuits.com/blog/wp-content/plugins/crayon-syntax-highlighter/themes/classic/classic.css?ver=_2.7.2_beta' type='text/css' media='all' />
<link rel='stylesheet' id='crayon-font-monaco-css' href='http://www.modularcircuits.com/blog/wp-content/plugins/crayon-syntax-highlighter/fonts/monaco.css?ver=_2.7.2_beta' type='text/css' media='all' />
<link rel='stylesheet' id='stcr-plugin-style-css' href='http://www.modularcircuits.com/blog/wp-content/plugins/subscribe-to-comments-reloaded/includes/css/stcr-plugin-style.css?ver=4.8.1' type='text/css' media='all' />
<script type='text/javascript' src='http://www.modularcircuits.com/blog/wp-includes/js/jquery/jquery.js?ver=1.12.4'></script>
<script type='text/javascript' src='http://www.modularcircuits.com/blog/wp-includes/js/jquery/jquery-migrate.min.js?ver=1.4.1'></script>
<script type='text/javascript'>
/* <![CDATA[ */
var CrayonSyntaxSettings = {"version":"_2.7.2_beta","is_admin":"0","ajaxurl":"http:\/\/www.modularcircuits.com\/blog\/wp-admin\/admin-ajax.php","prefix":"crayon-","setting":"crayon-setting","selected":"crayon-setting-selected","changed":"crayon-setting-changed","special":"crayon-setting-special","orig_value":"data-orig-value","debug":""};
var CrayonSyntaxStrings = {"copy":"Press %s to Copy, %s to Paste","minimize":"Click To Expand Code"};
/* ]]> */
</script>
<script type='text/javascript' src='http://www.modularcircuits.com/blog/wp-content/plugins/crayon-syntax-highlighter/js/min/crayon.min.js?ver=_2.7.2_beta'></script>
<script type='text/javascript' src='http://www.modularcircuits.com/blog/wp-content/plugins/subscribe-to-comments-reloaded/includes/js/stcr-plugin.js?ver=4.8.1'></script>
<link rel='https://api.w.org/' href='http://www.modularcircuits.com/blog/wp-json/' />
<link rel="EditURI" type="application/rsd+xml" title="RSD" href="http://www.modularcircuits.com/blog/xmlrpc.php?rsd" />
<link rel="wlwmanifest" type="application/wlwmanifest+xml" href="http://www.modularcircuits.com/blog/wp-includes/wlwmanifest.xml" />
<meta name="generator" content="WordPress 4.8.1" />
<link rel="canonical" href="http://www.modularcircuits.com/blog/articles/the-return-of-the-cray-files/the-unicos-file-system/" />
<link rel='shortlink' href='http://www.modularcircuits.com/blog/?p=1839' />
<link rel="alternate" type="application/json+oembed" href="http://www.modularcircuits.com/blog/wp-json/oembed/1.0/embed?url=http%3A%2F%2Fwww.modularcircuits.com%2Fblog%2Farticles%2Fthe-return-of-the-cray-files%2Fthe-unicos-file-system%2F" />
<link rel="alternate" type="text/xml+oembed" href="http://www.modularcircuits.com/blog/wp-json/oembed/1.0/embed?url=http%3A%2F%2Fwww.modularcircuits.com%2Fblog%2Farticles%2Fthe-return-of-the-cray-files%2Fthe-unicos-file-system%2F&format=xml" />
<script type='text/javascript' src='http://www.modularcircuits.com/blog/wp-content/plugins/anti-captcha/anti-captcha-0.3.js.php?ver=28b60a16b55fd531047c0c958ce14b95'></script>
<style type="text/css">.broken_link, a.broken_link {
text-decoration: line-through;
}</style></head>
<body class="page-template-default page page-id-1839 page-child parent-pageid-1783 single-author singular one-column content">
<div id="page" class="hfeed">
<header id="branding" role="banner">
<hgroup>
<h1 id="site-title"><span><a href="http://www.modularcircuits.com/blog/" rel="home">Modular Circuits</a></span></h1>
<h2 id="site-description"></h2>
</hgroup>
<a href="http://www.modularcircuits.com/blog/">
<img src="http://modularcircuits.tantosonline.com/blog/wp-content/uploads/2013/10/header.jpg" width="1000" height="288" alt="Modular Circuits" />
</a>
<form method="get" id="searchform" action="http://www.modularcircuits.com/blog/">
<label for="s" class="assistive-text">Search</label>
<input type="text" class="field" name="s" id="s" placeholder="Search" />
<input type="submit" class="submit" name="submit" id="searchsubmit" value="Search" />
</form>
<nav id="access" role="navigation">
<h3 class="assistive-text">Main menu</h3>
<div class="skip-link"><a class="assistive-text" href="#content">Skip to primary content</a></div>
<div class="menu"><ul>
<li ><a href="http://www.modularcircuits.com/blog/">Home</a></li><li class="page_item page-item-574 page_item_has_children"><a href="http://www.modularcircuits.com/blog/projects/">Projects</a>
<ul class='children'>
<li class="page_item page-item-669"><a href="http://www.modularcircuits.com/blog/projects/licenses/">Licenses</a></li>
<li class="page_item page-item-607 page_item_has_children"><a href="http://www.modularcircuits.com/blog/projects/h-storm-cpu-modules/">The H-Storm Project</a>
<ul class='children'>
<li class="page_item page-item-617"><a href="http://www.modularcircuits.com/blog/projects/h-storm-cpu-modules/hcat91/">hcAT91</a></li>
<li class="page_item page-item-619"><a href="http://www.modularcircuits.com/blog/projects/h-storm-cpu-modules/hcpci/">hcPCI</a></li>
<li class="page_item page-item-621"><a href="http://www.modularcircuits.com/blog/projects/h-storm-cpu-modules/hpcs8900/">hpCS8900</a></li>
<li class="page_item page-item-623"><a href="http://www.modularcircuits.com/blog/projects/h-storm-cpu-modules/hsstartup/">hsStartup</a></li>
</ul>
</li>
<li class="page_item page-item-613 page_item_has_children"><a href="http://www.modularcircuits.com/blog/projects/umodules/">µModules</a>
<ul class='children'>
<li class="page_item page-item-629"><a href="http://www.modularcircuits.com/blog/projects/umodules/%c2%b5m-h-bridge/">µM-H-Bridge</a></li>
<li class="page_item page-item-634"><a href="http://www.modularcircuits.com/blog/projects/umodules/%c2%b5m-servo-brain/">µM-Servo brain</a></li>
<li class="page_item page-item-632"><a href="http://www.modularcircuits.com/blog/projects/umodules/%c2%b5m-servo-32/">µM-Servo-32</a></li>
</ul>
</li>
<li class="page_item page-item-615 page_item_has_children"><a href="http://www.modularcircuits.com/blog/projects/development-tools/">Development Tools</a>
<ul class='children'>
<li class="page_item page-item-644"><a href="http://www.modularcircuits.com/blog/projects/development-tools/gcc-for-arm-avr-and-blackfin/">GCC for ARM, AVR and BlackFin</a></li>
<li class="page_item page-item-636"><a href="http://www.modularcircuits.com/blog/projects/development-tools/logic-probe/">Logic probe</a></li>
<li class="page_item page-item-638"><a href="http://www.modularcircuits.com/blog/projects/development-tools/parallel-port-jtag-programmer/">Parallel port JTAG programmer</a></li>
<li class="page_item page-item-640"><a href="http://www.modularcircuits.com/blog/projects/development-tools/parallel-port-jtag-programmer-2/">Parallel port JTAG programmer 2</a></li>
<li class="page_item page-item-642"><a href="http://www.modularcircuits.com/blog/projects/development-tools/usb-port-jtag-programmer/">USB port JTAG programmer</a></li>
</ul>
</li>
</ul>
</li>
<li class="page_item page-item-578 page_item_has_children current_page_ancestor"><a href="http://www.modularcircuits.com/blog/articles/">Articles</a>
<ul class='children'>
<li class="page_item page-item-563 page_item_has_children"><a href="http://www.modularcircuits.com/blog/articles/h-bridge-secrets/">H-Bridge Secrets</a>
<ul class='children'>
<li class="page_item page-item-568"><a href="http://www.modularcircuits.com/blog/articles/h-bridge-secrets/h-bridges-the-basics/">H-Bridges – the Basics</a></li>
<li class="page_item page-item-570"><a href="http://www.modularcircuits.com/blog/articles/h-bridge-secrets/sign-magnitude-drive/">Sign-Magnitude Drive</a></li>
<li class="page_item page-item-572"><a href="http://www.modularcircuits.com/blog/articles/h-bridge-secrets/lock-anti-phase-drive/">Lock Anti-Phase Drive</a></li>
<li class="page_item page-item-794"><a href="http://www.modularcircuits.com/blog/articles/h-bridge-secrets/asynchronous-sign-magnitude-drive/">Asynchronous Sign-magnitude Drive</a></li>
<li class="page_item page-item-863"><a href="http://www.modularcircuits.com/blog/articles/h-bridge-secrets/mosfets-and-catch-diodes/">MOSFETs and catch diodes</a></li>
<li class="page_item page-item-889"><a href="http://www.modularcircuits.com/blog/articles/h-bridge-secrets/h-bridge_drivers/">H-Bridge Drivers</a></li>
<li class="page_item page-item-983"><a href="http://www.modularcircuits.com/blog/articles/h-bridge-secrets/h-bridge-control/">H-bridge Control</a></li>
<li class="page_item page-item-1008"><a href="http://www.modularcircuits.com/blog/articles/h-bridge-secrets/safety-features/">Safety features</a></li>
</ul>
</li>
<li class="page_item page-item-687 page_item_has_children"><a href="http://www.modularcircuits.com/blog/articles/old-h-bridge-secrets/">Old H-Bridge Secrets</a>
<ul class='children'>
<li class="page_item page-item-689"><a href="http://www.modularcircuits.com/blog/articles/old-h-bridge-secrets/part-1/">Part 1</a></li>
<li class="page_item page-item-691"><a href="http://www.modularcircuits.com/blog/articles/old-h-bridge-secrets/part-2/">Part 2</a></li>
<li class="page_item page-item-693"><a href="http://www.modularcircuits.com/blog/articles/old-h-bridge-secrets/part-3/">Part 3</a></li>
</ul>
</li>
<li class="page_item page-item-585 page_item_has_children"><a href="http://www.modularcircuits.com/blog/articles/bridge-to-the-far-side/">Bridge to the far-side</a>
<ul class='children'>
<li class="page_item page-item-582"><a href="http://www.modularcircuits.com/blog/articles/bridge-to-the-far-side/motor-modeling/">Motor Modeling</a></li>
<li class="page_item page-item-583"><a href="http://www.modularcircuits.com/blog/articles/bridge-to-the-far-side/how-to-read-motor-datasheets/">How to Read Motor Datasheets</a></li>
<li class="page_item page-item-584"><a href="http://www.modularcircuits.com/blog/articles/bridge-to-the-far-side/modeling-mechanical-systems/">Modeling mechanical systems</a></li>
</ul>
</li>
<li class="page_item page-item-1201 page_item_has_children"><a href="http://www.modularcircuits.com/blog/articles/the-cray-files/">The Cray Files</a>
<ul class='children'>
<li class="page_item page-item-1172"><a href="http://www.modularcircuits.com/blog/articles/the-cray-files/prelude/">Prelude</a></li>
<li class="page_item page-item-1216"><a href="http://www.modularcircuits.com/blog/articles/the-cray-files/a-new-hope/">A New Hope</a></li>
<li class="page_item page-item-1230"><a href="http://www.modularcircuits.com/blog/articles/the-cray-files/the-hunt-for-the-red-bootcode/">The Hunt for the Red Bootcode</a></li>
<li class="page_item page-item-1238"><a href="http://www.modularcircuits.com/blog/articles/the-cray-files/the-return-of-the-cray/">The Return of the Cray</a></li>
<li class="page_item page-item-1386"><a href="http://www.modularcircuits.com/blog/articles/the-cray-files/the-matrix/">The Matrix</a></li>
<li class="page_item page-item-1422"><a href="http://www.modularcircuits.com/blog/articles/the-cray-files/first-update/">First update</a></li>
<li class="page_item page-item-1440"><a href="http://www.modularcircuits.com/blog/articles/the-cray-files/needle-in-the-hay-stack/">Needle in the hay-stack</a></li>
<li class="page_item page-item-1504"><a href="http://www.modularcircuits.com/blog/articles/the-cray-files/a-brave-new-world/">A Brave New World</a></li>
<li class="page_item page-item-1532"><a href="http://www.modularcircuits.com/blog/articles/the-cray-files/multiple-platforms/">Multiple Platforms</a></li>
<li class="page_item page-item-1541"><a href="http://www.modularcircuits.com/blog/articles/the-cray-files/jobs/">Jobs</a></li>
<li class="page_item page-item-1696"><a href="http://www.modularcircuits.com/blog/articles/the-cray-files/parallels/">Parallels</a></li>
<li class="page_item page-item-1739"><a href="http://www.modularcircuits.com/blog/articles/the-cray-files/turbo/">Turbo</a></li>
<li class="page_item page-item-1425"><a href="http://www.modularcircuits.com/blog/articles/the-cray-files/downloads/">Downloads</a></li>
</ul>
</li>
<li class="page_item page-item-1783 page_item_has_children current_page_ancestor current_page_parent"><a href="http://www.modularcircuits.com/blog/articles/the-return-of-the-cray-files/">The Return of the Cray files</a>
<ul class='children'>
<li class="page_item page-item-1782"><a href="http://www.modularcircuits.com/blog/articles/the-return-of-the-cray-files/a-bridge-too-far/">A Bridge too Far</a></li>
<li class="page_item page-item-1792"><a href="http://www.modularcircuits.com/blog/articles/the-return-of-the-cray-files/that-obscure-object-of-desire/">That Obscure Object of Desire</a></li>
<li class="page_item page-item-1813"><a href="http://www.modularcircuits.com/blog/articles/the-return-of-the-cray-files/exploring-the-cd/">Exploring the CD</a></li>
<li class="page_item page-item-1823"><a href="http://www.modularcircuits.com/blog/articles/the-return-of-the-cray-files/a-new-simulator-part-1/">A New Simulator, part 1</a></li>
<li class="page_item page-item-1826"><a href="http://www.modularcircuits.com/blog/articles/the-return-of-the-cray-files/a-new-simulator-part-2/">A New Simulator, part 2</a></li>
<li class="page_item page-item-1834"><a href="http://www.modularcircuits.com/blog/articles/the-return-of-the-cray-files/a-new-simulator-part-3/">A New Simulator, part 3</a></li>
<li class="page_item page-item-1851"><a href="http://www.modularcircuits.com/blog/articles/the-return-of-the-cray-files/oldies-but-goldies/">Oldies But Goldies</a></li>
<li class="page_item page-item-1839 current_page_item"><a href="http://www.modularcircuits.com/blog/articles/the-return-of-the-cray-files/the-unicos-file-system/">The UNICOS File-system</a></li>
</ul>
</li>
</ul>
</li>
<li class="page_item page-item-674"><a href="http://www.modularcircuits.com/blog/contact/">Contact</a></li>
</ul></div>
</nav><!-- #access -->
</header><!-- #branding -->
<div id="main">
<div id="primary">
<div id="content" role="main">
<article id="post-1839" class="post-1839 page type-page status-publish hentry">
<header class="entry-header">
<h1 class="entry-title">The UNICOS File-system</h1>
</header><!-- .entry-header -->
<div class="entry-content">
<div style=text-align:left;><a class="wpptopdfenh" target="_blank" rel="noindex,nofollow" href="/blog/articles/the-return-of-the-cray-files/the-unicos-file-system/?format=pdf" title="Download PDF"><img alt="Download PDF" src="http://www.modularcircuits.com/blog/wp-content/plugins/wp-post-to-pdf-enhanced/asset/images/pdf.png"></a></div><p class="western">Previously I’ve gotten as far as getting the main console more or less working and UNICOS checking in. After cleaning up some garbage on the screen due to some misunderstanding of how the sequence number and acknowledge system worked for the terminal, I have a much cleaner picture now:</p>
<p><img src="data:image/png;base64,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" name="Picture 3" border="0" /></p>
<p>Looking at the screen, there are two ominous warnings: one that the system apparently ‘cannot open root with disk inode’ and the other reporting the file-system to be full. I’ll let the first one slide for now as, apparently the system still boots and look at the second problem: why is the file-system full and what to do about it?</p>
<p>Turning on logging of disk activity and looking at what’s going on, it’s pretty easy to identify the culprit: The OS tries to write the full kernel memory content onto the disk (sort of like a core-dump). But why would it dump the core? If the kernel actually crashed, it wouldn’t have gotten as far as it did, and if it wasn’t the kernel, the dump wouldn’t be of the full memory only of the processes’ memory space.</p>
<p>Maybe that’s what just UNICOS does: it dumps the memory on boot for fun and giggles.</p>
<p>However that possibility brings up the next problem: the file-system I have (ram_fs) clearly isn’t big enough to hold the dump.</p>
<p>(Update: As I much later found out, UNICOS only dumps the kernel memory space if it’s booting off of a IOS-attached disk as opposed to a ram_fs. In this case, however I’ve emulated a virtual hard drive, containing the ram_fs image, which confused the OS. Nevertheless, I didn’t figure out much later how to even boot off of a RAM drive, let alone that that was the problem.)</p>
<p>Whatever the reason is, the solution seems to be to figure out how to re-size an existing file-system. This might turn out to be hard to do, but I have to reverse-engineer the file-system anyway: at the moment I can only exchange files with the OS running in the simulator through creating a FS on the host and mounting it inside the simulator. And exchanging files I must if I want to install the full OS: I need to transfer the install media.</p>
<p>So, how should I go about it?</p>
<p>Let’s go back to our trusted source of information: /usr/include/sys. There’s actually a whole directory here dealing with file-system stuff:</p><!-- Crayon Syntax Highlighter v_2.7.2_beta -->
<div id="crayon-598a6a3599cc1390039940" class="crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover" style=" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;">
<div class="crayon-toolbar" data-settings=" mouseover overlay hide delay" style="font-size: 12px !important;height: 18px !important; line-height: 18px !important;"><span class="crayon-title"></span>
<div class="crayon-tools" style="font-size: 12px !important;height: 18px !important; line-height: 18px !important;"><div class="crayon-button crayon-nums-button" title="Toggle Line Numbers"><div class="crayon-button-icon"></div></div><div class="crayon-button crayon-plain-button" title="Toggle Plain Code"><div class="crayon-button-icon"></div></div><div class="crayon-button crayon-wrap-button" title="Toggle Line Wrap"><div class="crayon-button-icon"></div></div><div class="crayon-button crayon-expand-button" title="Expand Code"><div class="crayon-button-icon"></div></div><div class="crayon-button crayon-copy-button" title="Copy"><div class="crayon-button-icon"></div></div><div class="crayon-button crayon-popup-button" title="Open Code In New Window"><div class="crayon-button-icon"></div></div><span class="crayon-language">Shell</span></div></div>
<div class="crayon-info" style="min-height: 16.8px !important; line-height: 16.8px !important;"></div>
<div class="crayon-plain-wrap"><textarea wrap="soft" class="crayon-plain print-no" data-settings="dblclick" readonly style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;">
$ ls -la
total 165
drwxrwx---+ 1 tantos None 0 Jun 18 07:11 .
drwxrwx---+ 1 tantos None 0 Jun 18 07:11 ..
-rwxrwx---+ 1 tantos None 472 Jun 18 07:11 nc1dir.h
-rwxrwx---+ 1 tantos None 10251 Jun 18 07:11 nc1filsys.h
-rwxrwx---+ 1 tantos None 7709 Jun 18 07:11 nc1ino.h
-rwxrwx---+ 1 tantos None 16110 Jun 18 07:11 nc1inode.h
-rwxrwx---+ 1 tantos None 11884 Jun 18 07:11 nc1proto.h
-rwxrwx---+ 1 tantos None 1625 Jun 18 07:11 ncdir.h
drwxrwx---+ 1 tantos None 0 Jun 18 07:11 nfs
-rwxrwx---+ 1 tantos None 7001 Jun 18 07:11 prfcntl.h
-rwxrwx---+ 1 tantos None 1313 Jun 18 07:11 prmount.h
-rwxrwx---+ 1 tantos None 2307 Jun 18 07:11 prnode.h
-rwxrwx---+ 1 tantos None 985 Jun 18 07:11 sfsblock.h
-rwxrwx---+ 1 tantos None 1034 Jun 18 07:11 sfsconsts.h</textarea></div>
<div class="crayon-main" style="">
<table class="crayon-table">
<tr class="crayon-row">
<td class="crayon-nums " data-settings="show">
<div class="crayon-nums-content" style="font-size: 12px !important; line-height: 15px !important;"><div class="crayon-num" data-line="crayon-598a6a3599cc1390039940-1">1</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cc1390039940-2">2</div><div class="crayon-num" data-line="crayon-598a6a3599cc1390039940-3">3</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cc1390039940-4">4</div><div class="crayon-num" data-line="crayon-598a6a3599cc1390039940-5">5</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cc1390039940-6">6</div><div class="crayon-num" data-line="crayon-598a6a3599cc1390039940-7">7</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cc1390039940-8">8</div><div class="crayon-num" data-line="crayon-598a6a3599cc1390039940-9">9</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cc1390039940-10">10</div><div class="crayon-num" data-line="crayon-598a6a3599cc1390039940-11">11</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cc1390039940-12">12</div><div class="crayon-num" data-line="crayon-598a6a3599cc1390039940-13">13</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cc1390039940-14">14</div><div class="crayon-num" data-line="crayon-598a6a3599cc1390039940-15">15</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cc1390039940-16">16</div></div>
</td>
<td class="crayon-code"><div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="crayon-598a6a3599cc1390039940-1"><span class="crayon-sy">$</span><span class="crayon-h"> </span><span class="crayon-r">ls</span><span class="crayon-h"> </span><span class="crayon-o">-</span><span class="crayon-e">la</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cc1390039940-2"><span class="crayon-i">total</span><span class="crayon-h"> </span><span class="crayon-cn">165</span></div><div class="crayon-line" id="crayon-598a6a3599cc1390039940-3"><span class="crayon-v">drwxrwx</span><span class="crayon-o">--</span><span class="crayon-o">-</span><span class="crayon-o">+</span><span class="crayon-h"> </span><span class="crayon-cn">1</span><span class="crayon-h"> </span><span class="crayon-e">tantos </span><span class="crayon-i">None</span><span class="crayon-h"> </span><span class="crayon-cn">0</span><span class="crayon-h"> </span><span class="crayon-i">Jun</span><span class="crayon-h"> </span><span class="crayon-cn">18</span><span class="crayon-h"> </span><span class="crayon-cn">07</span><span class="crayon-o">:</span><span class="crayon-cn">11</span><span class="crayon-h"> </span><span class="crayon-sy">.</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cc1390039940-4"><span class="crayon-v">drwxrwx</span><span class="crayon-o">--</span><span class="crayon-o">-</span><span class="crayon-o">+</span><span class="crayon-h"> </span><span class="crayon-cn">1</span><span class="crayon-h"> </span><span class="crayon-e">tantos </span><span class="crayon-i">None</span><span class="crayon-h"> </span><span class="crayon-cn">0</span><span class="crayon-h"> </span><span class="crayon-i">Jun</span><span class="crayon-h"> </span><span class="crayon-cn">18</span><span class="crayon-h"> </span><span class="crayon-cn">07</span><span class="crayon-o">:</span><span class="crayon-cn">11</span><span class="crayon-h"> </span><span class="crayon-sy">.</span><span class="crayon-sy">.</span></div><div class="crayon-line" id="crayon-598a6a3599cc1390039940-5"><span class="crayon-o">-</span><span class="crayon-v">rwxrwx</span><span class="crayon-o">--</span><span class="crayon-o">-</span><span class="crayon-o">+</span><span class="crayon-h"> </span><span class="crayon-cn">1</span><span class="crayon-h"> </span><span class="crayon-e">tantos </span><span class="crayon-i">None</span><span class="crayon-h"> </span><span class="crayon-cn">472</span><span class="crayon-h"> </span><span class="crayon-i">Jun</span><span class="crayon-h"> </span><span class="crayon-cn">18</span><span class="crayon-h"> </span><span class="crayon-cn">07</span><span class="crayon-o">:</span><span class="crayon-cn">11</span><span class="crayon-h"> </span><span class="crayon-v">nc1dir</span><span class="crayon-e">.h</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cc1390039940-6"><span class="crayon-o">-</span><span class="crayon-v">rwxrwx</span><span class="crayon-o">--</span><span class="crayon-o">-</span><span class="crayon-o">+</span><span class="crayon-h"> </span><span class="crayon-cn">1</span><span class="crayon-h"> </span><span class="crayon-e">tantos </span><span class="crayon-i">None</span><span class="crayon-h"> </span><span class="crayon-cn">10251</span><span class="crayon-h"> </span><span class="crayon-i">Jun</span><span class="crayon-h"> </span><span class="crayon-cn">18</span><span class="crayon-h"> </span><span class="crayon-cn">07</span><span class="crayon-o">:</span><span class="crayon-cn">11</span><span class="crayon-h"> </span><span class="crayon-v">nc1filsys</span><span class="crayon-e">.h</span></div><div class="crayon-line" id="crayon-598a6a3599cc1390039940-7"><span class="crayon-o">-</span><span class="crayon-v">rwxrwx</span><span class="crayon-o">--</span><span class="crayon-o">-</span><span class="crayon-o">+</span><span class="crayon-h"> </span><span class="crayon-cn">1</span><span class="crayon-h"> </span><span class="crayon-e">tantos </span><span class="crayon-i">None</span><span class="crayon-h"> </span><span class="crayon-cn">7709</span><span class="crayon-h"> </span><span class="crayon-i">Jun</span><span class="crayon-h"> </span><span class="crayon-cn">18</span><span class="crayon-h"> </span><span class="crayon-cn">07</span><span class="crayon-o">:</span><span class="crayon-cn">11</span><span class="crayon-h"> </span><span class="crayon-v">nc1ino</span><span class="crayon-e">.h</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cc1390039940-8"><span class="crayon-o">-</span><span class="crayon-v">rwxrwx</span><span class="crayon-o">--</span><span class="crayon-o">-</span><span class="crayon-o">+</span><span class="crayon-h"> </span><span class="crayon-cn">1</span><span class="crayon-h"> </span><span class="crayon-e">tantos </span><span class="crayon-i">None</span><span class="crayon-h"> </span><span class="crayon-cn">16110</span><span class="crayon-h"> </span><span class="crayon-i">Jun</span><span class="crayon-h"> </span><span class="crayon-cn">18</span><span class="crayon-h"> </span><span class="crayon-cn">07</span><span class="crayon-o">:</span><span class="crayon-cn">11</span><span class="crayon-h"> </span><span class="crayon-v">nc1inode</span><span class="crayon-e">.h</span></div><div class="crayon-line" id="crayon-598a6a3599cc1390039940-9"><span class="crayon-o">-</span><span class="crayon-v">rwxrwx</span><span class="crayon-o">--</span><span class="crayon-o">-</span><span class="crayon-o">+</span><span class="crayon-h"> </span><span class="crayon-cn">1</span><span class="crayon-h"> </span><span class="crayon-e">tantos </span><span class="crayon-i">None</span><span class="crayon-h"> </span><span class="crayon-cn">11884</span><span class="crayon-h"> </span><span class="crayon-i">Jun</span><span class="crayon-h"> </span><span class="crayon-cn">18</span><span class="crayon-h"> </span><span class="crayon-cn">07</span><span class="crayon-o">:</span><span class="crayon-cn">11</span><span class="crayon-h"> </span><span class="crayon-v">nc1proto</span><span class="crayon-e">.h</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cc1390039940-10"><span class="crayon-o">-</span><span class="crayon-v">rwxrwx</span><span class="crayon-o">--</span><span class="crayon-o">-</span><span class="crayon-o">+</span><span class="crayon-h"> </span><span class="crayon-cn">1</span><span class="crayon-h"> </span><span class="crayon-e">tantos </span><span class="crayon-i">None</span><span class="crayon-h"> </span><span class="crayon-cn">1625</span><span class="crayon-h"> </span><span class="crayon-i">Jun</span><span class="crayon-h"> </span><span class="crayon-cn">18</span><span class="crayon-h"> </span><span class="crayon-cn">07</span><span class="crayon-o">:</span><span class="crayon-cn">11</span><span class="crayon-h"> </span><span class="crayon-v">ncdir</span><span class="crayon-e">.h</span></div><div class="crayon-line" id="crayon-598a6a3599cc1390039940-11"><span class="crayon-v">drwxrwx</span><span class="crayon-o">--</span><span class="crayon-o">-</span><span class="crayon-o">+</span><span class="crayon-h"> </span><span class="crayon-cn">1</span><span class="crayon-h"> </span><span class="crayon-e">tantos </span><span class="crayon-i">None</span><span class="crayon-h"> </span><span class="crayon-cn">0</span><span class="crayon-h"> </span><span class="crayon-i">Jun</span><span class="crayon-h"> </span><span class="crayon-cn">18</span><span class="crayon-h"> </span><span class="crayon-cn">07</span><span class="crayon-o">:</span><span class="crayon-cn">11</span><span class="crayon-h"> </span><span class="crayon-v">nfs</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cc1390039940-12"><span class="crayon-o">-</span><span class="crayon-v">rwxrwx</span><span class="crayon-o">--</span><span class="crayon-o">-</span><span class="crayon-o">+</span><span class="crayon-h"> </span><span class="crayon-cn">1</span><span class="crayon-h"> </span><span class="crayon-e">tantos </span><span class="crayon-i">None</span><span class="crayon-h"> </span><span class="crayon-cn">7001</span><span class="crayon-h"> </span><span class="crayon-i">Jun</span><span class="crayon-h"> </span><span class="crayon-cn">18</span><span class="crayon-h"> </span><span class="crayon-cn">07</span><span class="crayon-o">:</span><span class="crayon-cn">11</span><span class="crayon-h"> </span><span class="crayon-v">prfcntl</span><span class="crayon-e">.h</span></div><div class="crayon-line" id="crayon-598a6a3599cc1390039940-13"><span class="crayon-o">-</span><span class="crayon-v">rwxrwx</span><span class="crayon-o">--</span><span class="crayon-o">-</span><span class="crayon-o">+</span><span class="crayon-h"> </span><span class="crayon-cn">1</span><span class="crayon-h"> </span><span class="crayon-e">tantos </span><span class="crayon-i">None</span><span class="crayon-h"> </span><span class="crayon-cn">1313</span><span class="crayon-h"> </span><span class="crayon-i">Jun</span><span class="crayon-h"> </span><span class="crayon-cn">18</span><span class="crayon-h"> </span><span class="crayon-cn">07</span><span class="crayon-o">:</span><span class="crayon-cn">11</span><span class="crayon-h"> </span><span class="crayon-v">prmount</span><span class="crayon-e">.h</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cc1390039940-14"><span class="crayon-o">-</span><span class="crayon-v">rwxrwx</span><span class="crayon-o">--</span><span class="crayon-o">-</span><span class="crayon-o">+</span><span class="crayon-h"> </span><span class="crayon-cn">1</span><span class="crayon-h"> </span><span class="crayon-e">tantos </span><span class="crayon-i">None</span><span class="crayon-h"> </span><span class="crayon-cn">2307</span><span class="crayon-h"> </span><span class="crayon-i">Jun</span><span class="crayon-h"> </span><span class="crayon-cn">18</span><span class="crayon-h"> </span><span class="crayon-cn">07</span><span class="crayon-o">:</span><span class="crayon-cn">11</span><span class="crayon-h"> </span><span class="crayon-v">prnode</span><span class="crayon-e">.h</span></div><div class="crayon-line" id="crayon-598a6a3599cc1390039940-15"><span class="crayon-o">-</span><span class="crayon-v">rwxrwx</span><span class="crayon-o">--</span><span class="crayon-o">-</span><span class="crayon-o">+</span><span class="crayon-h"> </span><span class="crayon-cn">1</span><span class="crayon-h"> </span><span class="crayon-e">tantos </span><span class="crayon-i">None</span><span class="crayon-h"> </span><span class="crayon-cn">985</span><span class="crayon-h"> </span><span class="crayon-i">Jun</span><span class="crayon-h"> </span><span class="crayon-cn">18</span><span class="crayon-h"> </span><span class="crayon-cn">07</span><span class="crayon-o">:</span><span class="crayon-cn">11</span><span class="crayon-h"> </span><span class="crayon-v">sfsblock</span><span class="crayon-e">.h</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cc1390039940-16"><span class="crayon-o">-</span><span class="crayon-v">rwxrwx</span><span class="crayon-o">--</span><span class="crayon-o">-</span><span class="crayon-o">+</span><span class="crayon-h"> </span><span class="crayon-cn">1</span><span class="crayon-h"> </span><span class="crayon-e">tantos </span><span class="crayon-i">None</span><span class="crayon-h"> </span><span class="crayon-cn">1034</span><span class="crayon-h"> </span><span class="crayon-i">Jun</span><span class="crayon-h"> </span><span class="crayon-cn">18</span><span class="crayon-h"> </span><span class="crayon-cn">07</span><span class="crayon-o">:</span><span class="crayon-cn">11</span><span class="crayon-h"> </span><span class="crayon-v">sfsconsts</span><span class="crayon-e">.h</span></div></div></td>
</tr>
</table>
</div>
</div>
<!-- [Format Time: 0.0058 seconds] -->
<p>Of primary interest are nc1filsys.h nc1ino.h and ncdir.h. They contain (in order) the layout of the super-block, something called the dynamic block, the inode structure and the directory structure.</p><!-- Crayon Syntax Highlighter v_2.7.2_beta -->
<div id="crayon-598a6a3599ce8461941656" class="crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover" style=" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;">
<div class="crayon-toolbar" data-settings=" mouseover overlay hide delay" style="font-size: 12px !important;height: 18px !important; line-height: 18px !important;"><span class="crayon-title">nc1filsys.h</span>
<div class="crayon-tools" style="font-size: 12px !important;height: 18px !important; line-height: 18px !important;"><div class="crayon-button crayon-nums-button" title="Toggle Line Numbers"><div class="crayon-button-icon"></div></div><div class="crayon-button crayon-plain-button" title="Toggle Plain Code"><div class="crayon-button-icon"></div></div><div class="crayon-button crayon-wrap-button" title="Toggle Line Wrap"><div class="crayon-button-icon"></div></div><div class="crayon-button crayon-expand-button" title="Expand Code"><div class="crayon-button-icon"></div></div><div class="crayon-button crayon-copy-button" title="Copy"><div class="crayon-button-icon"></div></div><div class="crayon-button crayon-popup-button" title="Open Code In New Window"><div class="crayon-button-icon"></div></div><span class="crayon-language">C</span></div></div>
<div class="crayon-info" style="min-height: 16.8px !important; line-height: 16.8px !important;"></div>
<div class="crayon-plain-wrap"><textarea wrap="soft" class="crayon-plain print-no" data-settings="dblclick" readonly style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;">
/* USMID @(#)uts/c1/sys/fs/nc1filsys.h 100.1 04/16/98 12:47:39 */
/* COPYRIGHT CRAY RESEARCH, INC.
* UNPUBLISHED -- ALL RIGHTS RESERVED UNDER
* THE COPYRIGHT LAWS OF THE UNITED STATES.
*/
#ifndef __C1SYS_FS_NC1FILSYS_H_
#define __C1SYS_FS_NC1FILSYS_H_
/*
* NC1 File system structures and definitions
*/
/*
* Inode region descriptor.
* The first block of an inode region is a
* bit map for the inodes in that region.
*/
struct nc1ireg_sb {
uint i_unused:16, /* reserved */
i_nblk :16, /* number of blocks */
i_sblk :32; /* start block number */
};
struct nc1ireg_db {
uint i_avail; /* number of available inodes */
};
#define NC1MAXIREG 4 /* Maximum inode regions per partition */
#define NC1IMAPBLKS 1 /* number of blocks in inode map */
struct nc1fdev_sb
{
long fd_name; /* Physical device name */
uint fd_sblk :32, /* Start block number */
fd_nblk :32; /* Number of blocks */
struct nc1ireg_sb fd_ireg[NC1MAXIREG]; /* Inode regions */
};
struct nc1fdev_db
{
int fd_flag; /* flag word */
struct nc1ireg_db fd_ireg[NC1MAXIREG]; /* Inode regions */
};
#define FDNC1_DOWN 1 /* Slice is not available */
#define FDNC1_RDONLY 2 /* Slice is read only */
#define FDNC1_NOALLOC 4 /* Slice is not available for allocation */
#define FDNC1_SBDB 010 /* Slice has valid FS tables */
#define FDNC1_RTDIR 020 /* Slice has valid ROOT Inode and directory */
#define FDNC1_SECALL 0100 /* Slice sector allocated */
#define NC1MAXPART 64 /* Maximum number of partitions */
/*
* Structure of the super-block
*/
struct nc1filsys
{
long s_magic; /* magic number to indicate file system type */
char s_fname[8]; /* file system name */
char s_fpack[8]; /* file system pack name */
dev_t s_dev; /* major/minor device, for verification */
daddr_t s_fsize; /* size in blocks of entire volume */
int s_isize; /* Number of total inodes */
long s_bigfile; /* number of bytes at which a file is big */
long s_bigunit; /* minimum number of blocks allocated for
big files */
long s_secure; /* security: secure FS label */
int s_maxlvl; /* security: maximum security level */
int s_minlvl; /* security: minimum security level */
long s_valcmp; /* security: valid security compartments */
time_t s_time; /* last super block update */
blkno_t s_dboff; /* Dynamic block number */
ino_t s_root; /* root inode */
int s_error; /* Type of file system error detected */
blkno_t s_mapoff; /* Start map block number */
int s_mapblks; /* Last map block number */
int s_nscpys; /* Number of copies of s.b per partition */
int s_npart; /* Number of partitions */
int s_ifract; /* Ratio of inodes to blocks */
extent_t s_sfs; /* SFS only blocks */
long s_flag; /* Flag word */
struct nc1fdev_sb s_part[NC1MAXPART]; /* Partition descriptors */
int s_iounit; /* Physical block size */
long s_numiresblks; /* number of inode reservation blocks */
/* per region (currently 1) */
/* 0 = 1*(AU) words, n = (n+1)*(AU) words */
long s_priparts; /* bitmap of primary partitions */
long s_priblock; /* block size of primary partition(s) */
/* 0 = 1*512 words, n = (n+1)*512 words */
long s_prinblks; /* number of 512 wds blocks in primary */
long s_secparts; /* bitmap of secondary partitions */
long s_secblock; /* block size of secondary partition(s) */
/* 0 = 1*512 words, n = (n+1)*512 words */
long s_secnblks; /* number of 512 wds blocks in secondary */
long s_sbdbparts; /* bitmap of partitions with file system data */
/* including super blocks, dynamic block */
/* and free block bitmaps (only primary */
/* partitions may contain these) */
long s_rootdparts; /* bitmap of partitions with root directory */
/* (only primary partitions) */
long s_nudparts; /* bitmap of no-user-data partitions */
/* (only primary partitions) */
long s_nsema; /* SFS: # fs semaphores to allocate */
long s_priactive; /* bitmap of primary partitions which contain */
/* active (up to date) dynamic blocks and */
/* free block bitmaps. All bits set indicate */
/* that all primary partitions are active, */
/* and no kernel manipulation of active flag */
/* is allowed. */
int s_sfs_arbiterid;/* SFS Arbiter ID */
long s_fill[91]; /* reserved */
};
#define NC1NSUPER 10 /* Copies of s.b. per partition */
#define NC1MINPARTSZ (6+NC1NSUPER) /* Minimum blocks per partition */
#define NC1MAXACTIVEPARTS 4 /* Max. number of primary partitions */
/* maintained as up to date */
#define FsMAGIC_NC1 0x6e6331667331636e /* s_magic number */
#define FsSECURE 0xcd076d1771d670cd /* s_secure: secure file system */
/*
* Filesystem errors
*/
#define Fs_SUPER 1 /* Bad super block encountered */
#define Fs_DYNAMIC 2 /* Bad dynamic block encountered */
#define Fs_SHARED 3 /* Bad shared block encountered */
#define Fs_MAP 4 /* Bad map block encountered */
#define Fs_SFS_SYSDOWN 5 /* SFS System Active sema cleared */
/*
* Filesystem super block flags
* (For mostly historical reasons nearly all of the flags defined here,
* and later for dynamic block usage, are mutually exclusive.
* This practice dates back to before the time when the super block
* and dynamic block were separated.)
* Many of the bit combinations that aren't apparently `available' have
* probably been moved to m_fsflag in the mount table.
* As these flags get separated into different data structures, the
* need &/or desire to retain their old bit notations rapidly decreases.
* The flags that remain in the super block, or dynamic block, must stay
* in the current form, as these flags are carried on-media, and become
* a matter of file system compatibility.
*/
#define Fs_PANIC 0000000001 /* not used */
#define Fs_RRFILE 0000000002 /* Round robin file allocation */
#define Fs_RRALLDIR 0000000004 /* Round robin all directories */
#define Fs_RR1STDIR 0000000010 /* Round robin 1st level directories */
/* Fs_CHECKED 0000000040 Flag used in the Dynamic Blk */
/* Fs_MOUNTED 0000000100 Flag used in the Dynamic Blk */
#define Fs_UPDATE 0000001000 /* File system update in progress */
#define Fs_WUPDAT 0000002000 /* File system wakeup after update */
#define Fs_RRALLUDATA 0000020000 /* Round robin all user file data */
#define Fs_NOIPREF 0000040000 /* Inode alloc. preference disabled */
#define Fs_PANICLESS 0000100000 /* Attempt to continue on error */
#define Fs_SCRUB 0000200000 /* Enable/Disable filesystem scrub */
#define Fs_SFS 0010000000 /* Shared File system */
#define Fs_TESTCOND1 0100000000 /* Test condition #1 */
#define Fs_TESTCOND2 0200000000 /* Test condition #2 */
#define Fs_TESTCOND3 0400000000 /* Test condition #3 */
struct nc1dblock
{
long db_magic; /* magic number to indicate file system type */
daddr_t db_tfree; /* total available blocks */
int db_ifree; /* total free inodes */
int db_ninode; /* total allocated inodes */
long db_state; /* file system state */
time_t db_time; /* last dynamic block update */
long db_type; /* type of new file system */
int db_spart; /* Partition from which system mounted */
int db_ifptr; /* Inode allocation pointer */
int db_actype; /* device accounting type (for billing) */
long db_flag; /* Flag word */
long db_res1[10]; /* reserved */
struct nc1fdev_db db_part[NC1MAXPART]; /* Partition descriptors */
lockinfo_t db_lockinf; /* proc of the process locking the filesystem */
int db_dpfptr; /* primary partitions allocation pointer */
int db_dsfptr; /* secondary partitions allocation pointer */
daddr_t db_sfree; /* secondary parts free blocks */
union {
int db_fpmapfil[16];
struct map db_fpm; /* Free blk map hdr - primary part. */
} db_fpmap_u;
union {
int db_fsmapfil[16];
struct map db_fsm; /* Free blk map hdr - secondary part. */
} db_fsmap_u;
long db_fill[133]; /* reserved */
};
#define db_fpmap db_fpmap_u.db_fpm
#define db_fsmap db_fsmap_u.db_fsm
#define db_fptr db_ifptr
#define db_fmap db_fpmap
#define DbMAGIC_NC1 0x6e6331646231636e /* db_magic number */
/*
* Filesystem dynamic block flags
*/
#define Fs_CHECKED 0000000040 /* File system checked */
#define Fs_MOUNTED 0000000100 /* File system mounted */
/*
* Macros that result an a pointer to a file system Mount structure
*/
#define VFS_TO_MP(vfsp) \
((struct mount *)((vfsp)->vfs_data))
#define VP_TO_MP(vp) \
((struct mount *)(((vp)->v_vfsp)->vfs_data))
/*
* Macros that result an a pointer to a file system Super Block
*/
#define MP_TO_NC1SB(mp) \
((struct nc1filsys *)(((mp)->m_bufp)->b_waddr))
#define VFS_TO_NC1SB(vfsp) \
((struct nc1filsys *)((VFS_TO_MP(vfsp)->m_bufp)->b_waddr))
#define VP_TO_NC1SB(vp) \
((struct nc1filsys *)((VP_TO_MP(vp)->m_bufp)->b_waddr))
/*
* Macros that result an a pointer to a file system Dynamic Block
*/
#define MP_TO_NC1DB(mp) \
((struct nc1dblock *)(((mp)->m_dbufp)->b_waddr))
#define VFS_TO_NC1DB(vfsp) \
((struct nc1dblock *)((VFS_TO_MP(vfsp)->m_dbufp)->b_waddr))
#define VP_TO_NC1DB(vp) \
((struct nc1dblock *)((VP_TO_MP(vp)->m_dbufp)->b_waddr))
/*
* Macros that result an a pointer to a file system SFS Control Block
*/
#define MP_TO_NC1SFSB(mp) \
((struct sfsdblk *)(((mp)->m_sfsbufp)->b_waddr))
#define VFS_TO_NC1SFSB(vfsp) \
((struct sfsdblk *)((VFS_TO_MP(vfsp)->m_sfsbufp)->b_waddr))
#define VP_TO_NC1SFSB(vp) \
((struct sfsdblk *)((VP_TO_MP(vp)->m_sfsbufp)->b_waddr))
#ifndef KERNEL
/*
* Bit-position flags for fsgetsuper() flags argument.
*/
#define FSGETSUPER_USEFIRST 0001
#define FSGETSUPER_NOERRORS 0002
struct mntent;
int ismounted(char *special, ...);
int issfscapable(int *port_num, char **error_string);
int sfsgetpathnames(int arbiter_id,
char *smpname, char *sfsname, char *mntname);
int sfsgetarbiterid(char *arbiter_name);
int fsgetsuper(int sfd, char *fname, struct nc1filsys *sb,
struct nc1dblock *db, uint flags, int *ret_iou);
int get_fs_sema(struct nc1filsys *sb);
int print_shared_mount_table(char *arbiter_list);
int sfsaddmntent(struct mntent *newmnt, struct nc1filsys *sb);
int sfschkmntent(struct mntent *newmnt, struct nc1filsys *sb);
int sfsdeletemntent(struct mntent *mnt_to_delete, int port);
#endif /* KERNEL */
#endif /* __C1SYS_FS_NC1FILSYS_H_ */</textarea></div>
<div class="crayon-main" style="">
<table class="crayon-table">
<tr class="crayon-row">
<td class="crayon-nums " data-settings="show">
<div class="crayon-nums-content" style="font-size: 12px !important; line-height: 15px !important;"><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-1">1</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-2">2</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-3">3</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-4">4</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-5">5</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-6">6</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-7">7</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-8">8</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-9">9</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-10">10</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-11">11</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-12">12</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-13">13</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-14">14</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-15">15</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-16">16</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-17">17</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-18">18</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-19">19</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-20">20</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-21">21</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-22">22</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-23">23</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-24">24</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-25">25</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-26">26</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-27">27</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-28">28</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-29">29</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-30">30</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-31">31</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-32">32</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-33">33</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-34">34</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-35">35</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-36">36</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-37">37</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-38">38</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-39">39</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-40">40</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-41">41</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-42">42</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-43">43</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-44">44</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-45">45</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-46">46</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-47">47</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-48">48</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-49">49</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-50">50</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-51">51</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-52">52</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-53">53</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-54">54</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-55">55</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-56">56</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-57">57</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-58">58</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-59">59</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-60">60</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-61">61</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-62">62</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-63">63</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-64">64</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-65">65</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-66">66</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-67">67</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-68">68</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-69">69</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-70">70</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-71">71</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-72">72</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-73">73</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-74">74</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-75">75</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-76">76</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-77">77</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-78">78</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-79">79</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-80">80</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-81">81</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-82">82</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-83">83</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-84">84</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-85">85</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-86">86</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-87">87</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-88">88</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-89">89</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-90">90</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-91">91</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-92">92</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-93">93</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-94">94</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-95">95</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-96">96</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-97">97</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-98">98</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-99">99</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-100">100</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-101">101</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-102">102</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-103">103</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-104">104</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-105">105</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-106">106</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-107">107</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-108">108</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-109">109</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-110">110</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-111">111</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-112">112</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-113">113</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-114">114</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-115">115</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-116">116</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-117">117</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-118">118</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-119">119</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-120">120</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-121">121</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-122">122</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-123">123</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-124">124</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-125">125</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-126">126</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-127">127</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-128">128</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-129">129</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-130">130</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-131">131</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-132">132</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-133">133</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-134">134</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-135">135</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-136">136</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-137">137</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-138">138</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-139">139</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-140">140</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-141">141</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-142">142</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-143">143</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-144">144</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-145">145</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-146">146</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-147">147</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-148">148</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-149">149</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-150">150</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-151">151</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-152">152</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-153">153</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-154">154</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-155">155</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-156">156</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-157">157</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-158">158</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-159">159</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-160">160</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-161">161</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-162">162</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-163">163</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-164">164</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-165">165</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-166">166</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-167">167</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-168">168</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-169">169</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-170">170</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-171">171</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-172">172</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-173">173</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-174">174</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-175">175</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-176">176</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-177">177</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-178">178</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-179">179</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-180">180</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-181">181</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-182">182</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-183">183</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-184">184</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-185">185</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-186">186</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-187">187</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-188">188</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-189">189</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-190">190</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-191">191</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-192">192</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-193">193</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-194">194</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-195">195</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-196">196</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-197">197</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-198">198</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-199">199</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-200">200</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-201">201</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-202">202</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-203">203</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-204">204</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-205">205</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-206">206</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-207">207</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-208">208</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-209">209</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-210">210</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-211">211</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-212">212</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-213">213</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-214">214</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-215">215</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-216">216</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-217">217</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-218">218</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-219">219</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-220">220</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-221">221</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-222">222</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-223">223</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-224">224</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-225">225</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-226">226</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-227">227</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-228">228</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-229">229</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-230">230</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-231">231</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-232">232</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-233">233</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-234">234</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-235">235</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-236">236</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-237">237</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-238">238</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-239">239</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-240">240</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-241">241</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-242">242</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-243">243</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-244">244</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-245">245</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-246">246</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-247">247</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-248">248</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-249">249</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-250">250</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-251">251</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-252">252</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-253">253</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-254">254</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-255">255</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-256">256</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-257">257</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-258">258</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-259">259</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-260">260</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-261">261</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-262">262</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-263">263</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-264">264</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-265">265</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-266">266</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-267">267</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-268">268</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-269">269</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-270">270</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-271">271</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-272">272</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-273">273</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-274">274</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-275">275</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-276">276</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-277">277</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-278">278</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-279">279</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-280">280</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-281">281</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-282">282</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-283">283</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-284">284</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-285">285</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-286">286</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-287">287</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-288">288</div><div class="crayon-num" data-line="crayon-598a6a3599ce8461941656-289">289</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599ce8461941656-290">290</div></div>
</td>
<td class="crayon-code"><div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="crayon-598a6a3599ce8461941656-1"><span class="crayon-c">/* USMID @(#)uts/c1/sys/fs/nc1filsys.h 100.1 04/16/98 12:47:39 */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-2"> </div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-3"><span class="crayon-c">/* COPYRIGHT CRAY RESEARCH, INC.</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-4"><span class="crayon-c"> * UNPUBLISHED -- ALL RIGHTS RESERVED UNDER</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-5"><span class="crayon-c"> * THE COPYRIGHT LAWS OF THE UNITED STATES.</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-6"><span class="crayon-c"> */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-7"> </div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-8"><span class="crayon-p">#ifndef __C1SYS_FS_NC1FILSYS_H_</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-9"><span class="crayon-p">#define __C1SYS_FS_NC1FILSYS_H_</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-10"> </div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-11"><span class="crayon-c">/*</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-12"><span class="crayon-c"> * NC1 File system structures and definitions</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-13"><span class="crayon-c"> */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-14"> </div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-15"> </div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-16"><span class="crayon-c">/*</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-17"><span class="crayon-c"> * Inode region descriptor.</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-18"><span class="crayon-c"> * The first block of an inode region is a</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-19"><span class="crayon-c"> * bit map for the inodes in that region.</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-20"><span class="crayon-c"> */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-21"> </div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-22"><span class="crayon-t">struct</span><span class="crayon-h"> </span><span class="crayon-e">nc1ireg_sb</span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-23"><span class="crayon-h"> </span><span class="crayon-e">uint </span><span class="crayon-v">i_unused</span><span class="crayon-o">:</span><span class="crayon-cn">16</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-c">/* reserved */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-24"><span class="crayon-h"> </span><span class="crayon-v">i_nblk</span><span class="crayon-h"> </span><span class="crayon-o">:</span><span class="crayon-cn">16</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-c">/* number of blocks */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-25"><span class="crayon-h"> </span><span class="crayon-v">i_sblk</span><span class="crayon-h"> </span><span class="crayon-o">:</span><span class="crayon-cn">32</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* start block number */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-26"><span class="crayon-sy">}</span><span class="crayon-sy">;</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-27"> </div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-28"><span class="crayon-t">struct</span><span class="crayon-h"> </span><span class="crayon-e">nc1ireg_db</span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-29"><span class="crayon-h"> </span><span class="crayon-e">uint </span><span class="crayon-v">i_avail</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* number of available inodes */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-30"><span class="crayon-sy">}</span><span class="crayon-sy">;</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-31"><span class="crayon-p">#define NC1MAXIREG 4 /* Maximum inode regions per partition */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-32"><span class="crayon-p">#define NC1IMAPBLKS 1 /* number of blocks in inode map */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-33"> </div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-34"><span class="crayon-t">struct</span><span class="crayon-h"> </span><span class="crayon-e">nc1fdev_sb</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-35"><span class="crayon-sy">{</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-36"><span class="crayon-h"> </span><span class="crayon-t">long</span><span class="crayon-h"> </span><span class="crayon-v">fd_name</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* Physical device name */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-37"><span class="crayon-h"> </span><span class="crayon-e">uint </span><span class="crayon-v">fd_sblk</span><span class="crayon-h"> </span><span class="crayon-o">:</span><span class="crayon-cn">32</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-c">/* Start block number */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-38"><span class="crayon-h"> </span><span class="crayon-v">fd_nblk</span><span class="crayon-h"> </span><span class="crayon-o">:</span><span class="crayon-cn">32</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* Number of blocks */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-39"><span class="crayon-h"> </span><span class="crayon-t">struct</span><span class="crayon-h"> </span><span class="crayon-e">nc1ireg_sb </span><span class="crayon-v">fd_ireg</span><span class="crayon-sy">[</span><span class="crayon-v">NC1MAXIREG</span><span class="crayon-sy">]</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* Inode regions */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-40"><span class="crayon-sy">}</span><span class="crayon-sy">;</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-41"> </div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-42"><span class="crayon-t">struct</span><span class="crayon-h"> </span><span class="crayon-e">nc1fdev_db</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-43"><span class="crayon-sy">{</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-44"><span class="crayon-h"> </span><span class="crayon-t">int</span><span class="crayon-h"> </span><span class="crayon-v">fd_flag</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* flag word */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-45"><span class="crayon-h"> </span><span class="crayon-t">struct</span><span class="crayon-h"> </span><span class="crayon-e">nc1ireg_db </span><span class="crayon-v">fd_ireg</span><span class="crayon-sy">[</span><span class="crayon-v">NC1MAXIREG</span><span class="crayon-sy">]</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* Inode regions */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-46"><span class="crayon-sy">}</span><span class="crayon-sy">;</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-47"> </div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-48"> </div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-49"><span class="crayon-p">#define FDNC1_DOWN 1 /* Slice is not available */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-50"><span class="crayon-p">#define FDNC1_RDONLY 2 /* Slice is read only */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-51"><span class="crayon-p">#define FDNC1_NOALLOC 4 /* Slice is not available for allocation */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-52"><span class="crayon-p">#define FDNC1_SBDB 010 /* Slice has valid FS tables */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-53"><span class="crayon-p">#define FDNC1_RTDIR 020 /* Slice has valid ROOT Inode and directory */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-54"><span class="crayon-p">#define FDNC1_SECALL 0100 /* Slice sector allocated */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-55"> </div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-56"><span class="crayon-p">#define NC1MAXPART 64 /* Maximum number of partitions */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-57"> </div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-58"> </div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-59"><span class="crayon-c">/*</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-60"><span class="crayon-c"> * Structure of the super-block</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-61"><span class="crayon-c"> */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-62"> </div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-63"><span class="crayon-t">struct</span><span class="crayon-h"> </span><span class="crayon-e">nc1filsys</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-64"><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-65"><span class="crayon-h"> </span><span class="crayon-t">long</span><span class="crayon-h"> </span><span class="crayon-v">s_magic</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* magic number to indicate file system type */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-66"><span class="crayon-h"> </span><span class="crayon-t">char</span><span class="crayon-h"> </span><span class="crayon-v">s_fname</span><span class="crayon-sy">[</span><span class="crayon-cn">8</span><span class="crayon-sy">]</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* file system name */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-67"><span class="crayon-h"> </span><span class="crayon-t">char</span><span class="crayon-h"> </span><span class="crayon-v">s_fpack</span><span class="crayon-sy">[</span><span class="crayon-cn">8</span><span class="crayon-sy">]</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* file system pack name */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-68"><span class="crayon-h"> </span><span class="crayon-e">dev_t </span><span class="crayon-v">s_dev</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* major/minor device, for verification */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-69"> </div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-70"><span class="crayon-h"> </span><span class="crayon-e">daddr_t </span><span class="crayon-v">s_fsize</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* size in blocks of entire volume */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-71"><span class="crayon-h"> </span><span class="crayon-t">int</span><span class="crayon-h"> </span><span class="crayon-v">s_isize</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* Number of total inodes */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-72"><span class="crayon-h"> </span><span class="crayon-t">long</span><span class="crayon-h"> </span><span class="crayon-v">s_bigfile</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* number of bytes at which a file is big */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-73"><span class="crayon-h"> </span><span class="crayon-t">long</span><span class="crayon-h"> </span><span class="crayon-v">s_bigunit</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* minimum number of blocks allocated for</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-74"><span class="crayon-c"> big files */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-75"><span class="crayon-h"> </span><span class="crayon-t">long</span><span class="crayon-h"> </span><span class="crayon-v">s_secure</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* security: secure FS label */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-76"><span class="crayon-h"> </span><span class="crayon-t">int</span><span class="crayon-h"> </span><span class="crayon-v">s_maxlvl</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* security: maximum security level */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-77"><span class="crayon-h"> </span><span class="crayon-t">int</span><span class="crayon-h"> </span><span class="crayon-v">s_minlvl</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* security: minimum security level */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-78"><span class="crayon-h"> </span><span class="crayon-t">long</span><span class="crayon-h"> </span><span class="crayon-v">s_valcmp</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* security: valid security compartments */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-79"><span class="crayon-h"> </span><span class="crayon-e">time_t </span><span class="crayon-v">s_time</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* last super block update */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-80"><span class="crayon-h"> </span><span class="crayon-e">blkno_t </span><span class="crayon-v">s_dboff</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* Dynamic block number */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-81"><span class="crayon-h"> </span><span class="crayon-e">ino_t </span><span class="crayon-v">s_root</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* root inode */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-82"><span class="crayon-h"> </span><span class="crayon-t">int</span><span class="crayon-h"> </span><span class="crayon-v">s_error</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* Type of file system error detected */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-83"><span class="crayon-h"> </span><span class="crayon-e">blkno_t </span><span class="crayon-v">s_mapoff</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* Start map block number */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-84"><span class="crayon-h"> </span><span class="crayon-t">int</span><span class="crayon-h"> </span><span class="crayon-v">s_mapblks</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* Last map block number */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-85"><span class="crayon-h"> </span><span class="crayon-t">int</span><span class="crayon-h"> </span><span class="crayon-v">s_nscpys</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* Number of copies of s.b per partition */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-86"><span class="crayon-h"> </span><span class="crayon-t">int</span><span class="crayon-h"> </span><span class="crayon-v">s_npart</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* Number of partitions */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-87"><span class="crayon-h"> </span><span class="crayon-t">int</span><span class="crayon-h"> </span><span class="crayon-v">s_ifract</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* Ratio of inodes to blocks */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-88"><span class="crayon-h"> </span><span class="crayon-e">extent_t </span><span class="crayon-v">s_sfs</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* SFS only blocks */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-89"><span class="crayon-h"> </span><span class="crayon-t">long</span><span class="crayon-h"> </span><span class="crayon-v">s_flag</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* Flag word */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-90"> </div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-91"><span class="crayon-h"> </span><span class="crayon-t">struct</span><span class="crayon-h"> </span><span class="crayon-e">nc1fdev_sb </span><span class="crayon-v">s_part</span><span class="crayon-sy">[</span><span class="crayon-v">NC1MAXPART</span><span class="crayon-sy">]</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* Partition descriptors */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-92"><span class="crayon-h"> </span><span class="crayon-t">int</span><span class="crayon-h"> </span><span class="crayon-v">s_iounit</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* Physical block size */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-93"><span class="crayon-h"> </span><span class="crayon-t">long</span><span class="crayon-h"> </span><span class="crayon-v">s_numiresblks</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* number of inode reservation blocks */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-94"><span class="crayon-h"> </span><span class="crayon-c">/* per region (currently 1) */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-95"><span class="crayon-h"> </span><span class="crayon-c">/* 0 = 1*(AU) words, n = (n+1)*(AU) words */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-96"><span class="crayon-h"> </span><span class="crayon-t">long</span><span class="crayon-h"> </span><span class="crayon-v">s_priparts</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* bitmap of primary partitions */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-97"><span class="crayon-h"> </span><span class="crayon-t">long</span><span class="crayon-h"> </span><span class="crayon-v">s_priblock</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* block size of primary partition(s) */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-98"><span class="crayon-h"> </span><span class="crayon-c">/* 0 = 1*512 words, n = (n+1)*512 words */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-99"><span class="crayon-h"> </span><span class="crayon-t">long</span><span class="crayon-h"> </span><span class="crayon-v">s_prinblks</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* number of 512 wds blocks in primary */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-100"><span class="crayon-h"> </span><span class="crayon-t">long</span><span class="crayon-h"> </span><span class="crayon-v">s_secparts</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* bitmap of secondary partitions */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-101"><span class="crayon-h"> </span><span class="crayon-t">long</span><span class="crayon-h"> </span><span class="crayon-v">s_secblock</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* block size of secondary partition(s) */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-102"><span class="crayon-h"> </span><span class="crayon-c">/* 0 = 1*512 words, n = (n+1)*512 words */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-103"><span class="crayon-h"> </span><span class="crayon-t">long</span><span class="crayon-h"> </span><span class="crayon-v">s_secnblks</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* number of 512 wds blocks in secondary */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-104"><span class="crayon-h"> </span><span class="crayon-t">long</span><span class="crayon-h"> </span><span class="crayon-v">s_sbdbparts</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* bitmap of partitions with file system data */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-105"><span class="crayon-h"> </span><span class="crayon-c">/* including super blocks, dynamic block */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-106"><span class="crayon-h"> </span><span class="crayon-c">/* and free block bitmaps (only primary */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-107"><span class="crayon-h"> </span><span class="crayon-c">/* partitions may contain these) */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-108"><span class="crayon-h"> </span><span class="crayon-t">long</span><span class="crayon-h"> </span><span class="crayon-v">s_rootdparts</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* bitmap of partitions with root directory */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-109"><span class="crayon-h"> </span><span class="crayon-c">/* (only primary partitions) */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-110"><span class="crayon-h"> </span><span class="crayon-t">long</span><span class="crayon-h"> </span><span class="crayon-v">s_nudparts</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* bitmap of no-user-data partitions */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-111"><span class="crayon-h"> </span><span class="crayon-c">/* (only primary partitions) */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-112"><span class="crayon-h"> </span><span class="crayon-t">long</span><span class="crayon-h"> </span><span class="crayon-v">s_nsema</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* SFS: # fs semaphores to allocate */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-113"><span class="crayon-h"> </span><span class="crayon-t">long</span><span class="crayon-h"> </span><span class="crayon-v">s_priactive</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* bitmap of primary partitions which contain */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-114"><span class="crayon-h"> </span><span class="crayon-c">/* active (up to date) dynamic blocks and */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-115"><span class="crayon-h"> </span><span class="crayon-c">/* free block bitmaps. All bits set indicate */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-116"><span class="crayon-h"> </span><span class="crayon-c">/* that all primary partitions are active, */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-117"><span class="crayon-h"> </span><span class="crayon-c">/* and no kernel manipulation of active flag */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-118"><span class="crayon-h"> </span><span class="crayon-c">/* is allowed. */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-119"><span class="crayon-h"> </span><span class="crayon-t">int</span><span class="crayon-h"> </span><span class="crayon-v">s_sfs_arbiterid</span><span class="crayon-sy">;</span><span class="crayon-c">/* SFS Arbiter ID */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-120"><span class="crayon-h"> </span><span class="crayon-t">long</span><span class="crayon-h"> </span><span class="crayon-v">s_fill</span><span class="crayon-sy">[</span><span class="crayon-cn">91</span><span class="crayon-sy">]</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* reserved */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-121"><span class="crayon-sy">}</span><span class="crayon-sy">;</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-122"> </div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-123"><span class="crayon-p">#define NC1NSUPER 10 /* Copies of s.b. per partition */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-124"><span class="crayon-p">#define NC1MINPARTSZ (6+NC1NSUPER) /* Minimum blocks per partition */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-125"><span class="crayon-p">#define NC1MAXACTIVEPARTS 4 /* Max. number of primary partitions */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-126"><span class="crayon-h"> </span><span class="crayon-c">/* maintained as up to date */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-127"> </div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-128"><span class="crayon-p">#define FsMAGIC_NC1 0x6e6331667331636e /* s_magic number */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-129"> </div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-130"><span class="crayon-p">#define FsSECURE 0xcd076d1771d670cd /* s_secure: secure file system */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-131"> </div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-132"><span class="crayon-c">/*</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-133"><span class="crayon-c"> * Filesystem errors</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-134"><span class="crayon-c"> */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-135"><span class="crayon-p">#define Fs_SUPER 1 /* Bad super block encountered */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-136"><span class="crayon-p">#define Fs_DYNAMIC 2 /* Bad dynamic block encountered */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-137"><span class="crayon-p">#define Fs_SHARED 3 /* Bad shared block encountered */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-138"><span class="crayon-p">#define Fs_MAP 4 /* Bad map block encountered */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-139"><span class="crayon-p">#define Fs_SFS_SYSDOWN 5 /* SFS System Active sema cleared */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-140"> </div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-141"><span class="crayon-c">/*</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-142"><span class="crayon-c"> * Filesystem super block flags</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-143"><span class="crayon-c"> * (For mostly historical reasons nearly all of the flags defined here,</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-144"><span class="crayon-c"> * and later for dynamic block usage, are mutually exclusive.</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-145"><span class="crayon-c"> * This practice dates back to before the time when the super block</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-146"><span class="crayon-c"> * and dynamic block were separated.)</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-147"><span class="crayon-c"> * Many of the bit combinations that aren't apparently `available' have</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-148"><span class="crayon-c"> * probably been moved to m_fsflag in the mount table.</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-149"><span class="crayon-c"> * As these flags get separated into different data structures, the</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-150"><span class="crayon-c"> * need &/or desire to retain their old bit notations rapidly decreases.</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-151"><span class="crayon-c"> * The flags that remain in the super block, or dynamic block, must stay</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-152"><span class="crayon-c"> * in the current form, as these flags are carried on-media, and become</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-153"><span class="crayon-c"> * a matter of file system compatibility.</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-154"><span class="crayon-c"> */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-155"><span class="crayon-p">#define Fs_PANIC 0000000001 /* not used */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-156"><span class="crayon-p">#define Fs_RRFILE 0000000002 /* Round robin file allocation */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-157"><span class="crayon-p">#define Fs_RRALLDIR 0000000004 /* Round robin all directories */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-158"><span class="crayon-p">#define Fs_RR1STDIR 0000000010 /* Round robin 1st level directories */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-159"><span class="crayon-c">/* Fs_CHECKED 0000000040 Flag used in the Dynamic Blk */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-160"><span class="crayon-c">/* Fs_MOUNTED 0000000100 Flag used in the Dynamic Blk */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-161"><span class="crayon-p">#define Fs_UPDATE 0000001000 /* File system update in progress */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-162"><span class="crayon-p">#define Fs_WUPDAT 0000002000 /* File system wakeup after update */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-163"><span class="crayon-p">#define Fs_RRALLUDATA 0000020000 /* Round robin all user file data */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-164"><span class="crayon-p">#define Fs_NOIPREF 0000040000 /* Inode alloc. preference disabled */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-165"><span class="crayon-p">#define Fs_PANICLESS 0000100000 /* Attempt to continue on error */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-166"><span class="crayon-p">#define Fs_SCRUB 0000200000 /* Enable/Disable filesystem scrub */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-167"><span class="crayon-p">#define Fs_SFS 0010000000 /* Shared File system */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-168"><span class="crayon-p">#define Fs_TESTCOND1 0100000000 /* Test condition #1 */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-169"><span class="crayon-p">#define Fs_TESTCOND2 0200000000 /* Test condition #2 */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-170"><span class="crayon-p">#define Fs_TESTCOND3 0400000000 /* Test condition #3 */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-171"> </div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-172"><span class="crayon-t">struct</span><span class="crayon-h"> </span><span class="crayon-e">nc1dblock</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-173"><span class="crayon-sy">{</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-174"><span class="crayon-h"> </span><span class="crayon-t">long</span><span class="crayon-h"> </span><span class="crayon-v">db_magic</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* magic number to indicate file system type */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-175"><span class="crayon-h"> </span><span class="crayon-e">daddr_t </span><span class="crayon-v">db_tfree</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* total available blocks */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-176"><span class="crayon-h"> </span><span class="crayon-t">int</span><span class="crayon-h"> </span><span class="crayon-v">db_ifree</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* total free inodes */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-177"><span class="crayon-h"> </span><span class="crayon-t">int</span><span class="crayon-h"> </span><span class="crayon-v">db_ninode</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* total allocated inodes */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-178"><span class="crayon-h"> </span><span class="crayon-t">long</span><span class="crayon-h"> </span><span class="crayon-v">db_state</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* file system state */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-179"><span class="crayon-h"> </span><span class="crayon-e">time_t </span><span class="crayon-v">db_time</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* last dynamic block update */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-180"><span class="crayon-h"> </span><span class="crayon-t">long</span><span class="crayon-h"> </span><span class="crayon-v">db_type</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* type of new file system */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-181"><span class="crayon-h"> </span><span class="crayon-t">int</span><span class="crayon-h"> </span><span class="crayon-v">db_spart</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* Partition from which system mounted */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-182"><span class="crayon-h"> </span><span class="crayon-t">int</span><span class="crayon-h"> </span><span class="crayon-v">db_ifptr</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* Inode allocation pointer */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-183"><span class="crayon-h"> </span><span class="crayon-t">int</span><span class="crayon-h"> </span><span class="crayon-v">db_actype</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* device accounting type (for billing) */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-184"><span class="crayon-h"> </span><span class="crayon-t">long</span><span class="crayon-h"> </span><span class="crayon-v">db_flag</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* Flag word */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-185"><span class="crayon-h"> </span><span class="crayon-t">long</span><span class="crayon-h"> </span><span class="crayon-v">db_res1</span><span class="crayon-sy">[</span><span class="crayon-cn">10</span><span class="crayon-sy">]</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* reserved */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-186"> </div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-187"><span class="crayon-h"> </span><span class="crayon-t">struct</span><span class="crayon-h"> </span><span class="crayon-e">nc1fdev_db </span><span class="crayon-v">db_part</span><span class="crayon-sy">[</span><span class="crayon-v">NC1MAXPART</span><span class="crayon-sy">]</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* Partition descriptors */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-188"><span class="crayon-h"> </span><span class="crayon-e">lockinfo_t </span><span class="crayon-v">db_lockinf</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* proc of the process locking the filesystem */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-189"><span class="crayon-h"> </span><span class="crayon-t">int</span><span class="crayon-h"> </span><span class="crayon-v">db_dpfptr</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* primary partitions allocation pointer */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-190"><span class="crayon-h"> </span><span class="crayon-t">int</span><span class="crayon-h"> </span><span class="crayon-v">db_dsfptr</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* secondary partitions allocation pointer */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-191"><span class="crayon-h"> </span><span class="crayon-e">daddr_t </span><span class="crayon-v">db_sfree</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* secondary parts free blocks */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-192"><span class="crayon-h"> </span><span class="crayon-t">union</span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-193"><span class="crayon-h"> </span><span class="crayon-t">int</span><span class="crayon-h"> </span><span class="crayon-v">db_fpmapfil</span><span class="crayon-sy">[</span><span class="crayon-cn">16</span><span class="crayon-sy">]</span><span class="crayon-sy">;</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-194"><span class="crayon-h"> </span><span class="crayon-t">struct</span><span class="crayon-h"> </span><span class="crayon-e">map </span><span class="crayon-v">db_fpm</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* Free blk map hdr - primary part. */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-195"><span class="crayon-h"> </span><span class="crayon-sy">}</span><span class="crayon-h"> </span><span class="crayon-v">db_fpmap_u</span><span class="crayon-sy">;</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-196"><span class="crayon-h"> </span><span class="crayon-t">union</span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-197"><span class="crayon-h"> </span><span class="crayon-t">int</span><span class="crayon-h"> </span><span class="crayon-v">db_fsmapfil</span><span class="crayon-sy">[</span><span class="crayon-cn">16</span><span class="crayon-sy">]</span><span class="crayon-sy">;</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-198"><span class="crayon-h"> </span><span class="crayon-t">struct</span><span class="crayon-h"> </span><span class="crayon-e">map </span><span class="crayon-v">db_fsm</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* Free blk map hdr - secondary part. */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-199"><span class="crayon-h"> </span><span class="crayon-sy">}</span><span class="crayon-h"> </span><span class="crayon-v">db_fsmap_u</span><span class="crayon-sy">;</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-200"><span class="crayon-h"> </span><span class="crayon-t">long</span><span class="crayon-h"> </span><span class="crayon-v">db_fill</span><span class="crayon-sy">[</span><span class="crayon-cn">133</span><span class="crayon-sy">]</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* reserved */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-201"><span class="crayon-sy">}</span><span class="crayon-sy">;</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-202"><span class="crayon-p">#define db_fpmap db_fpmap_u.db_fpm</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-203"><span class="crayon-p">#define db_fsmap db_fsmap_u.db_fsm</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-204"> </div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-205"><span class="crayon-p">#define db_fptr db_ifptr</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-206"><span class="crayon-p">#define db_fmap db_fpmap</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-207"> </div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-208"><span class="crayon-p">#define DbMAGIC_NC1 0x6e6331646231636e /* db_magic number */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-209"> </div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-210"><span class="crayon-c">/*</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-211"><span class="crayon-c"> * Filesystem dynamic block flags</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-212"><span class="crayon-c"> */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-213"><span class="crayon-p">#define Fs_CHECKED 0000000040 /* File system checked */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-214"><span class="crayon-p">#define Fs_MOUNTED 0000000100 /* File system mounted */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-215"> </div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-216"><span class="crayon-c">/*</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-217"><span class="crayon-c"> * Macros that result an a pointer to a file system Mount structure</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-218"><span class="crayon-c"> */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-219"><span class="crayon-p">#define VFS_TO_MP(vfsp) \</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-220"><span class="crayon-h"> </span><span class="crayon-sy">(</span><span class="crayon-sy">(</span><span class="crayon-t">struct</span><span class="crayon-h"> </span><span class="crayon-v">mount</span><span class="crayon-h"> </span><span class="crayon-o">*</span><span class="crayon-sy">)</span><span class="crayon-sy">(</span><span class="crayon-sy">(</span><span class="crayon-v">vfsp</span><span class="crayon-sy">)</span><span class="crayon-o">-></span><span class="crayon-v">vfs_data</span><span class="crayon-sy">)</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-221"> </div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-222"><span class="crayon-p">#define VP_TO_MP(vp) \</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-223"><span class="crayon-h"> </span><span class="crayon-sy">(</span><span class="crayon-sy">(</span><span class="crayon-t">struct</span><span class="crayon-h"> </span><span class="crayon-v">mount</span><span class="crayon-h"> </span><span class="crayon-o">*</span><span class="crayon-sy">)</span><span class="crayon-sy">(</span><span class="crayon-sy">(</span><span class="crayon-sy">(</span><span class="crayon-v">vp</span><span class="crayon-sy">)</span><span class="crayon-o">-></span><span class="crayon-v">v_vfsp</span><span class="crayon-sy">)</span><span class="crayon-o">-></span><span class="crayon-v">vfs_data</span><span class="crayon-sy">)</span><span class="crayon-sy">)</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-224"> </div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-225"> </div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-226"><span class="crayon-c">/*</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-227"><span class="crayon-c"> * Macros that result an a pointer to a file system Super Block</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-228"><span class="crayon-c"> */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-229"><span class="crayon-p">#define MP_TO_NC1SB(mp) \</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-230"><span class="crayon-h"> </span><span class="crayon-sy">(</span><span class="crayon-sy">(</span><span class="crayon-t">struct</span><span class="crayon-h"> </span><span class="crayon-v">nc1filsys</span><span class="crayon-h"> </span><span class="crayon-o">*</span><span class="crayon-sy">)</span><span class="crayon-sy">(</span><span class="crayon-sy">(</span><span class="crayon-sy">(</span><span class="crayon-v">mp</span><span class="crayon-sy">)</span><span class="crayon-o">-></span><span class="crayon-v">m_bufp</span><span class="crayon-sy">)</span><span class="crayon-o">-></span><span class="crayon-v">b_waddr</span><span class="crayon-sy">)</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-231"> </div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-232"><span class="crayon-p">#define VFS_TO_NC1SB(vfsp) \</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-233"><span class="crayon-h"> </span><span class="crayon-sy">(</span><span class="crayon-sy">(</span><span class="crayon-t">struct</span><span class="crayon-h"> </span><span class="crayon-v">nc1filsys</span><span class="crayon-h"> </span><span class="crayon-o">*</span><span class="crayon-sy">)</span><span class="crayon-sy">(</span><span class="crayon-sy">(</span><span class="crayon-e">VFS_TO_MP</span><span class="crayon-sy">(</span><span class="crayon-v">vfsp</span><span class="crayon-sy">)</span><span class="crayon-o">-></span><span class="crayon-v">m_bufp</span><span class="crayon-sy">)</span><span class="crayon-o">-></span><span class="crayon-v">b_waddr</span><span class="crayon-sy">)</span><span class="crayon-sy">)</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-234"> </div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-235"><span class="crayon-p">#define VP_TO_NC1SB(vp) \</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-236"><span class="crayon-h"> </span><span class="crayon-sy">(</span><span class="crayon-sy">(</span><span class="crayon-t">struct</span><span class="crayon-h"> </span><span class="crayon-v">nc1filsys</span><span class="crayon-h"> </span><span class="crayon-o">*</span><span class="crayon-sy">)</span><span class="crayon-sy">(</span><span class="crayon-sy">(</span><span class="crayon-e">VP_TO_MP</span><span class="crayon-sy">(</span><span class="crayon-v">vp</span><span class="crayon-sy">)</span><span class="crayon-o">-></span><span class="crayon-v">m_bufp</span><span class="crayon-sy">)</span><span class="crayon-o">-></span><span class="crayon-v">b_waddr</span><span class="crayon-sy">)</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-237"> </div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-238"> </div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-239"><span class="crayon-c">/*</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-240"><span class="crayon-c"> * Macros that result an a pointer to a file system Dynamic Block</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-241"><span class="crayon-c"> */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-242"><span class="crayon-p">#define MP_TO_NC1DB(mp) \</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-243"><span class="crayon-h"> </span><span class="crayon-sy">(</span><span class="crayon-sy">(</span><span class="crayon-t">struct</span><span class="crayon-h"> </span><span class="crayon-v">nc1dblock</span><span class="crayon-h"> </span><span class="crayon-o">*</span><span class="crayon-sy">)</span><span class="crayon-sy">(</span><span class="crayon-sy">(</span><span class="crayon-sy">(</span><span class="crayon-v">mp</span><span class="crayon-sy">)</span><span class="crayon-o">-></span><span class="crayon-v">m_dbufp</span><span class="crayon-sy">)</span><span class="crayon-o">-></span><span class="crayon-v">b_waddr</span><span class="crayon-sy">)</span><span class="crayon-sy">)</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-244"> </div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-245"><span class="crayon-p">#define VFS_TO_NC1DB(vfsp) \</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-246"><span class="crayon-h"> </span><span class="crayon-sy">(</span><span class="crayon-sy">(</span><span class="crayon-t">struct</span><span class="crayon-h"> </span><span class="crayon-v">nc1dblock</span><span class="crayon-h"> </span><span class="crayon-o">*</span><span class="crayon-sy">)</span><span class="crayon-sy">(</span><span class="crayon-sy">(</span><span class="crayon-e">VFS_TO_MP</span><span class="crayon-sy">(</span><span class="crayon-v">vfsp</span><span class="crayon-sy">)</span><span class="crayon-o">-></span><span class="crayon-v">m_dbufp</span><span class="crayon-sy">)</span><span class="crayon-o">-></span><span class="crayon-v">b_waddr</span><span class="crayon-sy">)</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-247"> </div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-248"><span class="crayon-p">#define VP_TO_NC1DB(vp) \</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-249"><span class="crayon-h"> </span><span class="crayon-sy">(</span><span class="crayon-sy">(</span><span class="crayon-t">struct</span><span class="crayon-h"> </span><span class="crayon-v">nc1dblock</span><span class="crayon-h"> </span><span class="crayon-o">*</span><span class="crayon-sy">)</span><span class="crayon-sy">(</span><span class="crayon-sy">(</span><span class="crayon-e">VP_TO_MP</span><span class="crayon-sy">(</span><span class="crayon-v">vp</span><span class="crayon-sy">)</span><span class="crayon-o">-></span><span class="crayon-v">m_dbufp</span><span class="crayon-sy">)</span><span class="crayon-o">-></span><span class="crayon-v">b_waddr</span><span class="crayon-sy">)</span><span class="crayon-sy">)</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-250"> </div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-251"> </div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-252"><span class="crayon-c">/*</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-253"><span class="crayon-c"> * Macros that result an a pointer to a file system SFS Control Block</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-254"><span class="crayon-c"> */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-255"><span class="crayon-p">#define MP_TO_NC1SFSB(mp) \</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-256"><span class="crayon-h"> </span><span class="crayon-sy">(</span><span class="crayon-sy">(</span><span class="crayon-t">struct</span><span class="crayon-h"> </span><span class="crayon-v">sfsdblk</span><span class="crayon-h"> </span><span class="crayon-o">*</span><span class="crayon-sy">)</span><span class="crayon-sy">(</span><span class="crayon-sy">(</span><span class="crayon-sy">(</span><span class="crayon-v">mp</span><span class="crayon-sy">)</span><span class="crayon-o">-></span><span class="crayon-v">m_sfsbufp</span><span class="crayon-sy">)</span><span class="crayon-o">-></span><span class="crayon-v">b_waddr</span><span class="crayon-sy">)</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-257"> </div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-258"><span class="crayon-p">#define VFS_TO_NC1SFSB(vfsp) \</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-259"><span class="crayon-h"> </span><span class="crayon-sy">(</span><span class="crayon-sy">(</span><span class="crayon-t">struct</span><span class="crayon-h"> </span><span class="crayon-v">sfsdblk</span><span class="crayon-h"> </span><span class="crayon-o">*</span><span class="crayon-sy">)</span><span class="crayon-sy">(</span><span class="crayon-sy">(</span><span class="crayon-e">VFS_TO_MP</span><span class="crayon-sy">(</span><span class="crayon-v">vfsp</span><span class="crayon-sy">)</span><span class="crayon-o">-></span><span class="crayon-v">m_sfsbufp</span><span class="crayon-sy">)</span><span class="crayon-o">-></span><span class="crayon-v">b_waddr</span><span class="crayon-sy">)</span><span class="crayon-sy">)</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-260"> </div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-261"><span class="crayon-p">#define VP_TO_NC1SFSB(vp) \</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-262"><span class="crayon-h"> </span><span class="crayon-sy">(</span><span class="crayon-sy">(</span><span class="crayon-t">struct</span><span class="crayon-h"> </span><span class="crayon-v">sfsdblk</span><span class="crayon-h"> </span><span class="crayon-o">*</span><span class="crayon-sy">)</span><span class="crayon-sy">(</span><span class="crayon-sy">(</span><span class="crayon-e">VP_TO_MP</span><span class="crayon-sy">(</span><span class="crayon-v">vp</span><span class="crayon-sy">)</span><span class="crayon-o">-></span><span class="crayon-v">m_sfsbufp</span><span class="crayon-sy">)</span><span class="crayon-o">-></span><span class="crayon-v">b_waddr</span><span class="crayon-sy">)</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-263"> </div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-264"> </div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-265"><span class="crayon-p">#ifndef KERNEL</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-266"> </div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-267"><span class="crayon-c">/*</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-268"><span class="crayon-c"> * Bit-position flags for fsgetsuper() flags argument.</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-269"><span class="crayon-c"> */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-270"><span class="crayon-p">#define FSGETSUPER_USEFIRST 0001</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-271"><span class="crayon-p">#define FSGETSUPER_NOERRORS 0002</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-272"> </div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-273"><span class="crayon-t">struct</span><span class="crayon-h"> </span><span class="crayon-v">mntent</span><span class="crayon-sy">;</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-274"> </div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-275"><span class="crayon-t">int</span><span class="crayon-h"> </span><span class="crayon-e">ismounted</span><span class="crayon-sy">(</span><span class="crayon-t">char</span><span class="crayon-h"> </span><span class="crayon-o">*</span><span class="crayon-v">special</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-sy">.</span><span class="crayon-sy">.</span><span class="crayon-sy">.</span><span class="crayon-sy">)</span><span class="crayon-sy">;</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-276"><span class="crayon-t">int</span><span class="crayon-h"> </span><span class="crayon-e">issfscapable</span><span class="crayon-sy">(</span><span class="crayon-t">int</span><span class="crayon-h"> </span><span class="crayon-o">*</span><span class="crayon-v">port_num</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-t">char</span><span class="crayon-h"> </span><span class="crayon-o">*</span><span class="crayon-o">*</span><span class="crayon-v">error_string</span><span class="crayon-sy">)</span><span class="crayon-sy">;</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-277"><span class="crayon-t">int</span><span class="crayon-h"> </span><span class="crayon-e">sfsgetpathnames</span><span class="crayon-sy">(</span><span class="crayon-t">int</span><span class="crayon-h"> </span><span class="crayon-v">arbiter_id</span><span class="crayon-sy">,</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-278"><span class="crayon-h"> </span><span class="crayon-t">char</span><span class="crayon-h"> </span><span class="crayon-o">*</span><span class="crayon-v">smpname</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-t">char</span><span class="crayon-h"> </span><span class="crayon-o">*</span><span class="crayon-v">sfsname</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-t">char</span><span class="crayon-h"> </span><span class="crayon-o">*</span><span class="crayon-v">mntname</span><span class="crayon-sy">)</span><span class="crayon-sy">;</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-279"><span class="crayon-t">int</span><span class="crayon-h"> </span><span class="crayon-e">sfsgetarbiterid</span><span class="crayon-sy">(</span><span class="crayon-t">char</span><span class="crayon-h"> </span><span class="crayon-o">*</span><span class="crayon-v">arbiter_name</span><span class="crayon-sy">)</span><span class="crayon-sy">;</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-280"><span class="crayon-t">int</span><span class="crayon-h"> </span><span class="crayon-e">fsgetsuper</span><span class="crayon-sy">(</span><span class="crayon-t">int</span><span class="crayon-h"> </span><span class="crayon-v">sfd</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-t">char</span><span class="crayon-h"> </span><span class="crayon-o">*</span><span class="crayon-v">fname</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-t">struct</span><span class="crayon-h"> </span><span class="crayon-v">nc1filsys</span><span class="crayon-h"> </span><span class="crayon-o">*</span><span class="crayon-v">sb</span><span class="crayon-sy">,</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-281"><span class="crayon-h"> </span><span class="crayon-t">struct</span><span class="crayon-h"> </span><span class="crayon-v">nc1dblock</span><span class="crayon-h"> </span><span class="crayon-o">*</span><span class="crayon-v">db</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-e">uint </span><span class="crayon-v">flags</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-t">int</span><span class="crayon-h"> </span><span class="crayon-o">*</span><span class="crayon-v">ret_iou</span><span class="crayon-sy">)</span><span class="crayon-sy">;</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-282"><span class="crayon-t">int</span><span class="crayon-h"> </span><span class="crayon-e">get_fs_sema</span><span class="crayon-sy">(</span><span class="crayon-t">struct</span><span class="crayon-h"> </span><span class="crayon-v">nc1filsys</span><span class="crayon-h"> </span><span class="crayon-o">*</span><span class="crayon-v">sb</span><span class="crayon-sy">)</span><span class="crayon-sy">;</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-283"><span class="crayon-t">int</span><span class="crayon-h"> </span><span class="crayon-e">print_shared_mount_table</span><span class="crayon-sy">(</span><span class="crayon-t">char</span><span class="crayon-h"> </span><span class="crayon-o">*</span><span class="crayon-v">arbiter_list</span><span class="crayon-sy">)</span><span class="crayon-sy">;</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-284"><span class="crayon-t">int</span><span class="crayon-h"> </span><span class="crayon-e">sfsaddmntent</span><span class="crayon-sy">(</span><span class="crayon-t">struct</span><span class="crayon-h"> </span><span class="crayon-v">mntent</span><span class="crayon-h"> </span><span class="crayon-o">*</span><span class="crayon-v">newmnt</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-t">struct</span><span class="crayon-h"> </span><span class="crayon-v">nc1filsys</span><span class="crayon-h"> </span><span class="crayon-o">*</span><span class="crayon-v">sb</span><span class="crayon-sy">)</span><span class="crayon-sy">;</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-285"><span class="crayon-t">int</span><span class="crayon-h"> </span><span class="crayon-e">sfschkmntent</span><span class="crayon-sy">(</span><span class="crayon-t">struct</span><span class="crayon-h"> </span><span class="crayon-v">mntent</span><span class="crayon-h"> </span><span class="crayon-o">*</span><span class="crayon-v">newmnt</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-t">struct</span><span class="crayon-h"> </span><span class="crayon-v">nc1filsys</span><span class="crayon-h"> </span><span class="crayon-o">*</span><span class="crayon-v">sb</span><span class="crayon-sy">)</span><span class="crayon-sy">;</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-286"><span class="crayon-t">int</span><span class="crayon-h"> </span><span class="crayon-e">sfsdeletemntent</span><span class="crayon-sy">(</span><span class="crayon-t">struct</span><span class="crayon-h"> </span><span class="crayon-v">mntent</span><span class="crayon-h"> </span><span class="crayon-o">*</span><span class="crayon-v">mnt_to_delete</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-t">int</span><span class="crayon-h"> </span><span class="crayon-v">port</span><span class="crayon-sy">)</span><span class="crayon-sy">;</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-287"> </div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-288"><span class="crayon-p">#endif /* KERNEL */</span></div><div class="crayon-line" id="crayon-598a6a3599ce8461941656-289"> </div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599ce8461941656-290"><span class="crayon-p">#endif /* __C1SYS_FS_NC1FILSYS_H_ */</span></div></div></td>
</tr>
</table>
</div>
</div>
<!-- [Format Time: 0.0183 seconds] -->
<p></p><!-- Crayon Syntax Highlighter v_2.7.2_beta -->
<div id="crayon-598a6a3599cfe133896668" class="crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover" style=" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;">
<div class="crayon-toolbar" data-settings=" mouseover overlay hide delay" style="font-size: 12px !important;height: 18px !important; line-height: 18px !important;"><span class="crayon-title">nc1ino.h</span>
<div class="crayon-tools" style="font-size: 12px !important;height: 18px !important; line-height: 18px !important;"><div class="crayon-button crayon-nums-button" title="Toggle Line Numbers"><div class="crayon-button-icon"></div></div><div class="crayon-button crayon-plain-button" title="Toggle Plain Code"><div class="crayon-button-icon"></div></div><div class="crayon-button crayon-wrap-button" title="Toggle Line Wrap"><div class="crayon-button-icon"></div></div><div class="crayon-button crayon-expand-button" title="Expand Code"><div class="crayon-button-icon"></div></div><div class="crayon-button crayon-copy-button" title="Copy"><div class="crayon-button-icon"></div></div><div class="crayon-button crayon-popup-button" title="Open Code In New Window"><div class="crayon-button-icon"></div></div><span class="crayon-language">C</span></div></div>
<div class="crayon-info" style="min-height: 16.8px !important; line-height: 16.8px !important;"></div>
<div class="crayon-plain-wrap"><textarea wrap="soft" class="crayon-plain print-no" data-settings="dblclick" readonly style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;">
/* USMID @(#)uts/c1/sys/fs/nc1ino.h 100.1 04/16/98 12:47:40 */
/* COPYRIGHT CRAY RESEARCH, INC.
* UNPUBLISHED -- ALL RIGHTS RESERVED UNDER
* THE COPYRIGHT LAWS OF THE UNITED STATES.
*/
#ifndef __C1SYS_FS_NC1INO_H_
#define __C1SYS_FS_NC1INO_H_
#include <sys/fs/sfsconsts.h>
/*
* Typedefs used by the filesystem dependent code
*/
typedef struct {
uint iaf : 1;
uint : 15;
dev_t dev : 16;
blkno_t blk : 32;
} dblk_t;
typedef struct {
int nblks : 32;
blkno_t blk : 32;
} extent_t;
/*
* On-disk inode structure as it appears on the NC1FS & NC2FS filesystems
*/
struct cdinode {
uint cdi_rsrvd_1 : 8, /* Reserved for expansion of cdi_mode */
cdi_mode :24, /* mode and type of file (4-bits still free)*/
cdi_msref : 1, /* Modification signature is referenced flag*/
cdi_ms :14, /* Modification signature */
cdi_nlink :17; /* #of links to file (can hold > 100,000) */
uint cdi_rsrvd_2 : 8, /* Reserved for expansion of cdi_uid */
cdi_uid :24, /* Owner's user-ID */
cdi_rsrvd_3 : 8, /* Reserved for expansion of cdi_gid */
cdi_gid :24; /* Owner's group-ID */
uint cdi_rsrvd_4 : 8, /* Reserved for expansion of cdi_acid */
cdi_acid :24, /* Account-ID */
cdi_gen :32; /* Inode generation number */
long cdi_size; /* Number of bytes in the file */
long cdi_moffset; /* Modification offset for current signature*/
uint cdi_blocks :52, /* Quotas: #of blocks actually allocated */
cdi_extcomp : 1, /* Security: extended compartments flag */
cdi_secrsvd1:11; /* Security: reserved */
union {
long smallcmps; /* Compartments if [0..63] */
} cdi_compart; /* Security: compartments info */
uint cdi_slevel : 8, /* Security: security level */
cdi_intcls : 8, /* Security: integrity class */
cdi_secflg :16, /* Security: flag settings */
cdi_intcat :32; /* Security: integrity category */
union {
daddr_t daddr; /* Extent descriptor */
dblk_t dblk; /* Block descriptor */
} cdi_privs; /* Privilege Assignment List location */
union {
daddr_t daddr; /* Extent descriptor */
dblk_t dblk; /* Block descriptor */
} cdi_acl; /* Security: ACL location */
uint cdi_cpart : 8, /* Next partition from cbits to use */
cdi_dmport : 3, /* DMF daemon number */
cdi_dmstate : 5, /* DMF file state */
cdi_dmkey :48; /* Data-Migration: key */
uint cdi_allocf : 4, /* Data-Block allocation flags */
cdi_alloc : 4, /* Data-Block allocation technique */
cdi_cblks :24, /* Number of blocks to allocate per part */
cdi_dmmid :32; /* Data-Migration: machine-ID */
uint cdi_atmsec :34, /* Access time (secs) */
cdi_uatmsec :30; /* Access time (microsecs) */
uint cdi_mtmsec :34, /* Modification time (secs) */
cdi_umtmsec :30; /* Modification time (microsecs) */
uint cdi_ctmsec :34, /* Time of last inode modification (secs) */
cdi_uctmsec :30; /* Time of last inode modification (microsecs)*/
long cdi_cbits; /* bit mask, file placement within cluster */
union {
daddr_t daddr; /* Extent descriptor */
dblk_t dblk; /* Block descriptor */
long whole;
struct {
uint one :32, /* half 1 */
two :32; /* half 2 */
} half;
struct {
uint one :16, /* quarter 1 */
two :16, /* quarter 2 */
three :16, /* quarter 3 */
four :16; /* quarter 4 */
} quarter;
struct {
uint one : 8, /* eighth 1 */
two : 8, /* eighth 2 */
three : 8, /* eighth 3 */
four : 8, /* eighth 4 */
five : 8, /* eighth 5 */
six : 8, /* eighth 6 */
seven : 8, /* eighth 7 */
eight : 8; /* eighth 8 */
} eighth;
} cdi_addr[8]; /* File allocation locators */
/* The #define for NC1NADDR must not be > 8 */
long cdi_slock[SFSLK_SZ]; /* Reserved for SFS lock structure */
uint cdi_rsrvd_5 : 16, /* Reserved for Kernel group for expansion */
cdi_applac : 32, /* Application accounting tag */
cdi_nindir : 16; /* # of indirect extent blocks */
long cdi_rsrvd; /* Reserved by the Kernel group for use in */
/* future releases of UNICOS. */
/* No notification will be given when these */
/* words will be employed by future versions */
/* of UNICOS. */
long cdi_sitebits; /* Word reserved for site use. */
};
/* NOTE: Reserved fields in the cdinode structure will be preserved
* when an inode is updated. They will be cleared when an inode is
* newly allocated.
*/
#define NC1INOPB 16
/*
* struct cdinode cdi_addr defines
*
* For IFCHR & IFBLK devices, the cdi_addr words are used to hold
* special security and configuration information, as well as
* the device's rdev field.
*/
#define cdi_rdev cdi_addr[0].half.one /* IFCHR or IFBLK rdev */
/* cdi_addr[0].half.two Reserved */
/* Security fields related to devices */
#define cdi_minlvl cdi_addr[1].eighth.one /* minimum level */
#define cdi_maxlvl cdi_addr[1].eighth.two /* maximum level */
/* cdi_addr[1].quarter.two Reserved */
/* cdi_addr[1].half.two Reserved */
#define cdi_valcmp cdi_addr[2].whole /* valid compartments */
/* cdi_addr[3].whole Reserved */
/* Configuration related device parameters */
#define cdi_param0 cdi_addr[4].half.one
#define cdi_param1 cdi_addr[4].half.two
#define cdi_param2 cdi_addr[5].half.one
#define cdi_param3 cdi_addr[5].half.two
#define cdi_param4 cdi_addr[6].half.one
#define cdi_param5 cdi_addr[6].half.two
#define cdi_param6 cdi_addr[7].half.one
#define cdi_param7 cdi_addr[7].half.two
#define cdi_filename cdi_addr[5].whole /* Filename of logical */
/*
* The i_number in the NC1FS is made up of three elements,
* the partition number, the inode region number and the
* inode region relative inode number. The maximum size of
* each of these fields was selected for potential expansion
* at a later date. The current composition of the i_number
* is:
* 32/ 0, 8/ Partition, 4/ Iregion, 20/relative inum
*/
#define nc1ino_rinum(x) (int) ((x)&((1<<20)-1))
#define nc1ino_ireg(x) (int) (((x)>>20)&017)
#define nc1ino_part(x) (int) (((x)>>24)&0377)
#define makenc1ino(p,r,i) (ino_t)((long) (p)<<24 | (long) (r)<<20 | (i))
/*
* NC1FS i_number to disk block (inode region relative) and offset
*/
#define nc1itodf(fp,i) (fp->s_part[nc1ino_part(i)].fd_ireg[nc1ino_ireg(i)]\
.i_sblk+nc1itod(i)+nc1imapblks(fp))
#define nc1itod(i) (nc1ino_rinum(i) / NC1INOPB)
#define nc1itoo(i) ((nc1ino_rinum(i) % NC1INOPB) * sizeof(struct cdinode))
#define nc1itos(i, iou) ( (iou) > 1 ? (nc1itod(i) / (iou)) : nc1itod(i) )
#define nc1imapblks(fp) ((fp->s_priblock+1)*(fp->s_numiresblks+1))
/*
* Allocation types used in cdi_alloc.
*/
#define C1_EXTENT 1 /* Cray-1, X/YMP extent-based allocation */
#define C2_TRACK 2 /* Cray-2 sector/track block-style allocation */
/*
* Allocation flags used in cdi_allocf.
*/
#define CDI_ALF_NOGRW 001 /* Allocation is not allowed to grow */
#define CDI_ALF_PARTR 002 /* Allocation of partition type only */
#define CDI_ALF_RES1 004 /* unused */
#define CDI_ALF_RES2 010 /* unused */
struct nc1bmap_pos {
struct inode *nc1p; /* inode address */
daddr_t indblk; /* indirect block number (or 0) */
int exntni; /* extent index of current pos */
int curblk; /* logical block number not */
/* including blocks at current pos */
};
#endif /* __C1SYS_FS_NC1INO_H_ */</textarea></div>
<div class="crayon-main" style="">
<table class="crayon-table">
<tr class="crayon-row">
<td class="crayon-nums " data-settings="show">
<div class="crayon-nums-content" style="font-size: 12px !important; line-height: 15px !important;"><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-1">1</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-2">2</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-3">3</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-4">4</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-5">5</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-6">6</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-7">7</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-8">8</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-9">9</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-10">10</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-11">11</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-12">12</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-13">13</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-14">14</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-15">15</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-16">16</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-17">17</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-18">18</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-19">19</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-20">20</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-21">21</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-22">22</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-23">23</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-24">24</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-25">25</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-26">26</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-27">27</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-28">28</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-29">29</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-30">30</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-31">31</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-32">32</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-33">33</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-34">34</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-35">35</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-36">36</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-37">37</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-38">38</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-39">39</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-40">40</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-41">41</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-42">42</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-43">43</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-44">44</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-45">45</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-46">46</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-47">47</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-48">48</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-49">49</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-50">50</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-51">51</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-52">52</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-53">53</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-54">54</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-55">55</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-56">56</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-57">57</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-58">58</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-59">59</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-60">60</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-61">61</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-62">62</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-63">63</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-64">64</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-65">65</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-66">66</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-67">67</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-68">68</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-69">69</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-70">70</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-71">71</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-72">72</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-73">73</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-74">74</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-75">75</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-76">76</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-77">77</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-78">78</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-79">79</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-80">80</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-81">81</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-82">82</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-83">83</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-84">84</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-85">85</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-86">86</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-87">87</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-88">88</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-89">89</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-90">90</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-91">91</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-92">92</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-93">93</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-94">94</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-95">95</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-96">96</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-97">97</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-98">98</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-99">99</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-100">100</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-101">101</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-102">102</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-103">103</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-104">104</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-105">105</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-106">106</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-107">107</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-108">108</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-109">109</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-110">110</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-111">111</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-112">112</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-113">113</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-114">114</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-115">115</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-116">116</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-117">117</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-118">118</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-119">119</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-120">120</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-121">121</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-122">122</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-123">123</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-124">124</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-125">125</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-126">126</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-127">127</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-128">128</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-129">129</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-130">130</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-131">131</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-132">132</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-133">133</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-134">134</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-135">135</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-136">136</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-137">137</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-138">138</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-139">139</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-140">140</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-141">141</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-142">142</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-143">143</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-144">144</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-145">145</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-146">146</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-147">147</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-148">148</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-149">149</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-150">150</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-151">151</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-152">152</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-153">153</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-154">154</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-155">155</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-156">156</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-157">157</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-158">158</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-159">159</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-160">160</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-161">161</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-162">162</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-163">163</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-164">164</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-165">165</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-166">166</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-167">167</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-168">168</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-169">169</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-170">170</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-171">171</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-172">172</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-173">173</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-174">174</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-175">175</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-176">176</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-177">177</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-178">178</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-179">179</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-180">180</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-181">181</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-182">182</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-183">183</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-184">184</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-185">185</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-186">186</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-187">187</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-188">188</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-189">189</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-190">190</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-191">191</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-192">192</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-193">193</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-194">194</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-195">195</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-196">196</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-197">197</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-198">198</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-199">199</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-200">200</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-201">201</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-202">202</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-203">203</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-204">204</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-205">205</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-206">206</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-207">207</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-208">208</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-209">209</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-210">210</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-211">211</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-212">212</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-213">213</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-214">214</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-215">215</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-216">216</div><div class="crayon-num" data-line="crayon-598a6a3599cfe133896668-217">217</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599cfe133896668-218">218</div></div>
</td>
<td class="crayon-code"><div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="crayon-598a6a3599cfe133896668-1"><span class="crayon-c">/* USMID @(#)uts/c1/sys/fs/nc1ino.h 100.1 04/16/98 12:47:40 */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-2"> </div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-3"><span class="crayon-c">/* COPYRIGHT CRAY RESEARCH, INC.</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-4"><span class="crayon-c"> * UNPUBLISHED -- ALL RIGHTS RESERVED UNDER</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-5"><span class="crayon-c"> * THE COPYRIGHT LAWS OF THE UNITED STATES.</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-6"><span class="crayon-c"> */</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-7"> </div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-8"><span class="crayon-p">#ifndef __C1SYS_FS_NC1INO_H_</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-9"><span class="crayon-p">#define __C1SYS_FS_NC1INO_H_</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-10"> </div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-11"><span class="crayon-p">#include <sys/fs/sfsconsts.h></span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-12"> </div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-13"><span class="crayon-c">/*</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-14"><span class="crayon-c"> * Typedefs used by the filesystem dependent code</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-15"><span class="crayon-c"> */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-16"><span class="crayon-r">typedef</span><span class="crayon-h"> </span><span class="crayon-t">struct</span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-17"><span class="crayon-h"> </span><span class="crayon-e">uint </span><span class="crayon-v">iaf</span><span class="crayon-h"> </span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-cn">1</span><span class="crayon-sy">;</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-18"><span class="crayon-h"> </span><span class="crayon-v">uint</span><span class="crayon-h"> </span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-cn">15</span><span class="crayon-sy">;</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-19"><span class="crayon-h"> </span><span class="crayon-e">dev_t </span><span class="crayon-v">dev</span><span class="crayon-h"> </span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-cn">16</span><span class="crayon-sy">;</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-20"><span class="crayon-h"> </span><span class="crayon-e">blkno_t </span><span class="crayon-v">blk</span><span class="crayon-h"> </span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-cn">32</span><span class="crayon-sy">;</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-21"><span class="crayon-sy">}</span><span class="crayon-h"> </span><span class="crayon-v">dblk_t</span><span class="crayon-sy">;</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-22"> </div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-23"><span class="crayon-r">typedef</span><span class="crayon-h"> </span><span class="crayon-t">struct</span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-24"><span class="crayon-h"> </span><span class="crayon-t">int</span><span class="crayon-h"> </span><span class="crayon-v">nblks</span><span class="crayon-h"> </span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-cn">32</span><span class="crayon-sy">;</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-25"><span class="crayon-h"> </span><span class="crayon-e">blkno_t </span><span class="crayon-v">blk</span><span class="crayon-h"> </span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-cn">32</span><span class="crayon-sy">;</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-26"><span class="crayon-sy">}</span><span class="crayon-h"> </span><span class="crayon-v">extent_t</span><span class="crayon-sy">;</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-27"> </div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-28"><span class="crayon-c">/*</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-29"><span class="crayon-c"> * On-disk inode structure as it appears on the NC1FS & NC2FS filesystems</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-30"><span class="crayon-c"> */</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-31"><span class="crayon-t">struct</span><span class="crayon-h"> </span><span class="crayon-e">cdinode</span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-32"><span class="crayon-h"> </span><span class="crayon-e">uint </span><span class="crayon-v">cdi_rsrvd_1</span><span class="crayon-h"> </span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-cn">8</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-c">/* Reserved for expansion of cdi_mode */</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-33"><span class="crayon-h"> </span><span class="crayon-v">cdi_mode</span><span class="crayon-h"> </span><span class="crayon-o">:</span><span class="crayon-cn">24</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-c">/* mode and type of file (4-bits still free)*/</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-34"><span class="crayon-h"> </span><span class="crayon-v">cdi_msref</span><span class="crayon-h"> </span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-cn">1</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-c">/* Modification signature is referenced flag*/</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-35"><span class="crayon-h"> </span><span class="crayon-v">cdi_ms</span><span class="crayon-h"> </span><span class="crayon-o">:</span><span class="crayon-cn">14</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-c">/* Modification signature */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-36"><span class="crayon-h"> </span><span class="crayon-v">cdi_nlink</span><span class="crayon-h"> </span><span class="crayon-o">:</span><span class="crayon-cn">17</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* #of links to file (can hold > 100,000) */</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-37"> </div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-38"><span class="crayon-h"> </span><span class="crayon-e">uint </span><span class="crayon-v">cdi_rsrvd_2</span><span class="crayon-h"> </span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-cn">8</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-c">/* Reserved for expansion of cdi_uid */</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-39"><span class="crayon-h"> </span><span class="crayon-v">cdi_uid</span><span class="crayon-h"> </span><span class="crayon-o">:</span><span class="crayon-cn">24</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-c">/* Owner's user-ID */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-40"><span class="crayon-h"> </span><span class="crayon-v">cdi_rsrvd_3</span><span class="crayon-h"> </span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-cn">8</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-c">/* Reserved for expansion of cdi_gid */</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-41"><span class="crayon-h"> </span><span class="crayon-v">cdi_gid</span><span class="crayon-h"> </span><span class="crayon-o">:</span><span class="crayon-cn">24</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* Owner's group-ID */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-42"> </div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-43"><span class="crayon-h"> </span><span class="crayon-e">uint </span><span class="crayon-v">cdi_rsrvd_4</span><span class="crayon-h"> </span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-cn">8</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-c">/* Reserved for expansion of cdi_acid */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-44"><span class="crayon-h"> </span><span class="crayon-v">cdi_acid</span><span class="crayon-h"> </span><span class="crayon-o">:</span><span class="crayon-cn">24</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-c">/* Account-ID */</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-45"><span class="crayon-h"> </span><span class="crayon-v">cdi_gen</span><span class="crayon-h"> </span><span class="crayon-o">:</span><span class="crayon-cn">32</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* Inode generation number */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-46"> </div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-47"><span class="crayon-h"> </span><span class="crayon-t">long</span><span class="crayon-h"> </span><span class="crayon-v">cdi_size</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* Number of bytes in the file */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-48"><span class="crayon-h"> </span><span class="crayon-t">long</span><span class="crayon-h"> </span><span class="crayon-v">cdi_moffset</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* Modification offset for current signature*/</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-49"> </div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-50"><span class="crayon-h"> </span><span class="crayon-e">uint </span><span class="crayon-v">cdi_blocks</span><span class="crayon-h"> </span><span class="crayon-o">:</span><span class="crayon-cn">52</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-c">/* Quotas: #of blocks actually allocated */</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-51"><span class="crayon-h"> </span><span class="crayon-v">cdi_extcomp</span><span class="crayon-h"> </span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-cn">1</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-c">/* Security: extended compartments flag */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-52"><span class="crayon-h"> </span><span class="crayon-v">cdi_secrsvd1</span><span class="crayon-o">:</span><span class="crayon-cn">11</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* Security: reserved */</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-53"> </div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-54"><span class="crayon-h"> </span><span class="crayon-t">union</span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-55"><span class="crayon-h"> </span><span class="crayon-t">long</span><span class="crayon-h"> </span><span class="crayon-v">smallcmps</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* Compartments if [0..63] */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-56"><span class="crayon-h"> </span><span class="crayon-sy">}</span><span class="crayon-h"> </span><span class="crayon-v">cdi_compart</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* Security: compartments info */</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-57"> </div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-58"><span class="crayon-h"> </span><span class="crayon-e">uint </span><span class="crayon-v">cdi_slevel</span><span class="crayon-h"> </span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-cn">8</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-c">/* Security: security level */</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-59"><span class="crayon-h"> </span><span class="crayon-v">cdi_intcls</span><span class="crayon-h"> </span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-cn">8</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-c">/* Security: integrity class */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-60"><span class="crayon-h"> </span><span class="crayon-v">cdi_secflg</span><span class="crayon-h"> </span><span class="crayon-o">:</span><span class="crayon-cn">16</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-c">/* Security: flag settings */</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-61"><span class="crayon-h"> </span><span class="crayon-v">cdi_intcat</span><span class="crayon-h"> </span><span class="crayon-o">:</span><span class="crayon-cn">32</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* Security: integrity category */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-62"> </div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-63"><span class="crayon-h"> </span><span class="crayon-t">union</span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-64"><span class="crayon-h"> </span><span class="crayon-e">daddr_t </span><span class="crayon-v">daddr</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* Extent descriptor */</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-65"><span class="crayon-h"> </span><span class="crayon-e">dblk_t </span><span class="crayon-v">dblk</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* Block descriptor */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-66"><span class="crayon-h"> </span><span class="crayon-sy">}</span><span class="crayon-h"> </span><span class="crayon-v">cdi_privs</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* Privilege Assignment List location */</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-67"> </div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-68"><span class="crayon-h"> </span><span class="crayon-t">union</span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-69"><span class="crayon-h"> </span><span class="crayon-e">daddr_t </span><span class="crayon-v">daddr</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* Extent descriptor */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-70"><span class="crayon-h"> </span><span class="crayon-e">dblk_t </span><span class="crayon-v">dblk</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* Block descriptor */</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-71"><span class="crayon-h"> </span><span class="crayon-sy">}</span><span class="crayon-h"> </span><span class="crayon-v">cdi_acl</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* Security: ACL location */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-72"> </div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-73"><span class="crayon-h"> </span><span class="crayon-e">uint </span><span class="crayon-v">cdi_cpart</span><span class="crayon-h"> </span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-cn">8</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-c">/* Next partition from cbits to use */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-74"><span class="crayon-h"> </span><span class="crayon-v">cdi_dmport</span><span class="crayon-h"> </span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-cn">3</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-c">/* DMF daemon number */</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-75"><span class="crayon-h"> </span><span class="crayon-v">cdi_dmstate</span><span class="crayon-h"> </span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-cn">5</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-c">/* DMF file state */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-76"><span class="crayon-h"> </span><span class="crayon-v">cdi_dmkey</span><span class="crayon-h"> </span><span class="crayon-o">:</span><span class="crayon-cn">48</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* Data-Migration: key */</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-77"> </div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-78"><span class="crayon-h"> </span><span class="crayon-e">uint </span><span class="crayon-v">cdi_allocf</span><span class="crayon-h"> </span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-cn">4</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-c">/* Data-Block allocation flags */</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-79"><span class="crayon-h"> </span><span class="crayon-v">cdi_alloc</span><span class="crayon-h"> </span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-cn">4</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-c">/* Data-Block allocation technique */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-80"><span class="crayon-h"> </span><span class="crayon-v">cdi_cblks</span><span class="crayon-h"> </span><span class="crayon-o">:</span><span class="crayon-cn">24</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-c">/* Number of blocks to allocate per part */</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-81"><span class="crayon-h"> </span><span class="crayon-v">cdi_dmmid</span><span class="crayon-h"> </span><span class="crayon-o">:</span><span class="crayon-cn">32</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* Data-Migration: machine-ID */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-82"> </div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-83"><span class="crayon-h"> </span><span class="crayon-e">uint </span><span class="crayon-v">cdi_atmsec</span><span class="crayon-h"> </span><span class="crayon-o">:</span><span class="crayon-cn">34</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-c">/* Access time (secs) */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-84"><span class="crayon-h"> </span><span class="crayon-v">cdi_uatmsec</span><span class="crayon-h"> </span><span class="crayon-o">:</span><span class="crayon-cn">30</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* Access time (microsecs) */</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-85"> </div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-86"><span class="crayon-h"> </span><span class="crayon-e">uint </span><span class="crayon-v">cdi_mtmsec</span><span class="crayon-h"> </span><span class="crayon-o">:</span><span class="crayon-cn">34</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-c">/* Modification time (secs) */</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-87"><span class="crayon-h"> </span><span class="crayon-v">cdi_umtmsec</span><span class="crayon-h"> </span><span class="crayon-o">:</span><span class="crayon-cn">30</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* Modification time (microsecs) */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-88"> </div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-89"><span class="crayon-h"> </span><span class="crayon-e">uint </span><span class="crayon-v">cdi_ctmsec</span><span class="crayon-h"> </span><span class="crayon-o">:</span><span class="crayon-cn">34</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-c">/* Time of last inode modification (secs) */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-90"><span class="crayon-h"> </span><span class="crayon-v">cdi_uctmsec</span><span class="crayon-h"> </span><span class="crayon-o">:</span><span class="crayon-cn">30</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* Time of last inode modification (microsecs)*/</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-91"> </div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-92"><span class="crayon-h"> </span><span class="crayon-t">long</span><span class="crayon-h"> </span><span class="crayon-v">cdi_cbits</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* bit mask, file placement within cluster */</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-93"> </div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-94"><span class="crayon-h"> </span><span class="crayon-t">union</span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-95"><span class="crayon-h"> </span><span class="crayon-e">daddr_t </span><span class="crayon-v">daddr</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* Extent descriptor */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-96"><span class="crayon-h"> </span><span class="crayon-e">dblk_t </span><span class="crayon-v">dblk</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* Block descriptor */</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-97"><span class="crayon-h"> </span><span class="crayon-t">long</span><span class="crayon-h"> </span><span class="crayon-v">whole</span><span class="crayon-sy">;</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-98"><span class="crayon-h"> </span><span class="crayon-t">struct</span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-99"><span class="crayon-h"> </span><span class="crayon-e">uint </span><span class="crayon-v">one</span><span class="crayon-h"> </span><span class="crayon-o">:</span><span class="crayon-cn">32</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-c">/* half 1 */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-100"><span class="crayon-h"> </span><span class="crayon-v">two</span><span class="crayon-h"> </span><span class="crayon-o">:</span><span class="crayon-cn">32</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* half 2 */</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-101"><span class="crayon-h"> </span><span class="crayon-sy">}</span><span class="crayon-h"> </span><span class="crayon-v">half</span><span class="crayon-sy">;</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-102"><span class="crayon-h"> </span><span class="crayon-t">struct</span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-103"><span class="crayon-h"> </span><span class="crayon-e">uint </span><span class="crayon-v">one</span><span class="crayon-h"> </span><span class="crayon-o">:</span><span class="crayon-cn">16</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-c">/* quarter 1 */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-104"><span class="crayon-h"> </span><span class="crayon-v">two</span><span class="crayon-h"> </span><span class="crayon-o">:</span><span class="crayon-cn">16</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-c">/* quarter 2 */</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-105"><span class="crayon-h"> </span><span class="crayon-v">three</span><span class="crayon-h"> </span><span class="crayon-o">:</span><span class="crayon-cn">16</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-c">/* quarter 3 */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-106"><span class="crayon-h"> </span><span class="crayon-v">four</span><span class="crayon-h"> </span><span class="crayon-o">:</span><span class="crayon-cn">16</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* quarter 4 */</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-107"><span class="crayon-h"> </span><span class="crayon-sy">}</span><span class="crayon-h"> </span><span class="crayon-v">quarter</span><span class="crayon-sy">;</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-108"><span class="crayon-h"> </span><span class="crayon-t">struct</span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-109"><span class="crayon-h"> </span><span class="crayon-e">uint </span><span class="crayon-v">one</span><span class="crayon-h"> </span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-cn">8</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-c">/* eighth 1 */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-110"><span class="crayon-h"> </span><span class="crayon-v">two</span><span class="crayon-h"> </span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-cn">8</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-c">/* eighth 2 */</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-111"><span class="crayon-h"> </span><span class="crayon-v">three</span><span class="crayon-h"> </span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-cn">8</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-c">/* eighth 3 */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-112"><span class="crayon-h"> </span><span class="crayon-v">four</span><span class="crayon-h"> </span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-cn">8</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-c">/* eighth 4 */</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-113"><span class="crayon-h"> </span><span class="crayon-v">five</span><span class="crayon-h"> </span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-cn">8</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-c">/* eighth 5 */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-114"><span class="crayon-h"> </span><span class="crayon-v">six</span><span class="crayon-h"> </span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-cn">8</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-c">/* eighth 6 */</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-115"><span class="crayon-h"> </span><span class="crayon-v">seven</span><span class="crayon-h"> </span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-cn">8</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-c">/* eighth 7 */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-116"><span class="crayon-h"> </span><span class="crayon-v">eight</span><span class="crayon-h"> </span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-cn">8</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* eighth 8 */</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-117"><span class="crayon-h"> </span><span class="crayon-sy">}</span><span class="crayon-h"> </span><span class="crayon-v">eighth</span><span class="crayon-sy">;</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-118"><span class="crayon-h"> </span><span class="crayon-sy">}</span><span class="crayon-h"> </span><span class="crayon-v">cdi_addr</span><span class="crayon-sy">[</span><span class="crayon-cn">8</span><span class="crayon-sy">]</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* File allocation locators */</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-119"><span class="crayon-h"> </span><span class="crayon-c">/* The #define for NC1NADDR must not be > 8 */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-120"> </div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-121"><span class="crayon-h"> </span><span class="crayon-t">long</span><span class="crayon-h"> </span><span class="crayon-v">cdi_slock</span><span class="crayon-sy">[</span><span class="crayon-v">SFSLK_SZ</span><span class="crayon-sy">]</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* Reserved for SFS lock structure */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-122"> </div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-123"><span class="crayon-h"> </span><span class="crayon-e">uint </span><span class="crayon-v">cdi_rsrvd_5</span><span class="crayon-h"> </span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-cn">16</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-c">/* Reserved for Kernel group for expansion */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-124"><span class="crayon-h"> </span><span class="crayon-v">cdi_applac</span><span class="crayon-h"> </span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-cn">32</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-c">/* Application accounting tag */</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-125"><span class="crayon-h"> </span><span class="crayon-v">cdi_nindir</span><span class="crayon-h"> </span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-cn">16</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* # of indirect extent blocks */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-126"> </div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-127"><span class="crayon-h"> </span><span class="crayon-t">long</span><span class="crayon-h"> </span><span class="crayon-v">cdi_rsrvd</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* Reserved by the Kernel group for use in */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-128"><span class="crayon-h"> </span><span class="crayon-c">/* future releases of UNICOS. */</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-129"><span class="crayon-h"> </span><span class="crayon-c">/* No notification will be given when these */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-130"><span class="crayon-h"> </span><span class="crayon-c">/* words will be employed by future versions */</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-131"><span class="crayon-h"> </span><span class="crayon-c">/* of UNICOS. */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-132"> </div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-133"><span class="crayon-h"> </span><span class="crayon-t">long</span><span class="crayon-h"> </span><span class="crayon-v">cdi_sitebits</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* Word reserved for site use. */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-134"><span class="crayon-sy">}</span><span class="crayon-sy">;</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-135"> </div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-136"><span class="crayon-c">/* NOTE: Reserved fields in the cdinode structure will be preserved</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-137"><span class="crayon-c"> * when an inode is updated. They will be cleared when an inode is</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-138"><span class="crayon-c"> * newly allocated.</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-139"><span class="crayon-c"> */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-140"> </div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-141"><span class="crayon-p">#define NC1INOPB 16</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-142"> </div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-143"><span class="crayon-c">/*</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-144"><span class="crayon-c"> * struct cdinode cdi_addr defines</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-145"><span class="crayon-c"> *</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-146"><span class="crayon-c"> * For IFCHR & IFBLK devices, the cdi_addr words are used to hold</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-147"><span class="crayon-c"> * special security and configuration information, as well as</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-148"><span class="crayon-c"> * the device's rdev field.</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-149"><span class="crayon-c"> */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-150"><span class="crayon-p">#define cdi_rdev cdi_addr[0].half.one /* IFCHR or IFBLK rdev */</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-151"><span class="crayon-h"> </span><span class="crayon-c">/* cdi_addr[0].half.two Reserved */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-152"><span class="crayon-h"> </span><span class="crayon-c">/* Security fields related to devices */</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-153"><span class="crayon-p">#define cdi_minlvl cdi_addr[1].eighth.one /* minimum level */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-154"><span class="crayon-p">#define cdi_maxlvl cdi_addr[1].eighth.two /* maximum level */</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-155"><span class="crayon-h"> </span><span class="crayon-c">/* cdi_addr[1].quarter.two Reserved */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-156"><span class="crayon-h"> </span><span class="crayon-c">/* cdi_addr[1].half.two Reserved */</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-157"><span class="crayon-p">#define cdi_valcmp cdi_addr[2].whole /* valid compartments */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-158"><span class="crayon-h"> </span><span class="crayon-c">/* cdi_addr[3].whole Reserved */</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-159"><span class="crayon-h"> </span><span class="crayon-c">/* Configuration related device parameters */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-160"><span class="crayon-p">#define cdi_param0 cdi_addr[4].half.one</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-161"><span class="crayon-p">#define cdi_param1 cdi_addr[4].half.two</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-162"><span class="crayon-p">#define cdi_param2 cdi_addr[5].half.one</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-163"><span class="crayon-p">#define cdi_param3 cdi_addr[5].half.two</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-164"><span class="crayon-p">#define cdi_param4 cdi_addr[6].half.one</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-165"><span class="crayon-p">#define cdi_param5 cdi_addr[6].half.two</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-166"><span class="crayon-p">#define cdi_param6 cdi_addr[7].half.one</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-167"><span class="crayon-p">#define cdi_param7 cdi_addr[7].half.two</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-168"> </div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-169"><span class="crayon-p">#define cdi_filename cdi_addr[5].whole /* Filename of logical */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-170"> </div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-171"><span class="crayon-c">/*</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-172"><span class="crayon-c"> * The i_number in the NC1FS is made up of three elements,</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-173"><span class="crayon-c"> * the partition number, the inode region number and the</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-174"><span class="crayon-c"> * inode region relative inode number. The maximum size of </span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-175"><span class="crayon-c"> * each of these fields was selected for potential expansion</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-176"><span class="crayon-c"> * at a later date. The current composition of the i_number</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-177"><span class="crayon-c"> * is:</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-178"><span class="crayon-c"> * 32/ 0, 8/ Partition, 4/ Iregion, 20/relative inum</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-179"><span class="crayon-c"> */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-180"> </div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-181"><span class="crayon-p">#define nc1ino_rinum(x) (int) ((x)&((1<<20)-1))</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-182"><span class="crayon-p">#define nc1ino_ireg(x) (int) (((x)>>20)&017)</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-183"><span class="crayon-p">#define nc1ino_part(x) (int) (((x)>>24)&0377)</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-184"><span class="crayon-p">#define makenc1ino(p,r,i) (ino_t)((long) (p)<<24 | (long) (r)<<20 | (i))</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-185"> </div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-186"><span class="crayon-c">/*</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-187"><span class="crayon-c"> * NC1FS i_number to disk block (inode region relative) and offset</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-188"><span class="crayon-c"> */</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-189"><span class="crayon-p">#define nc1itodf(fp,i) (fp->s_part[nc1ino_part(i)].fd_ireg[nc1ino_ireg(i)]\</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-190"><span class="crayon-sy">.</span><span class="crayon-v">i_sblk</span><span class="crayon-o">+</span><span class="crayon-e">nc1itod</span><span class="crayon-sy">(</span><span class="crayon-v">i</span><span class="crayon-sy">)</span><span class="crayon-o">+</span><span class="crayon-e">nc1imapblks</span><span class="crayon-sy">(</span><span class="crayon-v">fp</span><span class="crayon-sy">)</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-191"><span class="crayon-p">#define nc1itod(i) (nc1ino_rinum(i) / NC1INOPB)</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-192"><span class="crayon-p">#define nc1itoo(i) ((nc1ino_rinum(i) % NC1INOPB) * sizeof(struct cdinode))</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-193"><span class="crayon-p">#define nc1itos(i, iou) ( (iou) > 1 ? (nc1itod(i) / (iou)) : nc1itod(i) )</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-194"><span class="crayon-p">#define nc1imapblks(fp) ((fp->s_priblock+1)*(fp->s_numiresblks+1))</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-195"> </div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-196"><span class="crayon-c">/*</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-197"><span class="crayon-c"> * Allocation types used in cdi_alloc.</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-198"><span class="crayon-c"> */</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-199"><span class="crayon-p">#define C1_EXTENT 1 /* Cray-1, X/YMP extent-based allocation */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-200"><span class="crayon-p">#define C2_TRACK 2 /* Cray-2 sector/track block-style allocation */</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-201"> </div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-202"><span class="crayon-c">/*</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-203"><span class="crayon-c"> * Allocation flags used in cdi_allocf.</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-204"><span class="crayon-c"> */</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-205"><span class="crayon-p">#define CDI_ALF_NOGRW 001 /* Allocation is not allowed to grow */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-206"><span class="crayon-p">#define CDI_ALF_PARTR 002 /* Allocation of partition type only */</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-207"><span class="crayon-p">#define CDI_ALF_RES1 004 /* unused */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-208"><span class="crayon-p">#define CDI_ALF_RES2 010 /* unused */</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-209"> </div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-210"><span class="crayon-t">struct</span><span class="crayon-h"> </span><span class="crayon-e">nc1bmap_pos</span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-211"><span class="crayon-h"> </span><span class="crayon-t">struct</span><span class="crayon-h"> </span><span class="crayon-v">inode</span><span class="crayon-h"> </span><span class="crayon-o">*</span><span class="crayon-v">nc1p</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* inode address */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-212"><span class="crayon-h"> </span><span class="crayon-e">daddr_t </span><span class="crayon-v">indblk</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* indirect block number (or 0) */</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-213"><span class="crayon-h"> </span><span class="crayon-t">int</span><span class="crayon-h"> </span><span class="crayon-v">exntni</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* extent index of current pos */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-214"><span class="crayon-h"> </span><span class="crayon-t">int</span><span class="crayon-h"> </span><span class="crayon-v">curblk</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* logical block number not */</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-215"><span class="crayon-h"> </span><span class="crayon-c">/* including blocks at current pos */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-216"><span class="crayon-sy">}</span><span class="crayon-sy">;</span></div><div class="crayon-line" id="crayon-598a6a3599cfe133896668-217"> </div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599cfe133896668-218"><span class="crayon-p">#endif /* __C1SYS_FS_NC1INO_H_ */</span></div></div></td>
</tr>
</table>
</div>
</div>
<!-- [Format Time: 0.0131 seconds] -->
<p></p><!-- Crayon Syntax Highlighter v_2.7.2_beta -->
<div id="crayon-598a6a3599d11241552200" class="crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover" style=" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;">
<div class="crayon-toolbar" data-settings=" mouseover overlay hide delay" style="font-size: 12px !important;height: 18px !important; line-height: 18px !important;"><span class="crayon-title">ncdir.h</span>
<div class="crayon-tools" style="font-size: 12px !important;height: 18px !important; line-height: 18px !important;"><div class="crayon-button crayon-nums-button" title="Toggle Line Numbers"><div class="crayon-button-icon"></div></div><div class="crayon-button crayon-plain-button" title="Toggle Plain Code"><div class="crayon-button-icon"></div></div><div class="crayon-button crayon-wrap-button" title="Toggle Line Wrap"><div class="crayon-button-icon"></div></div><div class="crayon-button crayon-expand-button" title="Expand Code"><div class="crayon-button-icon"></div></div><div class="crayon-button crayon-copy-button" title="Copy"><div class="crayon-button-icon"></div></div><div class="crayon-button crayon-popup-button" title="Open Code In New Window"><div class="crayon-button-icon"></div></div><span class="crayon-language">C</span></div></div>
<div class="crayon-info" style="min-height: 16.8px !important; line-height: 16.8px !important;"></div>
<div class="crayon-plain-wrap"><textarea wrap="soft" class="crayon-plain print-no" data-settings="dblclick" readonly style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;">
/* USMID @(#)uts/include/sys/fs/ncdir.h 100.0 07/11/97 02:46:40 */
/* COPYRIGHT CRAY RESEARCH, INC.
* UNPUBLISHED -- ALL RIGHTS RESERVED UNDER
* THE COPYRIGHT LAWS OF THE UNITED STATES.
*/
#ifndef __NCDIR_H_
#define __NCDIR_H_
/*
* Directory structure for Cray file systems using Berkeley-style format:
*
* The directory structure for these file systems is modeled after
* the Berkeley directory structure. However, unlike the Berkeley
* implementation, the name in a directory entry is NOT null
* terminated.
*/
#define CDMAXNAMELEN 255 /* Maximum length of file name */
#define CDIRBLKSIZ BSIZE /* Directory fragment size; */
/* WARNING: Must be a power of 2 */
/*
* CDIRSIZ() is a macro that given a pointer to an allocated directory
* entry, returns the smallest possible size (in bytes) for the directory
* entry. Any difference in the value returned by this macro and the actual
* size of the directory entry record is free space within the directory
* chunk.
*/
#define CDIRSIZ(dp) \
(sizeof(struct cdirect) - ((CDMAXNAMELEN + NBPW-1) & ~(NBPW-1)) \
+ ((dp)->cd_namelen + NBPW-1) & ~(NBPW-1))
struct cdirect {
unsigned long cd_ino; /* Inode for name */
unsigned long cd_sino; /* Reserved for future use */
unsigned short cd_reserved:10, /* Reserved for future use */
cd_signature:22, /* Name signature */
cd_reclen:22, /* Record length (bytes) */
cd_namelen:10; /* Length of name (bytes); */
/* MUST = 0 if cd_ino = 0! */
unsigned char cd_name[CDMAXNAMELEN]; /* NON-null terminated name */
};
#endif /* __NCDIR_H_ */</textarea></div>
<div class="crayon-main" style="">
<table class="crayon-table">
<tr class="crayon-row">
<td class="crayon-nums " data-settings="show">
<div class="crayon-nums-content" style="font-size: 12px !important; line-height: 15px !important;"><div class="crayon-num" data-line="crayon-598a6a3599d11241552200-1">1</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599d11241552200-2">2</div><div class="crayon-num" data-line="crayon-598a6a3599d11241552200-3">3</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599d11241552200-4">4</div><div class="crayon-num" data-line="crayon-598a6a3599d11241552200-5">5</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599d11241552200-6">6</div><div class="crayon-num" data-line="crayon-598a6a3599d11241552200-7">7</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599d11241552200-8">8</div><div class="crayon-num" data-line="crayon-598a6a3599d11241552200-9">9</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599d11241552200-10">10</div><div class="crayon-num" data-line="crayon-598a6a3599d11241552200-11">11</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599d11241552200-12">12</div><div class="crayon-num" data-line="crayon-598a6a3599d11241552200-13">13</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599d11241552200-14">14</div><div class="crayon-num" data-line="crayon-598a6a3599d11241552200-15">15</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599d11241552200-16">16</div><div class="crayon-num" data-line="crayon-598a6a3599d11241552200-17">17</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599d11241552200-18">18</div><div class="crayon-num" data-line="crayon-598a6a3599d11241552200-19">19</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599d11241552200-20">20</div><div class="crayon-num" data-line="crayon-598a6a3599d11241552200-21">21</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599d11241552200-22">22</div><div class="crayon-num" data-line="crayon-598a6a3599d11241552200-23">23</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599d11241552200-24">24</div><div class="crayon-num" data-line="crayon-598a6a3599d11241552200-25">25</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599d11241552200-26">26</div><div class="crayon-num" data-line="crayon-598a6a3599d11241552200-27">27</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599d11241552200-28">28</div><div class="crayon-num" data-line="crayon-598a6a3599d11241552200-29">29</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599d11241552200-30">30</div><div class="crayon-num" data-line="crayon-598a6a3599d11241552200-31">31</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599d11241552200-32">32</div><div class="crayon-num" data-line="crayon-598a6a3599d11241552200-33">33</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599d11241552200-34">34</div><div class="crayon-num" data-line="crayon-598a6a3599d11241552200-35">35</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599d11241552200-36">36</div><div class="crayon-num" data-line="crayon-598a6a3599d11241552200-37">37</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599d11241552200-38">38</div><div class="crayon-num" data-line="crayon-598a6a3599d11241552200-39">39</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599d11241552200-40">40</div><div class="crayon-num" data-line="crayon-598a6a3599d11241552200-41">41</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599d11241552200-42">42</div><div class="crayon-num" data-line="crayon-598a6a3599d11241552200-43">43</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599d11241552200-44">44</div><div class="crayon-num" data-line="crayon-598a6a3599d11241552200-45">45</div></div>
</td>
<td class="crayon-code"><div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="crayon-598a6a3599d11241552200-1"><span class="crayon-c">/* USMID @(#)uts/include/sys/fs/ncdir.h 100.0 07/11/97 02:46:40 */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599d11241552200-2"> </div><div class="crayon-line" id="crayon-598a6a3599d11241552200-3"><span class="crayon-c">/* COPYRIGHT CRAY RESEARCH, INC.</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599d11241552200-4"><span class="crayon-c"> * UNPUBLISHED -- ALL RIGHTS RESERVED UNDER</span></div><div class="crayon-line" id="crayon-598a6a3599d11241552200-5"><span class="crayon-c"> * THE COPYRIGHT LAWS OF THE UNITED STATES.</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599d11241552200-6"><span class="crayon-c"> */</span></div><div class="crayon-line" id="crayon-598a6a3599d11241552200-7"> </div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599d11241552200-8"><span class="crayon-p">#ifndef __NCDIR_H_</span></div><div class="crayon-line" id="crayon-598a6a3599d11241552200-9"><span class="crayon-p">#define __NCDIR_H_</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599d11241552200-10"> </div><div class="crayon-line" id="crayon-598a6a3599d11241552200-11"><span class="crayon-c">/*</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599d11241552200-12"><span class="crayon-c"> * Directory structure for Cray file systems using Berkeley-style format:</span></div><div class="crayon-line" id="crayon-598a6a3599d11241552200-13"><span class="crayon-c"> *</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599d11241552200-14"><span class="crayon-c"> * The directory structure for these file systems is modeled after</span></div><div class="crayon-line" id="crayon-598a6a3599d11241552200-15"><span class="crayon-c"> * the Berkeley directory structure. However, unlike the Berkeley</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599d11241552200-16"><span class="crayon-c"> * implementation, the name in a directory entry is NOT null</span></div><div class="crayon-line" id="crayon-598a6a3599d11241552200-17"><span class="crayon-c"> * terminated.</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599d11241552200-18"><span class="crayon-c"> */</span></div><div class="crayon-line" id="crayon-598a6a3599d11241552200-19"><span class="crayon-p">#define CDMAXNAMELEN 255 /* Maximum length of file name */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599d11241552200-20"><span class="crayon-p">#define CDIRBLKSIZ BSIZE /* Directory fragment size; */</span></div><div class="crayon-line" id="crayon-598a6a3599d11241552200-21"><span class="crayon-h"> </span><span class="crayon-c">/* WARNING: Must be a power of 2 */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599d11241552200-22"> </div><div class="crayon-line" id="crayon-598a6a3599d11241552200-23"><span class="crayon-c">/*</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599d11241552200-24"><span class="crayon-c"> * CDIRSIZ() is a macro that given a pointer to an allocated directory</span></div><div class="crayon-line" id="crayon-598a6a3599d11241552200-25"><span class="crayon-c"> * entry, returns the smallest possible size (in bytes) for the directory</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599d11241552200-26"><span class="crayon-c"> * entry. Any difference in the value returned by this macro and the actual</span></div><div class="crayon-line" id="crayon-598a6a3599d11241552200-27"><span class="crayon-c"> * size of the directory entry record is free space within the directory</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599d11241552200-28"><span class="crayon-c"> * chunk.</span></div><div class="crayon-line" id="crayon-598a6a3599d11241552200-29"><span class="crayon-c"> */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599d11241552200-30"><span class="crayon-p">#define CDIRSIZ(dp) \</span></div><div class="crayon-line" id="crayon-598a6a3599d11241552200-31"><span class="crayon-h"> </span><span class="crayon-sy">(</span><span class="crayon-r">sizeof</span><span class="crayon-sy">(</span><span class="crayon-t">struct</span><span class="crayon-h"> </span><span class="crayon-v">cdirect</span><span class="crayon-sy">)</span><span class="crayon-h"> </span><span class="crayon-o">-</span><span class="crayon-h"> </span><span class="crayon-sy">(</span><span class="crayon-sy">(</span><span class="crayon-v">CDMAXNAMELEN</span><span class="crayon-h"> </span><span class="crayon-o">+</span><span class="crayon-h"> </span><span class="crayon-v">NBPW</span><span class="crayon-o">-</span><span class="crayon-cn">1</span><span class="crayon-sy">)</span><span class="crayon-h"> </span><span class="crayon-o">&</span><span class="crayon-h"> </span><span class="crayon-o">~</span><span class="crayon-sy">(</span><span class="crayon-v">NBPW</span><span class="crayon-o">-</span><span class="crayon-cn">1</span><span class="crayon-sy">)</span><span class="crayon-sy">)</span><span class="crayon-h"> </span><span class="crayon-sy">\</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599d11241552200-32"><span class="crayon-h"> </span><span class="crayon-o">+</span><span class="crayon-h"> </span><span class="crayon-sy">(</span><span class="crayon-sy">(</span><span class="crayon-v">dp</span><span class="crayon-sy">)</span><span class="crayon-o">-></span><span class="crayon-v">cd_namelen</span><span class="crayon-h"> </span><span class="crayon-o">+</span><span class="crayon-h"> </span><span class="crayon-v">NBPW</span><span class="crayon-o">-</span><span class="crayon-cn">1</span><span class="crayon-sy">)</span><span class="crayon-h"> </span><span class="crayon-o">&</span><span class="crayon-h"> </span><span class="crayon-o">~</span><span class="crayon-sy">(</span><span class="crayon-v">NBPW</span><span class="crayon-o">-</span><span class="crayon-cn">1</span><span class="crayon-sy">)</span><span class="crayon-sy">)</span></div><div class="crayon-line" id="crayon-598a6a3599d11241552200-33"> </div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599d11241552200-34"><span class="crayon-t">struct</span><span class="crayon-h"> </span><span class="crayon-e">cdirect</span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line" id="crayon-598a6a3599d11241552200-35"><span class="crayon-h"> </span><span class="crayon-t">unsigned</span><span class="crayon-h"> </span><span class="crayon-t">long</span><span class="crayon-h"> </span><span class="crayon-v">cd_ino</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* Inode for name */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599d11241552200-36"><span class="crayon-h"> </span><span class="crayon-t">unsigned</span><span class="crayon-h"> </span><span class="crayon-t">long</span><span class="crayon-h"> </span><span class="crayon-v">cd_sino</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* Reserved for future use */</span></div><div class="crayon-line" id="crayon-598a6a3599d11241552200-37"><span class="crayon-h"> </span><span class="crayon-t">unsigned</span><span class="crayon-h"> </span><span class="crayon-t">short</span><span class="crayon-h"> </span><span class="crayon-v">cd_reserved</span><span class="crayon-o">:</span><span class="crayon-cn">10</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-c">/* Reserved for future use */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599d11241552200-38"><span class="crayon-h"> </span><span class="crayon-v">cd_signature</span><span class="crayon-o">:</span><span class="crayon-cn">22</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-c">/* Name signature */</span></div><div class="crayon-line" id="crayon-598a6a3599d11241552200-39"><span class="crayon-h"> </span><span class="crayon-v">cd_reclen</span><span class="crayon-o">:</span><span class="crayon-cn">22</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-c">/* Record length (bytes) */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599d11241552200-40"><span class="crayon-h"> </span><span class="crayon-v">cd_namelen</span><span class="crayon-o">:</span><span class="crayon-cn">10</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* Length of name (bytes); */</span></div><div class="crayon-line" id="crayon-598a6a3599d11241552200-41"><span class="crayon-h"> </span><span class="crayon-c">/* MUST = 0 if cd_ino = 0! */</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599d11241552200-42"><span class="crayon-h"> </span><span class="crayon-t">unsigned</span><span class="crayon-h"> </span><span class="crayon-t">char</span><span class="crayon-h"> </span><span class="crayon-v">cd_name</span><span class="crayon-sy">[</span><span class="crayon-v">CDMAXNAMELEN</span><span class="crayon-sy">]</span><span class="crayon-sy">;</span><span class="crayon-h"> </span><span class="crayon-c">/* NON-null terminated name */</span></div><div class="crayon-line" id="crayon-598a6a3599d11241552200-43"><span class="crayon-sy">}</span><span class="crayon-sy">;</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599d11241552200-44"> </div><div class="crayon-line" id="crayon-598a6a3599d11241552200-45"><span class="crayon-p">#endif /* __NCDIR_H_ */</span></div></div></td>
</tr>
</table>
</div>
</div>
<!-- [Format Time: 0.0027 seconds] -->
<p>OK, that was a mouthful. There are many things to tease out here, so let’s start!</p>
<p>The structure of the file-system is based on the traditional UNIX approach, but there are a few key differences. The whole file-system thinks of the disk as a series of 4kByte blocks. These blocks conveniently map to sectors on the hard drives used in the J-90, but that’s not necessarily a requirement. A file-system on the machine could be spread around on multiple ‘partitions’ on multiple drives and supported various striping configurations, though those details are not terribly important for a SW simulator. The mapping of sector-ranges to partitions and file-systems is part of the parameter file, though some of this information is duplicated in the file-system itself. (In other words there’s no partition table on the hard drives.)</p>
<p>Blocks are numbered consecutevly, starting at 0 through all the partitions that constitue a file-system, at least I think so: I’ve seen sections of code that seem to iterate through all the partitions and doing a subtraction of what appears to be the partition size to determine the physical sector corresponding to a logical block.</p>
<p>The most important information about the file-system is stored in the super-block. The primary copy of it is at block 1 with several copies sprinkled around the drive. This structure contains all the (more or less) static information about the file-system. The frequently changing info (like last mount time, locking, number of free inodes, etc.) are factored out into the dynamic block (nc1dblock). The dynamic block is also one block large and it’s location is recorded in the super-block.</p>
<p>These two together describe the file-system layout but not the content. For that, we’ll need a set of inodes and something, called the FREEMAP. Each inode describe one entity (the content of a file or a directory) on the file-system. It is the key structure from which the blocks containing the content can be accessed. An inode entry is 256 bytes long, so 16 of them fits in a block. A set of blocks are set aside when the file-system is created for inode storage. These regions are described in the super-block for each partition that constitutes the file-system.</p>
<p>Given an inode number, it’s block offset can be determined by dividing the number by 16. This block offset than can be used in an iteration through the inode allocation regions in the super-block to convert it to an absolute block number. Within the block, the modulo 16 of the inode number (multiplied by 256) provides the offset of the struct.</p>
<p>The root inode number is two in all UNIX system. Unicos apparently has the feature of changing that default (there’s a field for that in the super-block), but I decided to not mess with it.</p>
<p>Contrary to the original UNIX file-system design, there’s no free inode list. Instead, a bitmap is stored on the hard-drive, which records the state of each block on the file-system: 0 for free, 1 for occupied. This structure is called the FREEMAP, and it’s location and size is recorded in the super-block (s_mapoff and s_mapblks fields).</p>
<p>Theoretically this information is not strictly necessary: one can iterate through all inodes, record all the allocated blocks, and what’s not allocated, is – by definition – free. This is a length process though, so understandably the OS caches the result. The fsck utility among other things checks the and fixes any inconsistencies between the inodes and the FREEMAP.</p>
<h1>Inodes</h1>
<p>As we’ve discussed, UNIX – pretty much all flavors of it – represents the content of every file (or directory) with an inode. The inode structure contains the list of blocks corresponding to the file. This structure is rather hairy, but the main use-case is fairly easy to grasp: the allocations for the file are held in an array of 8 entries: cdi_addr. Each allocation is a contiguous extent of sectors, so each entry has a start block and a block-count part. I’m sure for highly fragmented file-systems, indirect inodes also exist (when the 8 entries in the inode are insufficient to describe the whole file) but I didn’t bother figuring out how that works: due to the extent-based allocation, it’s pretty difficult to set up a scenario when 8 entries are insufficient. It certainly won’t be a problem for a FS created from scratch on the host.</p>
<p>Inodes also contain the access permissions and time-stamps for creation, modification etc. These details are not terribly important or interesting for the moment. The only thing to note is that UNICOS on top of supporting the traditional UNIX-style permissions, has a whole new and different permission system. If it is enabled by default, I’m in trouble – I’ll have to figure out what the related fields mean. However, there’s no indication that’s default on.</p>
<h1>Directories</h1>
<p>Inodes only capable of describing the content of something. To make the FS useful, we need to give a name to these content ‘blobs’ and organize them. This is what directories achieve: associate a file name with it’s content, that is, an inode.</p>
<p>So how are directories stored? Of course in an inode! While for normal files, the content of blocks the inode references is ‘just a bunch of bytes’ as far as the OS is concerned, for directories, the format is defined: it is a set of cdirect entries. These entries are not much more than a mapping between a name and an inode (which then describes the content), with one important exception: there’s a field, called cd_signature. After some debugging I realized that this field is a hash of sorts of the file-name. But what kind? There are so many to chose from? The only way to figure that out was to look at the instruction traces for the kernel trying to access a directory entry on the hard drive. From that work, the following algorithm emerged:</p><!-- Crayon Syntax Highlighter v_2.7.2_beta -->
<div id="crayon-598a6a3599d20144940792" class="crayon-syntax crayon-theme-classic crayon-font-monaco crayon-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover" style=" margin-top: 12px; margin-bottom: 12px; font-size: 12px !important; line-height: 15px !important;">
<div class="crayon-toolbar" data-settings=" mouseover overlay hide delay" style="font-size: 12px !important;height: 18px !important; line-height: 18px !important;"><span class="crayon-title"></span>
<div class="crayon-tools" style="font-size: 12px !important;height: 18px !important; line-height: 18px !important;"><div class="crayon-button crayon-nums-button" title="Toggle Line Numbers"><div class="crayon-button-icon"></div></div><div class="crayon-button crayon-plain-button" title="Toggle Plain Code"><div class="crayon-button-icon"></div></div><div class="crayon-button crayon-wrap-button" title="Toggle Line Wrap"><div class="crayon-button-icon"></div></div><div class="crayon-button crayon-expand-button" title="Expand Code"><div class="crayon-button-icon"></div></div><div class="crayon-button crayon-copy-button" title="Copy"><div class="crayon-button-icon"></div></div><div class="crayon-button crayon-popup-button" title="Open Code In New Window"><div class="crayon-button-icon"></div></div><span class="crayon-language">C++</span></div></div>
<div class="crayon-info" style="min-height: 16.8px !important; line-height: 16.8px !important;"></div>
<div class="crayon-plain-wrap"><textarea wrap="soft" class="crayon-plain print-no" data-settings="dblclick" readonly style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;">
uint32_t CalcHash(const char *aFileName) {
size_t Length = strlen(aFileName);
std::vector<uint64_t> Buffer((Length + 7) / 8);
std::fill(Buffer.begin(), Buffer.end(), 0);
memcpy(&(Buffer[0]), aFileName, Length);
uint64_t XHash = 0;
for (auto &Word : Buffer) {
XHash ^= SwapBytes(Word);
}
uint64_t XHash2 = XHash + (XHash >> 7) + (XHash >> 17) +
(XHash >> 27) + (XHash >> 37) + (XHash >> 47);
XHash2 = XHash2 & 0x3fffff;
return uint32_t(XHash2);
}</textarea></div>
<div class="crayon-main" style="">
<table class="crayon-table">
<tr class="crayon-row">
<td class="crayon-nums " data-settings="show">
<div class="crayon-nums-content" style="font-size: 12px !important; line-height: 15px !important;"><div class="crayon-num" data-line="crayon-598a6a3599d20144940792-1">1</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599d20144940792-2">2</div><div class="crayon-num" data-line="crayon-598a6a3599d20144940792-3">3</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599d20144940792-4">4</div><div class="crayon-num" data-line="crayon-598a6a3599d20144940792-5">5</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599d20144940792-6">6</div><div class="crayon-num" data-line="crayon-598a6a3599d20144940792-7">7</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599d20144940792-8">8</div><div class="crayon-num" data-line="crayon-598a6a3599d20144940792-9">9</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599d20144940792-10">10</div><div class="crayon-num" data-line="crayon-598a6a3599d20144940792-11">11</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599d20144940792-12">12</div><div class="crayon-num" data-line="crayon-598a6a3599d20144940792-13">13</div><div class="crayon-num crayon-striped-num" data-line="crayon-598a6a3599d20144940792-14">14</div></div>
</td>
<td class="crayon-code"><div class="crayon-pre" style="font-size: 12px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="crayon-598a6a3599d20144940792-1"><span class="crayon-e">uint32_t </span><span class="crayon-e">CalcHash</span><span class="crayon-sy">(</span><span class="crayon-m">const</span><span class="crayon-h"> </span><span class="crayon-t">char</span><span class="crayon-h"> </span><span class="crayon-o">*</span><span class="crayon-v">aFileName</span><span class="crayon-sy">)</span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599d20144940792-2"><span class="crayon-h"> </span><span class="crayon-e">size_t </span><span class="crayon-v">Length</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-e">strlen</span><span class="crayon-sy">(</span><span class="crayon-v">aFileName</span><span class="crayon-sy">)</span><span class="crayon-sy">;</span></div><div class="crayon-line" id="crayon-598a6a3599d20144940792-3"><span class="crayon-h"> </span><span class="crayon-v">std</span><span class="crayon-o">::</span><span class="crayon-v">vector</span><span class="crayon-o"><</span><span class="crayon-v">uint64_t</span><span class="crayon-o">></span><span class="crayon-h"> </span><span class="crayon-e">Buffer</span><span class="crayon-sy">(</span><span class="crayon-sy">(</span><span class="crayon-v">Length</span><span class="crayon-h"> </span><span class="crayon-o">+</span><span class="crayon-h"> </span><span class="crayon-cn">7</span><span class="crayon-sy">)</span><span class="crayon-h"> </span><span class="crayon-o">/</span><span class="crayon-h"> </span><span class="crayon-cn">8</span><span class="crayon-sy">)</span><span class="crayon-sy">;</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599d20144940792-4"><span class="crayon-h"> </span><span class="crayon-v">std</span><span class="crayon-o">::</span><span class="crayon-e">fill</span><span class="crayon-sy">(</span><span class="crayon-v">Buffer</span><span class="crayon-sy">.</span><span class="crayon-e">begin</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">Buffer</span><span class="crayon-sy">.</span><span class="crayon-st">end</span><span class="crayon-sy">(</span><span class="crayon-sy">)</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-cn">0</span><span class="crayon-sy">)</span><span class="crayon-sy">;</span></div><div class="crayon-line" id="crayon-598a6a3599d20144940792-5"><span class="crayon-h"> </span><span class="crayon-e">memcpy</span><span class="crayon-sy">(</span><span class="crayon-o">&</span><span class="crayon-sy">(</span><span class="crayon-v">Buffer</span><span class="crayon-sy">[</span><span class="crayon-cn">0</span><span class="crayon-sy">]</span><span class="crayon-sy">)</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">aFileName</span><span class="crayon-sy">,</span><span class="crayon-h"> </span><span class="crayon-v">Length</span><span class="crayon-sy">)</span><span class="crayon-sy">;</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599d20144940792-6"><span class="crayon-h"> </span><span class="crayon-e">uint64_t </span><span class="crayon-v">XHash</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-cn">0</span><span class="crayon-sy">;</span></div><div class="crayon-line" id="crayon-598a6a3599d20144940792-7"><span class="crayon-h"> </span><span class="crayon-st">for</span><span class="crayon-h"> </span><span class="crayon-sy">(</span><span class="crayon-v">auto</span><span class="crayon-h"> </span><span class="crayon-v">&Word </span><span class="crayon-o">:</span><span class="crayon-h"> </span><span class="crayon-v">Buffer</span><span class="crayon-sy">)</span><span class="crayon-h"> </span><span class="crayon-sy">{</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599d20144940792-8"><span class="crayon-h"> </span><span class="crayon-v">XHash</span><span class="crayon-h"> </span><span class="crayon-o">^=</span><span class="crayon-h"> </span><span class="crayon-e">SwapBytes</span><span class="crayon-sy">(</span><span class="crayon-t">Word</span><span class="crayon-sy">)</span><span class="crayon-sy">;</span></div><div class="crayon-line" id="crayon-598a6a3599d20144940792-9"><span class="crayon-h"> </span><span class="crayon-sy">}</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599d20144940792-10"><span class="crayon-h"> </span><span class="crayon-e">uint64_t </span><span class="crayon-v">XHash2</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-v">XHash</span><span class="crayon-h"> </span><span class="crayon-o">+</span><span class="crayon-h"> </span><span class="crayon-sy">(</span><span class="crayon-v">XHash</span><span class="crayon-h"> </span><span class="crayon-o">>></span><span class="crayon-h"> </span><span class="crayon-cn">7</span><span class="crayon-sy">)</span><span class="crayon-h"> </span><span class="crayon-o">+</span><span class="crayon-h"> </span><span class="crayon-sy">(</span><span class="crayon-v">XHash</span><span class="crayon-h"> </span><span class="crayon-o">>></span><span class="crayon-h"> </span><span class="crayon-cn">17</span><span class="crayon-sy">)</span><span class="crayon-h"> </span><span class="crayon-o">+</span><span class="crayon-h"> </span></div><div class="crayon-line" id="crayon-598a6a3599d20144940792-11"><span class="crayon-h"> </span><span class="crayon-sy">(</span><span class="crayon-v">XHash</span><span class="crayon-h"> </span><span class="crayon-o">>></span><span class="crayon-h"> </span><span class="crayon-cn">27</span><span class="crayon-sy">)</span><span class="crayon-h"> </span><span class="crayon-o">+</span><span class="crayon-h"> </span><span class="crayon-sy">(</span><span class="crayon-v">XHash</span><span class="crayon-h"> </span><span class="crayon-o">>></span><span class="crayon-h"> </span><span class="crayon-cn">37</span><span class="crayon-sy">)</span><span class="crayon-h"> </span><span class="crayon-o">+</span><span class="crayon-h"> </span><span class="crayon-sy">(</span><span class="crayon-v">XHash</span><span class="crayon-h"> </span><span class="crayon-o">>></span><span class="crayon-h"> </span><span class="crayon-cn">47</span><span class="crayon-sy">)</span><span class="crayon-sy">;</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599d20144940792-12"><span class="crayon-h"> </span><span class="crayon-v">XHash2</span><span class="crayon-h"> </span><span class="crayon-o">=</span><span class="crayon-h"> </span><span class="crayon-v">XHash2</span><span class="crayon-h"> </span><span class="crayon-o">&</span><span class="crayon-h"> </span><span class="crayon-cn">0x3fffff</span><span class="crayon-sy">;</span></div><div class="crayon-line" id="crayon-598a6a3599d20144940792-13"><span class="crayon-h"> </span><span class="crayon-st">return</span><span class="crayon-h"> </span><span class="crayon-e">uint32_t</span><span class="crayon-sy">(</span><span class="crayon-v">XHash2</span><span class="crayon-sy">)</span><span class="crayon-sy">;</span></div><div class="crayon-line crayon-striped-line" id="crayon-598a6a3599d20144940792-14"><span class="crayon-sy">}</span></div></div></td>
</tr>
</table>
</div>
</div>
<!-- [Format Time: 0.0032 seconds] -->
<p>The code is a bit hacky, but does the job. The memcpy is needed to make sure that the file-name is zero-padded to 64-bit boundaries, and the SwapBytes call is there to rectify the endianness differences between the host (x86) and the target (Cray).</p>
<p>There are several other details of course that I haven’t figured out, but this is enough to implement a very basic file-system manipulation utility: one that can create a passable virtual hard drive, with a single partition on it, that contains a single file-system. The utility can also create files in the root directory of that file-system and copy their content from files on the host OS.</p>
<p>This utility created a functional – albeit one-way – communication channel between the host PC and the simulated target. It’s imperfect but good enough for the job. It could be extend to be more complete, potentially even to the point where the host can mount Cray FS (NC1FS) volumes, but that’s a lot of work for not much value. It would be way more intesting to bring networking up but that I’ll save for a later post.</p>
<h1>Back to the top</h1>
<p>So where were we? The original problem I wanted to solve was that the file-system gets full with the OS trying to create a memory dump on a FS that’s clearly not large enough to hold one. So, armed with all this knowledge about the FS strucutre, what can we do?</p>
<p>Interestingly the size of the FS is really only stored in a few places: the s_fsize member of the super-block, the fd_nblk field of the partition descriptors and the size of the FREEMAP (bmp_total field). Changing the first two fields is not a big deal, but changing the size of the FREEMAP is problematic: it can’t really easily grow beyond the size of the block(s) it occupies. Luckily a single block (4kByte) worth of bitmap, which is the smallest allocation unit, supports disks up to 128MBytes in size, a significant extension over the 48MBytes of the intial RAM FS. So really, all it takes is patching up two or three fields to resize the parition to 128MBytes, wihch provides enough room for creating the dump and still leaving some extra space. Problem solved!</p>
<h1>Are we done?</h1>
<p>Yes, yes we are. I’ll stop this rather boring wall of text here. The next one, I promise, will be much more interesting, when we’ll put all this knowledge to the test and attempt to install a full UNICOS OS on the simulator.</p>
</div><!-- .entry-content -->
<footer class="entry-meta">
</footer><!-- .entry-meta -->
</article><!-- #post-1839 -->
<div id="comments">
</div><!-- #comments -->
</div><!-- #content -->
</div><!-- #primary -->
</div><!-- #main -->
<footer id="colophon" role="contentinfo">
<div id="supplementary" class="one">
<div id="third" class="widget-area" role="complementary">
<aside id="text-3" class="widget widget_text"> <div class="textwidget">Copyright 2011 Andras Tantos</div>
</aside> </div><!-- #third .widget-area -->
</div><!-- #supplementary -->
<div id="site-generator">
<a href="https://wordpress.org/" title="Semantic Personal Publishing Platform">Proudly powered by WordPress</a>
</div>
</footer><!-- #colophon -->
</div><!-- #page -->
<script type='text/javascript' src='http://www.modularcircuits.com/blog/wp-includes/js/comment-reply.min.js?ver=4.8.1'></script>
<script type='text/javascript' src='http://www.modularcircuits.com/blog/wp-includes/js/wp-embed.min.js?ver=4.8.1'></script>
<script>
// Open menu on first tap on touch devices.
jQuery(document).ready(function () {
jQuery(".page_item").has("ul").children("a").attr("aria-haspopup", "true");
});
</script>
</body>
</html>