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#ifndef __LINUX_UFS_FS_H
31#define __LINUX_UFS_FS_H
32
33#include <linux/types.h>
34#include <linux/kernel.h>
35#include <linux/stat.h>
36#include <linux/fs.h>
37
38#include <asm/div64.h>
39typedef __u64 __bitwise __fs64;
40typedef __u32 __bitwise __fs32;
41typedef __u16 __bitwise __fs16;
42
43#define UFS_BBLOCK 0
44#define UFS_BBSIZE 8192
45#define UFS_SBLOCK 8192
46#define UFS_SBSIZE 8192
47
48#define UFS_SECTOR_SIZE 512
49#define UFS_SECTOR_BITS 9
50#define UFS_MAGIC 0x00011954
51#define UFS_MAGIC_BW 0x0f242697
52#define UFS2_MAGIC 0x19540119
53#define UFS_CIGAM 0x54190100
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#define SBLOCK_FLOPPY 0
89#define SBLOCK_UFS1 8192
90#define SBLOCK_UFS2 65536
91#define SBLOCK_PIGGY 262144
92#define SBLOCKSIZE 8192
93#define SBLOCKSEARCH \
94 { SBLOCK_UFS2, SBLOCK_UFS1, SBLOCK_FLOPPY, SBLOCK_PIGGY, -1 }
95
96
97
98
99#define UFS_MAGIC_LFN 0x00095014
100#define UFS_CIGAM_LFN 0x14500900
101
102#define UFS_MAGIC_SEC 0x00612195
103#define UFS_CIGAM_SEC 0x95216100
104
105#define UFS_MAGIC_FEA 0x00195612
106#define UFS_CIGAM_FEA 0x12561900
107
108#define UFS_MAGIC_4GB 0x05231994
109#define UFS_CIGAM_4GB 0x94192305
110
111
112#define UFS_FSF_LFN 0x00000001
113#define UFS_FSF_B1 0x00000002
114#define UFS_FSF_LFS 0x00000002
115#define UFS_FSF_LUID 0x00000004
116
117
118
119
120#define UFS_BSIZE 8192
121#define UFS_MINBSIZE 4096
122#define UFS_FSIZE 1024
123#define UFS_MAXFRAG (UFS_BSIZE / UFS_FSIZE)
124
125#define UFS_NDADDR 12
126#define UFS_NINDIR 3
127
128#define UFS_IND_BLOCK (UFS_NDADDR + 0)
129#define UFS_DIND_BLOCK (UFS_NDADDR + 1)
130#define UFS_TIND_BLOCK (UFS_NDADDR + 2)
131
132#define UFS_NDIR_FRAGMENT (UFS_NDADDR << uspi->s_fpbshift)
133#define UFS_IND_FRAGMENT (UFS_IND_BLOCK << uspi->s_fpbshift)
134#define UFS_DIND_FRAGMENT (UFS_DIND_BLOCK << uspi->s_fpbshift)
135#define UFS_TIND_FRAGMENT (UFS_TIND_BLOCK << uspi->s_fpbshift)
136
137#define UFS_ROOTINO 2
138#define UFS_FIRST_INO (UFS_ROOTINO + 1)
139
140#define UFS_USEEFT ((__u16)65535)
141
142
143#define UFS_FSOK 0x7c269d38
144#define UFS_FSACTIVE ((__s8)0x00)
145#define UFS_FSCLEAN ((__s8)0x01)
146#define UFS_FSSTABLE ((__s8)0x02)
147#define UFS_FSOSF1 ((__s8)0x03)
148#define UFS_FSBAD ((__s8)0xff)
149
150
151#define UFS_FSSUSPEND ((__s8)0xfe)
152#define UFS_FSLOG ((__s8)0xfd)
153#define UFS_FSFIX ((__s8)0xfc)
154
155
156
157#define UFS_DE_MASK 0x00000010
158#define UFS_DE_OLD 0x00000000
159#define UFS_DE_44BSD 0x00000010
160
161#define UFS_UID_MASK 0x00000060
162#define UFS_UID_OLD 0x00000000
163#define UFS_UID_44BSD 0x00000020
164#define UFS_UID_EFT 0x00000040
165
166#define UFS_ST_MASK 0x00000700
167#define UFS_ST_OLD 0x00000000
168#define UFS_ST_44BSD 0x00000100
169#define UFS_ST_SUN 0x00000200
170#define UFS_ST_SUNOS 0x00000300
171#define UFS_ST_SUNx86 0x00000400
172
173#define UFS_CG_MASK 0x00003000
174#define UFS_CG_OLD 0x00000000
175#define UFS_CG_44BSD 0x00002000
176#define UFS_CG_SUN 0x00001000
177
178#define UFS_TYPE_MASK 0x00010000
179#define UFS_TYPE_UFS1 0x00000000
180#define UFS_TYPE_UFS2 0x00010000
181
182
183
184#define UFS_42INODEFMT -1
185#define UFS_44INODEFMT 2
186
187
188
189
190
191
192
193
194
195
196
197
198
199#define UFS_MINFREE 5
200#define UFS_DEFAULTOPT UFS_OPTTIME
201
202
203
204
205
206#define ufs_fsbtodb(uspi, b) ((b) << (uspi)->s_fsbtodb)
207#define ufs_dbtofsb(uspi, b) ((b) >> (uspi)->s_fsbtodb)
208
209
210
211
212
213#define ufs_cgbase(c) (uspi->s_fpg * (c))
214#define ufs_cgstart(c) ((uspi)->fs_magic == UFS2_MAGIC ? ufs_cgbase(c) : \
215 (ufs_cgbase(c) + uspi->s_cgoffset * ((c) & ~uspi->s_cgmask)))
216#define ufs_cgsblock(c) (ufs_cgstart(c) + uspi->s_sblkno)
217#define ufs_cgcmin(c) (ufs_cgstart(c) + uspi->s_cblkno)
218#define ufs_cgimin(c) (ufs_cgstart(c) + uspi->s_iblkno)
219#define ufs_cgdmin(c) (ufs_cgstart(c) + uspi->s_dblkno)
220
221
222
223
224
225
226
227#define ufs_inotocg(x) ((x) / uspi->s_ipg)
228#define ufs_inotocgoff(x) ((x) % uspi->s_ipg)
229#define ufs_inotofsba(x) (((u64)ufs_cgimin(ufs_inotocg(x))) + ufs_inotocgoff(x) / uspi->s_inopf)
230#define ufs_inotofsbo(x) ((x) % uspi->s_inopf)
231
232
233
234
235#define ufs_cbtocylno(bno) \
236 ((bno) * uspi->s_nspf / uspi->s_spc)
237#define ufs_cbtorpos(bno) \
238 ((UFS_SB(sb)->s_flags & UFS_CG_SUN) ? \
239 (((((bno) * uspi->s_nspf % uspi->s_spc) % \
240 uspi->s_nsect) * \
241 uspi->s_nrpos) / uspi->s_nsect) \
242 : \
243 ((((bno) * uspi->s_nspf % uspi->s_spc / uspi->s_nsect \
244 * uspi->s_trackskew + (bno) * uspi->s_nspf % uspi->s_spc \
245 % uspi->s_nsect * uspi->s_interleave) % uspi->s_nsect \
246 * uspi->s_nrpos) / uspi->s_npsect))
247
248
249
250
251
252
253#define ufs_blkoff(loc) ((loc) & uspi->s_qbmask)
254#define ufs_fragoff(loc) ((loc) & uspi->s_qfmask)
255#define ufs_lblktosize(blk) ((blk) << uspi->s_bshift)
256#define ufs_lblkno(loc) ((loc) >> uspi->s_bshift)
257#define ufs_numfrags(loc) ((loc) >> uspi->s_fshift)
258#define ufs_blkroundup(size) (((size) + uspi->s_qbmask) & uspi->s_bmask)
259#define ufs_fragroundup(size) (((size) + uspi->s_qfmask) & uspi->s_fmask)
260#define ufs_fragstoblks(frags) ((frags) >> uspi->s_fpbshift)
261#define ufs_blkstofrags(blks) ((blks) << uspi->s_fpbshift)
262#define ufs_fragnum(fsb) ((fsb) & uspi->s_fpbmask)
263#define ufs_blknum(fsb) ((fsb) & ~uspi->s_fpbmask)
264
265#define UFS_MAXNAMLEN 255
266#define UFS_MAXMNTLEN 512
267#define UFS2_MAXMNTLEN 468
268#define UFS2_MAXVOLLEN 32
269#define UFS_MAXCSBUFS 31
270#define UFS_LINK_MAX 32000
271
272
273
274#define UFS2_NOCSPTRS 28
275
276
277
278
279
280#define UFS_DIR_PAD 4
281#define UFS_DIR_ROUND (UFS_DIR_PAD - 1)
282#define UFS_DIR_REC_LEN(name_len) (((name_len) + 1 + 8 + UFS_DIR_ROUND) & ~UFS_DIR_ROUND)
283
284struct ufs_timeval {
285 __fs32 tv_sec;
286 __fs32 tv_usec;
287};
288
289struct ufs_dir_entry {
290 __fs32 d_ino;
291 __fs16 d_reclen;
292 union {
293 __fs16 d_namlen;
294 struct {
295 __u8 d_type;
296 __u8 d_namlen;
297 } d_44;
298 } d_u;
299 __u8 d_name[UFS_MAXNAMLEN + 1];
300};
301
302struct ufs_csum {
303 __fs32 cs_ndir;
304 __fs32 cs_nbfree;
305 __fs32 cs_nifree;
306 __fs32 cs_nffree;
307};
308struct ufs2_csum_total {
309 __fs64 cs_ndir;
310 __fs64 cs_nbfree;
311 __fs64 cs_nifree;
312 __fs64 cs_nffree;
313 __fs64 cs_numclusters;
314 __fs64 cs_spare[3];
315};
316
317struct ufs_csum_core {
318 __u64 cs_ndir;
319 __u64 cs_nbfree;
320 __u64 cs_nifree;
321 __u64 cs_nffree;
322 __u64 cs_numclusters;
323};
324
325
326
327
328#define UFS_UNCLEAN 0x01
329#define UFS_DOSOFTDEP 0x02
330#define UFS_NEEDSFSCK 0x04
331#define UFS_INDEXDIRS 0x08
332#define UFS_ACLS 0x10
333#define UFS_MULTILABEL 0x20
334#define UFS_FLAGS_UPDATED 0x80
335
336#if 0
337
338
339
340
341
342
343struct ufs_super_block {
344 union {
345 struct {
346 __fs32 fs_link;
347 } fs_42;
348 struct {
349 __fs32 fs_state;
350 } fs_sun;
351 } fs_u0;
352 __fs32 fs_rlink;
353 __fs32 fs_sblkno;
354 __fs32 fs_cblkno;
355 __fs32 fs_iblkno;
356 __fs32 fs_dblkno;
357 __fs32 fs_cgoffset;
358 __fs32 fs_cgmask;
359 __fs32 fs_time;
360 __fs32 fs_size;
361 __fs32 fs_dsize;
362 __fs32 fs_ncg;
363 __fs32 fs_bsize;
364 __fs32 fs_fsize;
365 __fs32 fs_frag;
366
367 __fs32 fs_minfree;
368 __fs32 fs_rotdelay;
369 __fs32 fs_rps;
370
371 __fs32 fs_bmask;
372 __fs32 fs_fmask;
373 __fs32 fs_bshift;
374 __fs32 fs_fshift;
375
376 __fs32 fs_maxcontig;
377 __fs32 fs_maxbpg;
378
379 __fs32 fs_fragshift;
380 __fs32 fs_fsbtodb;
381 __fs32 fs_sbsize;
382 __fs32 fs_csmask;
383 __fs32 fs_csshift;
384 __fs32 fs_nindir;
385 __fs32 fs_inopb;
386 __fs32 fs_nspf;
387
388 __fs32 fs_optim;
389
390 union {
391 struct {
392 __fs32 fs_npsect;
393 } fs_sun;
394 struct {
395 __fs32 fs_state;
396 } fs_sunx86;
397 } fs_u1;
398 __fs32 fs_interleave;
399 __fs32 fs_trackskew;
400
401
402
403
404 __fs32 fs_id[2];
405
406 __fs32 fs_csaddr;
407 __fs32 fs_cssize;
408 __fs32 fs_cgsize;
409
410 __fs32 fs_ntrak;
411 __fs32 fs_nsect;
412 __fs32 fs_spc;
413
414 __fs32 fs_ncyl;
415
416 __fs32 fs_cpg;
417 __fs32 fs_ipg;
418 __fs32 fs_fpg;
419
420 struct ufs_csum fs_cstotal;
421
422 __s8 fs_fmod;
423 __s8 fs_clean;
424 __s8 fs_ronly;
425 __s8 fs_flags;
426 union {
427 struct {
428 __s8 fs_fsmnt[UFS_MAXMNTLEN];
429 __fs32 fs_cgrotor;
430 __fs32 fs_csp[UFS_MAXCSBUFS];
431 __fs32 fs_maxcluster;
432 __fs32 fs_cpc;
433 __fs16 fs_opostbl[16][8];
434 } fs_u1;
435 struct {
436 __s8 fs_fsmnt[UFS2_MAXMNTLEN];
437 __u8 fs_volname[UFS2_MAXVOLLEN];
438 __fs64 fs_swuid;
439 __fs32 fs_pad;
440 __fs32 fs_cgrotor;
441 __fs32 fs_ocsp[UFS2_NOCSPTRS];
442 __fs32 fs_contigdirs;
443 __fs32 fs_csp;
444 __fs32 fs_maxcluster;
445 __fs32 fs_active;
446 __fs32 fs_old_cpc;
447 __fs32 fs_maxbsize;
448 __fs64 fs_sparecon64[17];
449 __fs64 fs_sblockloc;
450 struct ufs2_csum_total fs_cstotal;
451 struct ufs_timeval fs_time;
452 __fs64 fs_size;
453 __fs64 fs_dsize;
454 __fs64 fs_csaddr;
455 __fs64 fs_pendingblocks;
456 __fs32 fs_pendinginodes;
457 } fs_u2;
458 } fs_u11;
459 union {
460 struct {
461 __fs32 fs_sparecon[53];
462 __fs32 fs_reclaim;
463 __fs32 fs_sparecon2[1];
464 __fs32 fs_state;
465 __fs32 fs_qbmask[2];
466 __fs32 fs_qfmask[2];
467 } fs_sun;
468 struct {
469 __fs32 fs_sparecon[53];
470 __fs32 fs_reclaim;
471 __fs32 fs_sparecon2[1];
472 __fs32 fs_npsect;
473 __fs32 fs_qbmask[2];
474 __fs32 fs_qfmask[2];
475 } fs_sunx86;
476 struct {
477 __fs32 fs_sparecon[50];
478 __fs32 fs_contigsumsize;
479 __fs32 fs_maxsymlinklen;
480 __fs32 fs_inodefmt;
481 __fs32 fs_maxfilesize[2];
482 __fs32 fs_qbmask[2];
483 __fs32 fs_qfmask[2];
484 __fs32 fs_state;
485 } fs_44;
486 } fs_u2;
487 __fs32 fs_postblformat;
488 __fs32 fs_nrpos;
489 __fs32 fs_postbloff;
490 __fs32 fs_rotbloff;
491 __fs32 fs_magic;
492 __u8 fs_space[1];
493};
494#endif
495
496
497
498
499#define UFS_OPTTIME 0
500#define UFS_OPTSPACE 1
501
502
503
504
505#define UFS_42POSTBLFMT -1
506#define UFS_DYNAMICPOSTBLFMT 1
507
508
509
510
511#define fs_cs(indx) s_csp[(indx)]
512
513
514
515
516
517
518
519#define CG_MAGIC 0x090255
520#define ufs_cg_chkmagic(sb, ucg) \
521 (fs32_to_cpu((sb), (ucg)->cg_magic) == CG_MAGIC)
522
523
524
525#define ufs_ocg_blktot(sb, ucg) fs32_to_cpu((sb), ((struct ufs_old_cylinder_group *)(ucg))->cg_btot)
526#define ufs_ocg_blks(sb, ucg, cylno) fs32_to_cpu((sb), ((struct ufs_old_cylinder_group *)(ucg))->cg_b[cylno])
527#define ufs_ocg_inosused(sb, ucg) fs32_to_cpu((sb), ((struct ufs_old_cylinder_group *)(ucg))->cg_iused)
528#define ufs_ocg_blksfree(sb, ucg) fs32_to_cpu((sb), ((struct ufs_old_cylinder_group *)(ucg))->cg_free)
529#define ufs_ocg_chkmagic(sb, ucg) \
530 (fs32_to_cpu((sb), ((struct ufs_old_cylinder_group *)(ucg))->cg_magic) == CG_MAGIC)
531
532
533
534
535struct ufs_cylinder_group {
536 __fs32 cg_link;
537 __fs32 cg_magic;
538 __fs32 cg_time;
539 __fs32 cg_cgx;
540 __fs16 cg_ncyl;
541 __fs16 cg_niblk;
542 __fs32 cg_ndblk;
543 struct ufs_csum cg_cs;
544 __fs32 cg_rotor;
545 __fs32 cg_frotor;
546 __fs32 cg_irotor;
547 __fs32 cg_frsum[UFS_MAXFRAG];
548 __fs32 cg_btotoff;
549 __fs32 cg_boff;
550 __fs32 cg_iusedoff;
551 __fs32 cg_freeoff;
552 __fs32 cg_nextfreeoff;
553 union {
554 struct {
555 __fs32 cg_clustersumoff;
556 __fs32 cg_clusteroff;
557 __fs32 cg_nclusterblks;
558 __fs32 cg_sparecon[13];
559 } cg_44;
560 struct {
561 __fs32 cg_clustersumoff;
562 __fs32 cg_clusteroff;
563 __fs32 cg_nclusterblks;
564 __fs32 cg_niblk;
565 __fs32 cg_initediblk;
566 __fs32 cg_sparecon32[3];
567 __fs64 cg_time;
568 __fs64 cg_sparecon[3];
569 } cg_u2;
570 __fs32 cg_sparecon[16];
571 } cg_u;
572 __u8 cg_space[1];
573
574};
575
576
577struct ufs_old_cylinder_group {
578 __fs32 cg_link;
579 __fs32 cg_rlink;
580 __fs32 cg_time;
581 __fs32 cg_cgx;
582 __fs16 cg_ncyl;
583 __fs16 cg_niblk;
584 __fs32 cg_ndblk;
585 struct ufs_csum cg_cs;
586 __fs32 cg_rotor;
587 __fs32 cg_frotor;
588 __fs32 cg_irotor;
589 __fs32 cg_frsum[8];
590 __fs32 cg_btot[32];
591 __fs16 cg_b[32][8];
592 __u8 cg_iused[256];
593 __fs32 cg_magic;
594 __u8 cg_free[1];
595
596};
597
598
599
600
601struct ufs_inode {
602 __fs16 ui_mode;
603 __fs16 ui_nlink;
604 union {
605 struct {
606 __fs16 ui_suid;
607 __fs16 ui_sgid;
608 } oldids;
609 __fs32 ui_inumber;
610 __fs32 ui_author;
611 } ui_u1;
612 __fs64 ui_size;
613 struct ufs_timeval ui_atime;
614 struct ufs_timeval ui_mtime;
615 struct ufs_timeval ui_ctime;
616 union {
617 struct {
618 __fs32 ui_db[UFS_NDADDR];
619 __fs32 ui_ib[UFS_NINDIR];
620 } ui_addr;
621 __u8 ui_symlink[4*(UFS_NDADDR+UFS_NINDIR)];
622 } ui_u2;
623 __fs32 ui_flags;
624 __fs32 ui_blocks;
625 __fs32 ui_gen;
626 union {
627 struct {
628 __fs32 ui_shadow;
629 __fs32 ui_uid;
630 __fs32 ui_gid;
631 __fs32 ui_oeftflag;
632 } ui_sun;
633 struct {
634 __fs32 ui_uid;
635 __fs32 ui_gid;
636 __fs32 ui_spare[2];
637 } ui_44;
638 struct {
639 __fs32 ui_uid;
640 __fs32 ui_gid;
641 __fs16 ui_modeh;
642 __fs16 ui_spare;
643 __fs32 ui_trans;
644 } ui_hurd;
645 } ui_u3;
646};
647
648#define UFS_NXADDR 2
649struct ufs2_inode {
650 __fs16 ui_mode;
651 __fs16 ui_nlink;
652 __fs32 ui_uid;
653 __fs32 ui_gid;
654 __fs32 ui_blksize;
655 __fs64 ui_size;
656 __fs64 ui_blocks;
657 __fs64 ui_atime;
658 __fs64 ui_mtime;
659 __fs64 ui_ctime;
660 __fs64 ui_birthtime;
661 __fs32 ui_mtimensec;
662 __fs32 ui_atimensec;
663 __fs32 ui_ctimensec;
664 __fs32 ui_birthnsec;
665 __fs32 ui_gen;
666 __fs32 ui_kernflags;
667 __fs32 ui_flags;
668 __fs32 ui_extsize;
669 __fs64 ui_extb[UFS_NXADDR];
670 union {
671 struct {
672 __fs64 ui_db[UFS_NDADDR];
673 __fs64 ui_ib[UFS_NINDIR];
674 } ui_addr;
675 __u8 ui_symlink[2*4*(UFS_NDADDR+UFS_NINDIR)];
676 } ui_u2;
677 __fs64 ui_spare[3];
678};
679
680
681
682
683#define UFS_UF_SETTABLE 0x0000ffff
684#define UFS_UF_NODUMP 0x00000001
685#define UFS_UF_IMMUTABLE 0x00000002
686#define UFS_UF_APPEND 0x00000004
687#define UFS_UF_OPAQUE 0x00000008
688#define UFS_UF_NOUNLINK 0x00000010
689
690#define UFS_SF_SETTABLE 0xffff0000
691#define UFS_SF_ARCHIVED 0x00010000
692#define UFS_SF_IMMUTABLE 0x00020000
693#define UFS_SF_APPEND 0x00040000
694#define UFS_SF_NOUNLINK 0x00100000
695
696
697
698
699
700struct ufs_buffer_head {
701 __u64 fragment;
702 __u64 count;
703 struct buffer_head * bh[UFS_MAXFRAG];
704};
705
706struct ufs_cg_private_info {
707 struct ufs_buffer_head c_ubh;
708 __u32 c_cgx;
709 __u16 c_ncyl;
710 __u16 c_niblk;
711 __u32 c_ndblk;
712 __u32 c_rotor;
713 __u32 c_frotor;
714 __u32 c_irotor;
715 __u32 c_btotoff;
716 __u32 c_boff;
717 __u32 c_iusedoff;
718 __u32 c_freeoff;
719 __u32 c_nextfreeoff;
720 __u32 c_clustersumoff;
721 __u32 c_clusteroff;
722 __u32 c_nclusterblks;
723};
724
725
726struct ufs_sb_private_info {
727 struct ufs_buffer_head s_ubh;
728 struct ufs_csum_core cs_total;
729 __u32 s_sblkno;
730 __u32 s_cblkno;
731 __u32 s_iblkno;
732 __u32 s_dblkno;
733 __u32 s_cgoffset;
734 __u32 s_cgmask;
735 __u32 s_size;
736 __u32 s_dsize;
737 __u64 s_u2_size;
738 __u64 s_u2_dsize;
739 __u32 s_ncg;
740 __u32 s_bsize;
741 __u32 s_fsize;
742 __u32 s_fpb;
743 __u32 s_minfree;
744 __u32 s_bmask;
745 __u32 s_fmask;
746 __u32 s_bshift;
747 __u32 s_fshift;
748 __u32 s_fpbshift;
749 __u32 s_fsbtodb;
750 __u32 s_sbsize;
751 __u32 s_csmask;
752 __u32 s_csshift;
753 __u32 s_nindir;
754 __u32 s_inopb;
755 __u32 s_nspf;
756 __u32 s_npsect;
757 __u32 s_interleave;
758 __u32 s_trackskew;
759 __u64 s_csaddr;
760 __u32 s_cssize;
761 __u32 s_cgsize;
762 __u32 s_ntrak;
763 __u32 s_nsect;
764 __u32 s_spc;
765 __u32 s_ipg;
766 __u32 s_fpg;
767 __u32 s_cpc;
768 __s32 s_contigsumsize;
769 __s64 s_qbmask;
770 __s64 s_qfmask;
771 __s32 s_postblformat;
772 __s32 s_nrpos;
773 __s32 s_postbloff;
774 __s32 s_rotbloff;
775
776 __u32 s_fpbmask;
777 __u32 s_apb;
778 __u32 s_2apb;
779 __u32 s_3apb;
780 __u32 s_apbmask;
781 __u32 s_apbshift;
782 __u32 s_2apbshift;
783 __u32 s_3apbshift;
784 __u32 s_nspfshift;
785 __u32 s_nspb;
786 __u32 s_inopf;
787 __u32 s_sbbase;
788 __u32 s_bpf;
789 __u32 s_bpfshift;
790 __u32 s_bpfmask;
791
792 __u32 s_maxsymlinklen;
793 __s32 fs_magic;
794 unsigned int s_dirblksize;
795};
796
797
798
799
800
801
802
803struct ufs_super_block_first {
804 union {
805 struct {
806 __fs32 fs_link;
807 } fs_42;
808 struct {
809 __fs32 fs_state;
810 } fs_sun;
811 } fs_u0;
812 __fs32 fs_rlink;
813 __fs32 fs_sblkno;
814 __fs32 fs_cblkno;
815 __fs32 fs_iblkno;
816 __fs32 fs_dblkno;
817 __fs32 fs_cgoffset;
818 __fs32 fs_cgmask;
819 __fs32 fs_time;
820 __fs32 fs_size;
821 __fs32 fs_dsize;
822 __fs32 fs_ncg;
823 __fs32 fs_bsize;
824 __fs32 fs_fsize;
825 __fs32 fs_frag;
826 __fs32 fs_minfree;
827 __fs32 fs_rotdelay;
828 __fs32 fs_rps;
829 __fs32 fs_bmask;
830 __fs32 fs_fmask;
831 __fs32 fs_bshift;
832 __fs32 fs_fshift;
833 __fs32 fs_maxcontig;
834 __fs32 fs_maxbpg;
835 __fs32 fs_fragshift;
836 __fs32 fs_fsbtodb;
837 __fs32 fs_sbsize;
838 __fs32 fs_csmask;
839 __fs32 fs_csshift;
840 __fs32 fs_nindir;
841 __fs32 fs_inopb;
842 __fs32 fs_nspf;
843 __fs32 fs_optim;
844 union {
845 struct {
846 __fs32 fs_npsect;
847 } fs_sun;
848 struct {
849 __fs32 fs_state;
850 } fs_sunx86;
851 } fs_u1;
852 __fs32 fs_interleave;
853 __fs32 fs_trackskew;
854 __fs32 fs_id[2];
855 __fs32 fs_csaddr;
856 __fs32 fs_cssize;
857 __fs32 fs_cgsize;
858 __fs32 fs_ntrak;
859 __fs32 fs_nsect;
860 __fs32 fs_spc;
861 __fs32 fs_ncyl;
862 __fs32 fs_cpg;
863 __fs32 fs_ipg;
864 __fs32 fs_fpg;
865 struct ufs_csum fs_cstotal;
866 __s8 fs_fmod;
867 __s8 fs_clean;
868 __s8 fs_ronly;
869 __s8 fs_flags;
870 __s8 fs_fsmnt[UFS_MAXMNTLEN - 212];
871
872};
873
874struct ufs_super_block_second {
875 union {
876 struct {
877 __s8 fs_fsmnt[212];
878 __fs32 fs_cgrotor;
879 __fs32 fs_csp[UFS_MAXCSBUFS];
880 __fs32 fs_maxcluster;
881 __fs32 fs_cpc;
882 __fs16 fs_opostbl[82];
883 } fs_u1;
884 struct {
885 __s8 fs_fsmnt[UFS2_MAXMNTLEN - UFS_MAXMNTLEN + 212];
886 __u8 fs_volname[UFS2_MAXVOLLEN];
887 __fs64 fs_swuid;
888 __fs32 fs_pad;
889 __fs32 fs_cgrotor;
890 __fs32 fs_ocsp[UFS2_NOCSPTRS];
891 __fs32 fs_contigdirs;
892 __fs32 fs_csp;
893 __fs32 fs_maxcluster;
894 __fs32 fs_active;
895 __fs32 fs_old_cpc;
896 __fs32 fs_maxbsize;
897 __fs64 fs_sparecon64[17];
898 __fs64 fs_sblockloc;
899 __fs64 cs_ndir;
900 __fs64 cs_nbfree;
901 } fs_u2;
902 } fs_un;
903};
904
905struct ufs_super_block_third {
906 union {
907 struct {
908 __fs16 fs_opostbl[46];
909 } fs_u1;
910 struct {
911 __fs64 cs_nifree;
912 __fs64 cs_nffree;
913 __fs64 cs_numclusters;
914 __fs64 cs_spare[3];
915 struct ufs_timeval fs_time;
916 __fs64 fs_size;
917 __fs64 fs_dsize;
918 __fs64 fs_csaddr;
919 __fs64 fs_pendingblocks;
920 __fs32 fs_pendinginodes;
921 } __attribute__ ((packed)) fs_u2;
922 } fs_un1;
923 union {
924 struct {
925 __fs32 fs_sparecon[53];
926 __fs32 fs_reclaim;
927 __fs32 fs_sparecon2[1];
928 __fs32 fs_state;
929 __fs32 fs_qbmask[2];
930 __fs32 fs_qfmask[2];
931 } fs_sun;
932 struct {
933 __fs32 fs_sparecon[53];
934 __fs32 fs_reclaim;
935 __fs32 fs_sparecon2[1];
936 __fs32 fs_npsect;
937 __fs32 fs_qbmask[2];
938 __fs32 fs_qfmask[2];
939 } fs_sunx86;
940 struct {
941 __fs32 fs_sparecon[50];
942 __fs32 fs_contigsumsize;
943 __fs32 fs_maxsymlinklen;
944 __fs32 fs_inodefmt;
945 __fs32 fs_maxfilesize[2];
946 __fs32 fs_qbmask[2];
947 __fs32 fs_qfmask[2];
948 __fs32 fs_state;
949 } fs_44;
950 } fs_un2;
951 __fs32 fs_postblformat;
952 __fs32 fs_nrpos;
953 __fs32 fs_postbloff;
954 __fs32 fs_rotbloff;
955 __fs32 fs_magic;
956 __u8 fs_space[1];
957};
958
959#endif
960