0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031 #ifndef __LINUX_UFS_FS_H
0032 #define __LINUX_UFS_FS_H
0033
0034 #include <linux/types.h>
0035 #include <linux/kernel.h>
0036 #include <linux/stat.h>
0037 #include <linux/fs.h>
0038 #include <linux/workqueue.h>
0039
0040 #include <asm/div64.h>
0041 typedef __u64 __bitwise __fs64;
0042 typedef __u32 __bitwise __fs32;
0043 typedef __u16 __bitwise __fs16;
0044
0045 #define UFS_BBLOCK 0
0046 #define UFS_BBSIZE 8192
0047 #define UFS_SBLOCK 8192
0048 #define UFS_SBSIZE 8192
0049
0050 #define UFS_SECTOR_SIZE 512
0051 #define UFS_SECTOR_BITS 9
0052 #define UFS_MAGIC 0x00011954
0053 #define UFS_MAGIC_BW 0x0f242697
0054 #define UFS2_MAGIC 0x19540119
0055 #define UFS_CIGAM 0x54190100
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065
0066
0067
0068
0069
0070
0071
0072
0073
0074
0075
0076
0077
0078
0079
0080
0081
0082
0083
0084
0085
0086
0087
0088
0089
0090 #define SBLOCK_FLOPPY 0
0091 #define SBLOCK_UFS1 8192
0092 #define SBLOCK_UFS2 65536
0093 #define SBLOCK_PIGGY 262144
0094 #define SBLOCKSIZE 8192
0095 #define SBLOCKSEARCH \
0096 { SBLOCK_UFS2, SBLOCK_UFS1, SBLOCK_FLOPPY, SBLOCK_PIGGY, -1 }
0097
0098
0099
0100
0101 #define UFS_MAGIC_LFN 0x00095014
0102 #define UFS_CIGAM_LFN 0x14500900
0103
0104 #define UFS_MAGIC_SEC 0x00612195
0105 #define UFS_CIGAM_SEC 0x95216100
0106
0107 #define UFS_MAGIC_FEA 0x00195612
0108 #define UFS_CIGAM_FEA 0x12561900
0109
0110 #define UFS_MAGIC_4GB 0x05231994
0111 #define UFS_CIGAM_4GB 0x94192305
0112
0113
0114 #define UFS_FSF_LFN 0x00000001
0115 #define UFS_FSF_B1 0x00000002
0116 #define UFS_FSF_LFS 0x00000002
0117 #define UFS_FSF_LUID 0x00000004
0118
0119
0120
0121
0122 #define UFS_BSIZE 8192
0123 #define UFS_MINBSIZE 4096
0124 #define UFS_FSIZE 1024
0125 #define UFS_MAXFRAG (UFS_BSIZE / UFS_FSIZE)
0126
0127 #define UFS_NDADDR 12
0128 #define UFS_NINDIR 3
0129
0130 #define UFS_IND_BLOCK (UFS_NDADDR + 0)
0131 #define UFS_DIND_BLOCK (UFS_NDADDR + 1)
0132 #define UFS_TIND_BLOCK (UFS_NDADDR + 2)
0133
0134 #define UFS_NDIR_FRAGMENT (UFS_NDADDR << uspi->s_fpbshift)
0135 #define UFS_IND_FRAGMENT (UFS_IND_BLOCK << uspi->s_fpbshift)
0136 #define UFS_DIND_FRAGMENT (UFS_DIND_BLOCK << uspi->s_fpbshift)
0137 #define UFS_TIND_FRAGMENT (UFS_TIND_BLOCK << uspi->s_fpbshift)
0138
0139 #define UFS_ROOTINO 2
0140 #define UFS_FIRST_INO (UFS_ROOTINO + 1)
0141
0142 #define UFS_USEEFT ((__u16)65535)
0143
0144
0145 #define UFS_FSOK 0x7c269d38
0146 #define UFS_FSACTIVE ((__s8)0x00)
0147 #define UFS_FSCLEAN ((__s8)0x01)
0148 #define UFS_FSSTABLE ((__s8)0x02)
0149 #define UFS_FSOSF1 ((__s8)0x03)
0150 #define UFS_FSBAD ((__s8)0xff)
0151
0152
0153 #define UFS_FSSUSPEND ((__s8)0xfe)
0154 #define UFS_FSLOG ((__s8)0xfd)
0155 #define UFS_FSFIX ((__s8)0xfc)
0156
0157
0158
0159 #define UFS_DE_MASK 0x00000010
0160 #define UFS_DE_OLD 0x00000000
0161 #define UFS_DE_44BSD 0x00000010
0162
0163 #define UFS_UID_MASK 0x00000060
0164 #define UFS_UID_OLD 0x00000000
0165 #define UFS_UID_44BSD 0x00000020
0166 #define UFS_UID_EFT 0x00000040
0167
0168 #define UFS_ST_MASK 0x00000700
0169 #define UFS_ST_OLD 0x00000000
0170 #define UFS_ST_44BSD 0x00000100
0171 #define UFS_ST_SUN 0x00000200
0172 #define UFS_ST_SUNOS 0x00000300
0173 #define UFS_ST_SUNx86 0x00000400
0174
0175 #define UFS_CG_MASK 0x00003000
0176 #define UFS_CG_OLD 0x00000000
0177 #define UFS_CG_44BSD 0x00002000
0178 #define UFS_CG_SUN 0x00001000
0179
0180 #define UFS_TYPE_MASK 0x00010000
0181 #define UFS_TYPE_UFS1 0x00000000
0182 #define UFS_TYPE_UFS2 0x00010000
0183
0184
0185
0186 #define UFS_42INODEFMT -1
0187 #define UFS_44INODEFMT 2
0188
0189
0190
0191
0192
0193
0194
0195
0196
0197
0198
0199
0200
0201 #define UFS_MINFREE 5
0202 #define UFS_DEFAULTOPT UFS_OPTTIME
0203
0204
0205
0206
0207
0208 #define ufs_fsbtodb(uspi, b) ((b) << (uspi)->s_fsbtodb)
0209 #define ufs_dbtofsb(uspi, b) ((b) >> (uspi)->s_fsbtodb)
0210
0211
0212
0213
0214
0215 #define ufs_cgbase(c) (uspi->s_fpg * (c))
0216 #define ufs_cgstart(c) ((uspi)->fs_magic == UFS2_MAGIC ? ufs_cgbase(c) : \
0217 (ufs_cgbase(c) + uspi->s_cgoffset * ((c) & ~uspi->s_cgmask)))
0218 #define ufs_cgsblock(c) (ufs_cgstart(c) + uspi->s_sblkno)
0219 #define ufs_cgcmin(c) (ufs_cgstart(c) + uspi->s_cblkno)
0220 #define ufs_cgimin(c) (ufs_cgstart(c) + uspi->s_iblkno)
0221 #define ufs_cgdmin(c) (ufs_cgstart(c) + uspi->s_dblkno)
0222
0223
0224
0225
0226
0227
0228
0229 #define ufs_inotocg(x) ((x) / uspi->s_ipg)
0230 #define ufs_inotocgoff(x) ((x) % uspi->s_ipg)
0231 #define ufs_inotofsba(x) (((u64)ufs_cgimin(ufs_inotocg(x))) + ufs_inotocgoff(x) / uspi->s_inopf)
0232 #define ufs_inotofsbo(x) ((x) % uspi->s_inopf)
0233
0234
0235
0236
0237 #define ufs_cbtocylno(bno) \
0238 ((bno) * uspi->s_nspf / uspi->s_spc)
0239 #define ufs_cbtorpos(bno) \
0240 ((UFS_SB(sb)->s_flags & UFS_CG_SUN) ? \
0241 (((((bno) * uspi->s_nspf % uspi->s_spc) % \
0242 uspi->s_nsect) * \
0243 uspi->s_nrpos) / uspi->s_nsect) \
0244 : \
0245 ((((bno) * uspi->s_nspf % uspi->s_spc / uspi->s_nsect \
0246 * uspi->s_trackskew + (bno) * uspi->s_nspf % uspi->s_spc \
0247 % uspi->s_nsect * uspi->s_interleave) % uspi->s_nsect \
0248 * uspi->s_nrpos) / uspi->s_npsect))
0249
0250
0251
0252
0253
0254
0255 #define ufs_blkoff(loc) ((loc) & uspi->s_qbmask)
0256 #define ufs_fragoff(loc) ((loc) & uspi->s_qfmask)
0257 #define ufs_lblktosize(blk) ((blk) << uspi->s_bshift)
0258 #define ufs_lblkno(loc) ((loc) >> uspi->s_bshift)
0259 #define ufs_numfrags(loc) ((loc) >> uspi->s_fshift)
0260 #define ufs_blkroundup(size) (((size) + uspi->s_qbmask) & uspi->s_bmask)
0261 #define ufs_fragroundup(size) (((size) + uspi->s_qfmask) & uspi->s_fmask)
0262 #define ufs_fragstoblks(frags) ((frags) >> uspi->s_fpbshift)
0263 #define ufs_blkstofrags(blks) ((blks) << uspi->s_fpbshift)
0264 #define ufs_fragnum(fsb) ((fsb) & uspi->s_fpbmask)
0265 #define ufs_blknum(fsb) ((fsb) & ~uspi->s_fpbmask)
0266
0267 #define UFS_MAXNAMLEN 255
0268 #define UFS_MAXMNTLEN 512
0269 #define UFS2_MAXMNTLEN 468
0270 #define UFS2_MAXVOLLEN 32
0271 #define UFS_MAXCSBUFS 31
0272 #define UFS_LINK_MAX 32000
0273
0274
0275
0276 #define UFS2_NOCSPTRS 28
0277
0278
0279
0280
0281
0282 #define UFS_DIR_PAD 4
0283 #define UFS_DIR_ROUND (UFS_DIR_PAD - 1)
0284 #define UFS_DIR_REC_LEN(name_len) (((name_len) + 1 + 8 + UFS_DIR_ROUND) & ~UFS_DIR_ROUND)
0285
0286 struct ufs_timeval {
0287 __fs32 tv_sec;
0288 __fs32 tv_usec;
0289 };
0290
0291 struct ufs_dir_entry {
0292 __fs32 d_ino;
0293 __fs16 d_reclen;
0294 union {
0295 __fs16 d_namlen;
0296 struct {
0297 __u8 d_type;
0298 __u8 d_namlen;
0299 } d_44;
0300 } d_u;
0301 __u8 d_name[UFS_MAXNAMLEN + 1];
0302 };
0303
0304 struct ufs_csum {
0305 __fs32 cs_ndir;
0306 __fs32 cs_nbfree;
0307 __fs32 cs_nifree;
0308 __fs32 cs_nffree;
0309 };
0310 struct ufs2_csum_total {
0311 __fs64 cs_ndir;
0312 __fs64 cs_nbfree;
0313 __fs64 cs_nifree;
0314 __fs64 cs_nffree;
0315 __fs64 cs_numclusters;
0316 __fs64 cs_spare[3];
0317 };
0318
0319 struct ufs_csum_core {
0320 __u64 cs_ndir;
0321 __u64 cs_nbfree;
0322 __u64 cs_nifree;
0323 __u64 cs_nffree;
0324 __u64 cs_numclusters;
0325 };
0326
0327
0328
0329
0330 #define UFS_UNCLEAN 0x01
0331 #define UFS_DOSOFTDEP 0x02
0332 #define UFS_NEEDSFSCK 0x04
0333 #define UFS_INDEXDIRS 0x08
0334 #define UFS_ACLS 0x10
0335 #define UFS_MULTILABEL 0x20
0336 #define UFS_FLAGS_UPDATED 0x80
0337
0338 #if 0
0339
0340
0341
0342
0343
0344
0345 struct ufs_super_block {
0346 union {
0347 struct {
0348 __fs32 fs_link;
0349 } fs_42;
0350 struct {
0351 __fs32 fs_state;
0352 } fs_sun;
0353 } fs_u0;
0354 __fs32 fs_rlink;
0355 __fs32 fs_sblkno;
0356 __fs32 fs_cblkno;
0357 __fs32 fs_iblkno;
0358 __fs32 fs_dblkno;
0359 __fs32 fs_cgoffset;
0360 __fs32 fs_cgmask;
0361 __fs32 fs_time;
0362 __fs32 fs_size;
0363 __fs32 fs_dsize;
0364 __fs32 fs_ncg;
0365 __fs32 fs_bsize;
0366 __fs32 fs_fsize;
0367 __fs32 fs_frag;
0368
0369 __fs32 fs_minfree;
0370 __fs32 fs_rotdelay;
0371 __fs32 fs_rps;
0372
0373 __fs32 fs_bmask;
0374 __fs32 fs_fmask;
0375 __fs32 fs_bshift;
0376 __fs32 fs_fshift;
0377
0378 __fs32 fs_maxcontig;
0379 __fs32 fs_maxbpg;
0380
0381 __fs32 fs_fragshift;
0382 __fs32 fs_fsbtodb;
0383 __fs32 fs_sbsize;
0384 __fs32 fs_csmask;
0385 __fs32 fs_csshift;
0386 __fs32 fs_nindir;
0387 __fs32 fs_inopb;
0388 __fs32 fs_nspf;
0389
0390 __fs32 fs_optim;
0391
0392 union {
0393 struct {
0394 __fs32 fs_npsect;
0395 } fs_sun;
0396 struct {
0397 __fs32 fs_state;
0398 } fs_sunx86;
0399 } fs_u1;
0400 __fs32 fs_interleave;
0401 __fs32 fs_trackskew;
0402
0403
0404
0405
0406 __fs32 fs_id[2];
0407
0408 __fs32 fs_csaddr;
0409 __fs32 fs_cssize;
0410 __fs32 fs_cgsize;
0411
0412 __fs32 fs_ntrak;
0413 __fs32 fs_nsect;
0414 __fs32 fs_spc;
0415
0416 __fs32 fs_ncyl;
0417
0418 __fs32 fs_cpg;
0419 __fs32 fs_ipg;
0420 __fs32 fs_fpg;
0421
0422 struct ufs_csum fs_cstotal;
0423
0424 __s8 fs_fmod;
0425 __s8 fs_clean;
0426 __s8 fs_ronly;
0427 __s8 fs_flags;
0428 union {
0429 struct {
0430 __s8 fs_fsmnt[UFS_MAXMNTLEN];
0431 __fs32 fs_cgrotor;
0432 __fs32 fs_csp[UFS_MAXCSBUFS];
0433 __fs32 fs_maxcluster;
0434 __fs32 fs_cpc;
0435 __fs16 fs_opostbl[16][8];
0436 } fs_u1;
0437 struct {
0438 __s8 fs_fsmnt[UFS2_MAXMNTLEN];
0439 __u8 fs_volname[UFS2_MAXVOLLEN];
0440 __fs64 fs_swuid;
0441 __fs32 fs_pad;
0442 __fs32 fs_cgrotor;
0443 __fs32 fs_ocsp[UFS2_NOCSPTRS];
0444 __fs32 fs_contigdirs;
0445 __fs32 fs_csp;
0446 __fs32 fs_maxcluster;
0447 __fs32 fs_active;
0448 __fs32 fs_old_cpc;
0449 __fs32 fs_maxbsize;
0450 __fs64 fs_sparecon64[17];
0451 __fs64 fs_sblockloc;
0452 struct ufs2_csum_total fs_cstotal;
0453 struct ufs_timeval fs_time;
0454 __fs64 fs_size;
0455 __fs64 fs_dsize;
0456 __fs64 fs_csaddr;
0457 __fs64 fs_pendingblocks;
0458 __fs32 fs_pendinginodes;
0459 } fs_u2;
0460 } fs_u11;
0461 union {
0462 struct {
0463 __fs32 fs_sparecon[53];
0464 __fs32 fs_reclaim;
0465 __fs32 fs_sparecon2[1];
0466 __fs32 fs_state;
0467 __fs32 fs_qbmask[2];
0468 __fs32 fs_qfmask[2];
0469 } fs_sun;
0470 struct {
0471 __fs32 fs_sparecon[53];
0472 __fs32 fs_reclaim;
0473 __fs32 fs_sparecon2[1];
0474 __fs32 fs_npsect;
0475 __fs32 fs_qbmask[2];
0476 __fs32 fs_qfmask[2];
0477 } fs_sunx86;
0478 struct {
0479 __fs32 fs_sparecon[50];
0480 __fs32 fs_contigsumsize;
0481 __fs32 fs_maxsymlinklen;
0482 __fs32 fs_inodefmt;
0483 __fs32 fs_maxfilesize[2];
0484 __fs32 fs_qbmask[2];
0485 __fs32 fs_qfmask[2];
0486 __fs32 fs_state;
0487 } fs_44;
0488 } fs_u2;
0489 __fs32 fs_postblformat;
0490 __fs32 fs_nrpos;
0491 __fs32 fs_postbloff;
0492 __fs32 fs_rotbloff;
0493 __fs32 fs_magic;
0494 __u8 fs_space[1];
0495 };
0496 #endif
0497
0498
0499
0500
0501 #define UFS_OPTTIME 0
0502 #define UFS_OPTSPACE 1
0503
0504
0505
0506
0507 #define UFS_42POSTBLFMT -1
0508 #define UFS_DYNAMICPOSTBLFMT 1
0509
0510
0511
0512
0513 #define fs_cs(indx) s_csp[(indx)]
0514
0515
0516
0517
0518
0519
0520
0521 #define CG_MAGIC 0x090255
0522 #define ufs_cg_chkmagic(sb, ucg) \
0523 (fs32_to_cpu((sb), (ucg)->cg_magic) == CG_MAGIC)
0524
0525
0526
0527 #define ufs_ocg_blktot(sb, ucg) fs32_to_cpu((sb), ((struct ufs_old_cylinder_group *)(ucg))->cg_btot)
0528 #define ufs_ocg_blks(sb, ucg, cylno) fs32_to_cpu((sb), ((struct ufs_old_cylinder_group *)(ucg))->cg_b[cylno])
0529 #define ufs_ocg_inosused(sb, ucg) fs32_to_cpu((sb), ((struct ufs_old_cylinder_group *)(ucg))->cg_iused)
0530 #define ufs_ocg_blksfree(sb, ucg) fs32_to_cpu((sb), ((struct ufs_old_cylinder_group *)(ucg))->cg_free)
0531 #define ufs_ocg_chkmagic(sb, ucg) \
0532 (fs32_to_cpu((sb), ((struct ufs_old_cylinder_group *)(ucg))->cg_magic) == CG_MAGIC)
0533
0534
0535
0536
0537 struct ufs_cylinder_group {
0538 __fs32 cg_link;
0539 __fs32 cg_magic;
0540 __fs32 cg_time;
0541 __fs32 cg_cgx;
0542 __fs16 cg_ncyl;
0543 __fs16 cg_niblk;
0544 __fs32 cg_ndblk;
0545 struct ufs_csum cg_cs;
0546 __fs32 cg_rotor;
0547 __fs32 cg_frotor;
0548 __fs32 cg_irotor;
0549 __fs32 cg_frsum[UFS_MAXFRAG];
0550 __fs32 cg_btotoff;
0551 __fs32 cg_boff;
0552 __fs32 cg_iusedoff;
0553 __fs32 cg_freeoff;
0554 __fs32 cg_nextfreeoff;
0555 union {
0556 struct {
0557 __fs32 cg_clustersumoff;
0558 __fs32 cg_clusteroff;
0559 __fs32 cg_nclusterblks;
0560 __fs32 cg_sparecon[13];
0561 } cg_44;
0562 struct {
0563 __fs32 cg_clustersumoff;
0564 __fs32 cg_clusteroff;
0565 __fs32 cg_nclusterblks;
0566 __fs32 cg_niblk;
0567 __fs32 cg_initediblk;
0568 __fs32 cg_sparecon32[3];
0569 __fs64 cg_time;
0570 __fs64 cg_sparecon[3];
0571 } cg_u2;
0572 __fs32 cg_sparecon[16];
0573 } cg_u;
0574 __u8 cg_space[1];
0575
0576 };
0577
0578
0579 struct ufs_old_cylinder_group {
0580 __fs32 cg_link;
0581 __fs32 cg_rlink;
0582 __fs32 cg_time;
0583 __fs32 cg_cgx;
0584 __fs16 cg_ncyl;
0585 __fs16 cg_niblk;
0586 __fs32 cg_ndblk;
0587 struct ufs_csum cg_cs;
0588 __fs32 cg_rotor;
0589 __fs32 cg_frotor;
0590 __fs32 cg_irotor;
0591 __fs32 cg_frsum[8];
0592 __fs32 cg_btot[32];
0593 __fs16 cg_b[32][8];
0594 __u8 cg_iused[256];
0595 __fs32 cg_magic;
0596 __u8 cg_free[1];
0597
0598 };
0599
0600
0601
0602
0603 struct ufs_inode {
0604 __fs16 ui_mode;
0605 __fs16 ui_nlink;
0606 union {
0607 struct {
0608 __fs16 ui_suid;
0609 __fs16 ui_sgid;
0610 } oldids;
0611 __fs32 ui_inumber;
0612 __fs32 ui_author;
0613 } ui_u1;
0614 __fs64 ui_size;
0615 struct ufs_timeval ui_atime;
0616 struct ufs_timeval ui_mtime;
0617 struct ufs_timeval ui_ctime;
0618 union {
0619 struct {
0620 __fs32 ui_db[UFS_NDADDR];
0621 __fs32 ui_ib[UFS_NINDIR];
0622 } ui_addr;
0623 __u8 ui_symlink[4*(UFS_NDADDR+UFS_NINDIR)];
0624 } ui_u2;
0625 __fs32 ui_flags;
0626 __fs32 ui_blocks;
0627 __fs32 ui_gen;
0628 union {
0629 struct {
0630 __fs32 ui_shadow;
0631 __fs32 ui_uid;
0632 __fs32 ui_gid;
0633 __fs32 ui_oeftflag;
0634 } ui_sun;
0635 struct {
0636 __fs32 ui_uid;
0637 __fs32 ui_gid;
0638 __fs32 ui_spare[2];
0639 } ui_44;
0640 struct {
0641 __fs32 ui_uid;
0642 __fs32 ui_gid;
0643 __fs16 ui_modeh;
0644 __fs16 ui_spare;
0645 __fs32 ui_trans;
0646 } ui_hurd;
0647 } ui_u3;
0648 };
0649
0650 #define UFS_NXADDR 2
0651 struct ufs2_inode {
0652 __fs16 ui_mode;
0653 __fs16 ui_nlink;
0654 __fs32 ui_uid;
0655 __fs32 ui_gid;
0656 __fs32 ui_blksize;
0657 __fs64 ui_size;
0658 __fs64 ui_blocks;
0659 __fs64 ui_atime;
0660 __fs64 ui_mtime;
0661 __fs64 ui_ctime;
0662 __fs64 ui_birthtime;
0663 __fs32 ui_mtimensec;
0664 __fs32 ui_atimensec;
0665 __fs32 ui_ctimensec;
0666 __fs32 ui_birthnsec;
0667 __fs32 ui_gen;
0668 __fs32 ui_kernflags;
0669 __fs32 ui_flags;
0670 __fs32 ui_extsize;
0671 __fs64 ui_extb[UFS_NXADDR];
0672 union {
0673 struct {
0674 __fs64 ui_db[UFS_NDADDR];
0675 __fs64 ui_ib[UFS_NINDIR];
0676 } ui_addr;
0677 __u8 ui_symlink[2*4*(UFS_NDADDR+UFS_NINDIR)];
0678 } ui_u2;
0679 __fs64 ui_spare[3];
0680 };
0681
0682
0683
0684
0685 #define UFS_UF_SETTABLE 0x0000ffff
0686 #define UFS_UF_NODUMP 0x00000001
0687 #define UFS_UF_IMMUTABLE 0x00000002
0688 #define UFS_UF_APPEND 0x00000004
0689 #define UFS_UF_OPAQUE 0x00000008
0690 #define UFS_UF_NOUNLINK 0x00000010
0691
0692 #define UFS_SF_SETTABLE 0xffff0000
0693 #define UFS_SF_ARCHIVED 0x00010000
0694 #define UFS_SF_IMMUTABLE 0x00020000
0695 #define UFS_SF_APPEND 0x00040000
0696 #define UFS_SF_NOUNLINK 0x00100000
0697
0698
0699
0700
0701
0702 struct ufs_buffer_head {
0703 __u64 fragment;
0704 __u64 count;
0705 struct buffer_head * bh[UFS_MAXFRAG];
0706 };
0707
0708 struct ufs_cg_private_info {
0709 struct ufs_buffer_head c_ubh;
0710 __u32 c_cgx;
0711 __u16 c_ncyl;
0712 __u16 c_niblk;
0713 __u32 c_ndblk;
0714 __u32 c_rotor;
0715 __u32 c_frotor;
0716 __u32 c_irotor;
0717 __u32 c_btotoff;
0718 __u32 c_boff;
0719 __u32 c_iusedoff;
0720 __u32 c_freeoff;
0721 __u32 c_nextfreeoff;
0722 __u32 c_clustersumoff;
0723 __u32 c_clusteroff;
0724 __u32 c_nclusterblks;
0725 };
0726
0727
0728 struct ufs_sb_private_info {
0729 struct ufs_buffer_head s_ubh;
0730 struct ufs_csum_core cs_total;
0731 __u32 s_sblkno;
0732 __u32 s_cblkno;
0733 __u32 s_iblkno;
0734 __u32 s_dblkno;
0735 __u32 s_cgoffset;
0736 __u32 s_cgmask;
0737 __u64 s_size;
0738 __u64 s_dsize;
0739 __u32 s_ncg;
0740 __u32 s_bsize;
0741 __u32 s_fsize;
0742 __u32 s_fpb;
0743 __u32 s_minfree;
0744 __u32 s_bmask;
0745 __u32 s_fmask;
0746 __u32 s_bshift;
0747 __u32 s_fshift;
0748 __u32 s_fpbshift;
0749 __u32 s_fsbtodb;
0750 __u32 s_sbsize;
0751 __u32 s_csmask;
0752 __u32 s_csshift;
0753 __u32 s_nindir;
0754 __u32 s_inopb;
0755 __u32 s_nspf;
0756 __u32 s_npsect;
0757 __u32 s_interleave;
0758 __u32 s_trackskew;
0759 __u64 s_csaddr;
0760 __u32 s_cssize;
0761 __u32 s_cgsize;
0762 __u32 s_ntrak;
0763 __u32 s_nsect;
0764 __u32 s_spc;
0765 __u32 s_ipg;
0766 __u32 s_fpg;
0767 __u32 s_cpc;
0768 __s32 s_contigsumsize;
0769 __s64 s_qbmask;
0770 __s64 s_qfmask;
0771 __s32 s_postblformat;
0772 __s32 s_nrpos;
0773 __s32 s_postbloff;
0774 __s32 s_rotbloff;
0775
0776 __u32 s_fpbmask;
0777 __u32 s_apb;
0778 __u32 s_2apb;
0779 __u32 s_3apb;
0780 __u32 s_apbmask;
0781 __u32 s_apbshift;
0782 __u32 s_2apbshift;
0783 __u32 s_3apbshift;
0784 __u32 s_nspfshift;
0785 __u32 s_nspb;
0786 __u32 s_inopf;
0787 __u32 s_sbbase;
0788 __u32 s_bpf;
0789 __u32 s_bpfshift;
0790 __u32 s_bpfmask;
0791
0792 __u32 s_maxsymlinklen;
0793 __s32 fs_magic;
0794 unsigned int s_dirblksize;
0795 __u64 s_root_blocks;
0796 __u64 s_time_to_space;
0797 __u64 s_space_to_time;
0798 };
0799
0800
0801
0802
0803
0804
0805
0806 struct ufs_super_block_first {
0807 union {
0808 struct {
0809 __fs32 fs_link;
0810 } fs_42;
0811 struct {
0812 __fs32 fs_state;
0813 } fs_sun;
0814 } fs_u0;
0815 __fs32 fs_rlink;
0816 __fs32 fs_sblkno;
0817 __fs32 fs_cblkno;
0818 __fs32 fs_iblkno;
0819 __fs32 fs_dblkno;
0820 __fs32 fs_cgoffset;
0821 __fs32 fs_cgmask;
0822 __fs32 fs_time;
0823 __fs32 fs_size;
0824 __fs32 fs_dsize;
0825 __fs32 fs_ncg;
0826 __fs32 fs_bsize;
0827 __fs32 fs_fsize;
0828 __fs32 fs_frag;
0829 __fs32 fs_minfree;
0830 __fs32 fs_rotdelay;
0831 __fs32 fs_rps;
0832 __fs32 fs_bmask;
0833 __fs32 fs_fmask;
0834 __fs32 fs_bshift;
0835 __fs32 fs_fshift;
0836 __fs32 fs_maxcontig;
0837 __fs32 fs_maxbpg;
0838 __fs32 fs_fragshift;
0839 __fs32 fs_fsbtodb;
0840 __fs32 fs_sbsize;
0841 __fs32 fs_csmask;
0842 __fs32 fs_csshift;
0843 __fs32 fs_nindir;
0844 __fs32 fs_inopb;
0845 __fs32 fs_nspf;
0846 __fs32 fs_optim;
0847 union {
0848 struct {
0849 __fs32 fs_npsect;
0850 } fs_sun;
0851 struct {
0852 __fs32 fs_state;
0853 } fs_sunx86;
0854 } fs_u1;
0855 __fs32 fs_interleave;
0856 __fs32 fs_trackskew;
0857 __fs32 fs_id[2];
0858 __fs32 fs_csaddr;
0859 __fs32 fs_cssize;
0860 __fs32 fs_cgsize;
0861 __fs32 fs_ntrak;
0862 __fs32 fs_nsect;
0863 __fs32 fs_spc;
0864 __fs32 fs_ncyl;
0865 __fs32 fs_cpg;
0866 __fs32 fs_ipg;
0867 __fs32 fs_fpg;
0868 struct ufs_csum fs_cstotal;
0869 __s8 fs_fmod;
0870 __s8 fs_clean;
0871 __s8 fs_ronly;
0872 __s8 fs_flags;
0873 __s8 fs_fsmnt[UFS_MAXMNTLEN - 212];
0874
0875 };
0876
0877 struct ufs_super_block_second {
0878 union {
0879 struct {
0880 __s8 fs_fsmnt[212];
0881 __fs32 fs_cgrotor;
0882 __fs32 fs_csp[UFS_MAXCSBUFS];
0883 __fs32 fs_maxcluster;
0884 __fs32 fs_cpc;
0885 __fs16 fs_opostbl[82];
0886 } fs_u1;
0887 struct {
0888 __s8 fs_fsmnt[UFS2_MAXMNTLEN - UFS_MAXMNTLEN + 212];
0889 __u8 fs_volname[UFS2_MAXVOLLEN];
0890 __fs64 fs_swuid;
0891 __fs32 fs_pad;
0892 __fs32 fs_cgrotor;
0893 __fs32 fs_ocsp[UFS2_NOCSPTRS];
0894 __fs32 fs_contigdirs;
0895 __fs32 fs_csp;
0896 __fs32 fs_maxcluster;
0897 __fs32 fs_active;
0898 __fs32 fs_old_cpc;
0899 __fs32 fs_maxbsize;
0900 __fs64 fs_sparecon64[17];
0901 __fs64 fs_sblockloc;
0902 __fs64 cs_ndir;
0903 __fs64 cs_nbfree;
0904 } fs_u2;
0905 } fs_un;
0906 };
0907
0908 struct ufs_super_block_third {
0909 union {
0910 struct {
0911 __fs16 fs_opostbl[46];
0912 } fs_u1;
0913 struct {
0914 __fs64 cs_nifree;
0915 __fs64 cs_nffree;
0916 __fs64 cs_numclusters;
0917 __fs64 cs_spare[3];
0918 struct ufs_timeval fs_time;
0919 __fs64 fs_size;
0920 __fs64 fs_dsize;
0921 __fs64 fs_csaddr;
0922 __fs64 fs_pendingblocks;
0923 __fs32 fs_pendinginodes;
0924 } __attribute__ ((packed)) fs_u2;
0925 } fs_un1;
0926 union {
0927 struct {
0928 __fs32 fs_sparecon[53];
0929 __fs32 fs_reclaim;
0930 __fs32 fs_sparecon2[1];
0931 __fs32 fs_state;
0932 __fs32 fs_qbmask[2];
0933 __fs32 fs_qfmask[2];
0934 } fs_sun;
0935 struct {
0936 __fs32 fs_sparecon[53];
0937 __fs32 fs_reclaim;
0938 __fs32 fs_sparecon2[1];
0939 __fs32 fs_npsect;
0940 __fs32 fs_qbmask[2];
0941 __fs32 fs_qfmask[2];
0942 } fs_sunx86;
0943 struct {
0944 __fs32 fs_sparecon[50];
0945 __fs32 fs_contigsumsize;
0946 __fs32 fs_maxsymlinklen;
0947 __fs32 fs_inodefmt;
0948 __fs32 fs_maxfilesize[2];
0949 __fs32 fs_qbmask[2];
0950 __fs32 fs_qfmask[2];
0951 __fs32 fs_state;
0952 } fs_44;
0953 } fs_un2;
0954 __fs32 fs_postblformat;
0955 __fs32 fs_nrpos;
0956 __fs32 fs_postbloff;
0957 __fs32 fs_rotbloff;
0958 __fs32 fs_magic;
0959 __u8 fs_space[1];
0960 };
0961
0962 #endif