X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/1c79356b52d46aa6b508fb032f5ae709b1f2897b..9bccf70c0258c7cac2dcb80011b2a964d884c552:/bsd/ufs/ffs/fs.h diff --git a/bsd/ufs/ffs/fs.h b/bsd/ufs/ffs/fs.h index db4436dac..6af966450 100644 --- a/bsd/ufs/ffs/fs.h +++ b/bsd/ufs/ffs/fs.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000 Apple Computer, Inc. All rights reserved. + * Copyright (c) 2000-2002 Apple Computer, Inc. All rights reserved. * * @APPLE_LICENSE_HEADER_START@ * @@ -57,6 +57,9 @@ #ifndef _FFS_FS_H_ #define _FFS_FS_H_ +#include + +#ifdef __APPLE_API_UNSTABLE /* * Each disk drive contains some number of file systems. * A file system consists of a number of cylinder groups. @@ -132,8 +135,18 @@ * 32-bit pointers, and 1 million on 64-bit machines). One pointer * is taken away to point to an array of cluster sizes that is * computed as cylinder groups are inspected. + * There is a 128-byte region in the superblock reserved for in-core + * pointers to summary information. Originally this included an array + * of pointers to blocks of struct csum; now there are just two + * pointers and the remaining space is padded with fs_ocsp[]. + * + * NOCSPTRS determines the size of this padding. One pointer (fs_csp) + * is taken away to point to a contiguous array of struct csum for + * all cylinder groups; a second (fs_maxcluster) points to an array + * of cluster sizes that is computed as cylinder groups are inspected. */ -#define MAXCSBUFS ((128 / sizeof(void *)) - 1) +#define NOCSPTRS ((128 / sizeof(void *)) - 2) + /* * A summary of contiguous blocks of various sizes is maintained @@ -163,9 +176,6 @@ * from first cylinder group data blocks. These blocks have to be * read in from fs_csaddr (size fs_cssize) in addition to the * super block. - * - * N.B. sizeof(struct csum) must be a power of two in order for - * the ``fs_cs'' macro to work (see below). */ struct csum { int32_t cs_ndir; /* number of directories */ @@ -209,8 +219,8 @@ struct fs { int32_t fs_fragshift; /* block to frag shift */ int32_t fs_fsbtodb; /* fsbtodb and dbtofsb shift constant */ int32_t fs_sbsize; /* actual size of super block */ - int32_t fs_csmask; /* csum block offset */ - int32_t fs_csshift; /* csum block number */ + int32_t fs_csmask; /* csum block offset (now unused) */ + int32_t fs_csshift; /* csum block number (now unused) */ int32_t fs_nindir; /* value of NINDIR */ int32_t fs_inopb; /* value of INOPB */ int32_t fs_nspf; /* value of NSPF */ @@ -246,7 +256,8 @@ struct fs { u_char fs_fsmnt[MAXMNTLEN]; /* name mounted on */ /* these fields retain the current block allocation info */ int32_t fs_cgrotor; /* last cg searched */ - struct csum *fs_csp[MAXCSBUFS];/* list of fs_cs info buffers */ + void *fs_ocsp[NOCSPTRS]; /* list of fs_cs info buffers */ + struct csum *fs_csp; /* list of fs_cs info buffers */ int32_t *fs_maxcluster; /* max cluster in each cyl group */ int32_t fs_cpc; /* cyl per cycle in postbl */ int16_t fs_opostbl[16][8]; /* old rotation block list head */ @@ -319,8 +330,7 @@ struct fs { * * N.B. This macro assumes that sizeof(struct csum) is a power of two. */ -#define fs_cs(fs, indx) \ - fs_csp[(indx) >> (fs)->fs_csshift][(indx) & ~(fs)->fs_csmask] +#define fs_cs(fs, indx) fs_csp[indx] /* * Cylinder group block for a file system. @@ -527,8 +537,10 @@ struct ocg { */ #define BIG_ENDIAN_FS (__LITTLE_ENDIAN__) +#ifdef __APPLE_API_PRIVATE extern int inside[], around[]; extern u_char *fragtbl[]; +#endif /* __APPLE_API_PRIVATE */ /* @@ -551,8 +563,10 @@ struct ufslabel { u_int32_t ul_time; /* creation time */ u_int16_t ul_namelen; /* filesystem name length */ u_char ul_name[UFS_MAX_LABEL_NAME]; /* filesystem name */ - u_char ul_reserved[32];/* reserved for future use */ + u_int64_t ul_uuid; /* filesystem uuid */ + u_char ul_reserved[24];/* reserved for future use */ u_char ul_unused[460]; /* pad out to 1K */ }; +#endif /* __APPLE_API_UNSTABLE */ #endif /* ! _FFS_FS_H_ */