/*
- * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ * Copyright (c) 2000-2002 Apple Computer, Inc. All rights reserved.
*
* @APPLE_LICENSE_HEADER_START@
*
#ifndef _FFS_FS_H_
#define _FFS_FS_H_
+#include <sys/appleapiopts.h>
+
+#ifdef __APPLE_API_UNSTABLE
/*
* Each disk drive contains some number of file systems.
* A file system consists of a number of cylinder groups.
* 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
* 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 */
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 */
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 */
*
* 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.
*/
#define BIG_ENDIAN_FS (__LITTLE_ENDIAN__)
+#ifdef __APPLE_API_PRIVATE
extern int inside[], around[];
extern u_char *fragtbl[];
+#endif /* __APPLE_API_PRIVATE */
/*
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_ */