Skip to content

zVSAM V2 Catalog

z390 does not keep a live catalog of the host file system. A zVSAM catalog is a VSAM Catalog Definition Table (VCDT): a data-only load module assembled from DEFINE statements. At OPEN, the runtime loads that module and uses the tables in storage as the metadata for the cluster, AIX, or path named on the ACB.

Dynamic catalogs stored as zVSAM datasets are planned for a later release, once V2 KSDS support is complete enough to host them. Until then the assembled VCDT is the catalog.

The assembler DSECT that maps a V2 VCDT is generated by VCDTD2. That DSECT is the canonical layout. Catalog source is collected by DEFINE2 and emitted by ZDEFINE2. The umbrella DEFINE / VCDTD macros select the V1 or V2 implementation from &SYSZVSAM.

A worked example of a V2 catalog is vsam2/mlc/Z390CAT2.MLC.

For V1 catalog source syntax see zVSAM V1 Catalog User Guide. That guide already describes several V2-only operands; the authoritative V2 operand list is this chapter and DEFINE2.

Role of the catalog

The VCDT holds the static definition of every component in one or more spheres. It holds information on zVSAM clusters only. Sequential datasets cannot be catalogued in a zVSAM catalog.

Information Where it lives
Catalog name and version VCDT header (IHAVCDT)
Base clusters (ESDS, KSDS, RRDS, LDS) Cluster table (IHAVCLR)
Alternate indexes AIX table (IHAVAIX)
Paths (alias to a cluster or AIX) Path table (IHAVPTH)
Upgrade set for a cluster Per-cluster address list in VCLRAIXS
Optional DTA/IDX dsname overrides Null-terminated strings in VCLRDSNS / VAIXDSNS

It does not hold runtime state (high-used XLRA, record counts, spacemaps). That lives in the prefix and counters areas of each physical file. Those areas are expected to move into a catalog dataset in a future release; see File Structure.

How a catalog is built

Catalog source is ordinary assembler. ZVSAM(2) must be in effect so DEFINE expands DEFINE2.

Typical structure:

         DEFINE CATALOG,NAME=Z390CAT2
         DEFINE CLUSTER,NAME=MYFILE03,INDEX=INDEXED,KEYS=(3,0),...
         DEFINE AIX,NAME=MYAIX31,RELATE=MYFILE03,KEYS=(3,6),...
         DEFINE PATH,NAME=AIX31PH,ENTRY=MYAIX31,UPDATE=NO
         DEFINE END
         END

Processing:

  1. DEFINE CATALOG records the catalog name and version. It must appear first.
  2. Each DEFINE CLUSTER, DEFINE AIX / DEFINE ALTERNATEINDEX, and DEFINE PATH appends an entry to in-memory global arrays (ZDEFINE2.CPY). Capacity is 100 clusters, 100 AIXs, and 100 paths.
  3. DEFINE END cross-checks relations, then expands ZDEFINE2 (the loadable tables) and VCDTD2 (the DSECTs).

ZDEFINE2 emits these CSECTs, which the linker combines into one .390:

CSECT Content
VCDT Header: id, name, counts, addresses of the three tables
VCLR One IHAVCLR entry per cluster, labelled by cluster name
VCLRAIXS Per-cluster lists of upgrade-AIX addresses
VCLRDSNS Null-terminated DTA/IDX override strings for clusters
VAIX One IHAVAIX entry per AIX, labelled by AIX name
VAIXDSNS Null-terminated DTA/IDX override strings for AIXs
VPTH One IHAVPTH entry per path, labelled by path name

Unlike V1, V2 does not embed a model DCB in the catalog (VCDTDCBA is gone).

What a catalog contains

The catalog will hold at least: - cluster name - pointer to index file - pointers to all related AIX clusters - LRECL - record type (F, V, FS, VS) - type of component (ESDS, KSDS, RRDS, LDS, AIX) - freeblocks (during load, between blocks) - freespace (during load, within blocks) - Physical Block size (aka CI-size, 512 bytes to 16MB)

This design includes all those values, and a few more.

The design explicitly excludes metadata for sequential files.

Locating the catalog at OPEN

The ACB DDNAME names a host environment variable. That variable holds the path of the catalog load module, with the catalog entry name in place of the .390 suffix:

SET MYACB=drive:\path\Z390CAT2.MYFILE03

If the value has no period, the ACB label is used as the entry name. OPEN loads the .390 from that directory, then searches the cluster table and, if needed, the path table for the entry. AIX names are not searched on OPEN; an AIX is opened via a path, or as the AIX itself when MACRF=AIX is used on a path (see Interfaces and ACB Processes).

A CATALOG environment variable, if present, is documentation only; zVSAM does not read it.

Default physical file names, when DTADSN / IDXDSN are omitted, are derived at OPEN from the catalog directory plus the component name:

Component Data file Index file
Cluster or AIX {path}{name}.DTA {path}{name}.IDX

V1 used {name}.VES, {name}.VX0, and {name}.VXN and stored those defaults in the VCDT. V2 stores a single X'00' when no override is given; OPEN must synthesize .DTA / .IDX.

[!NOTE] V2 behavior is simple. Maybe too simple. I suggest we look into copying V1 behaviour, using the proper extensions we assign to zVSAM V2 physical files.

DEFINE CATALOG

Must be first. Operands:

Operand Required Default Meaning
NAME= yes Catalog name, 1–8 characters. Becomes VCDTNAME and the CSECT/module name.
VERSION= no 2 Single character. Concatenated with C'VCD' to form VCDTID. Default id is C'VCD2'

V1 catalogs always use id C'VCDT' and have no VERSION= operand. The fourth byte of VCDTID is the discriminator for a runtime that must accept both layouts (T = V1, 2 = V2).

DEFINE CLUSTER

Defines a base cluster. NAME= is required (1–8 characters) and becomes the label of the VCLR entry.

Cluster type — INDEX=

INDEX= VCLRTYPE Flag Notes
INDEXED KSDS VCLRKSDS Default when DEFINE is used via the umbrella macro. KEYS= required.
NONINDEXED ESDS VCLRESDS
NUMBERED RRDS VCLRRRDS
LINEAR LDS VCLRLDS Required catalog type. The LDS physical file format is described in File Structure document

DEFINE2 itself has no default for INDEX=; the umbrella DEFINE supplies INDEX=INDEXED.

Record format — RECORDSIZE= and SPANNED=

Source Result
RECORDSIZE=n Fixed. VCLRLMAX = n. VCLRVREC off.
RECORDSIZE=(avg,max) Variable. VCLRVREC on, VCLRLAVG / VCLRLMAX set.
SPANNED=YES VCLRSPAN on. Default NO.

The four-byte record length field is not included in RECORDSIZE. Combinations map to the File Structure record types F, FS, V, VS.

LDS does not use RECORDSIZE, SPANNED, or KEYS.

Keys — KEYS=(length,offset)

KSDS only. Length must be non-zero. offset + length must not exceed VCLRLMAX. Stored in VCLRKLEN / VCLRKOFF.

The umbrella default is KEYS=(64,0). A KSDS defined through DEFINE2 directly with omitted keys is rejected.

Block size and load-time space

Block sizes may be given in bytes or as nK. The permitted range is 512 bytes through 16MB. DEFINE2 currently enforces only the 512-byte minimum; the 16MB maximum is a catalog rule and must be enforced.

Operand Default Stored as Rules
DATABLOCKSIZE= 4K VCLRDBS (bytes) Bytes or nK. Range 512–16MB.
INDEXBLOCKSIZE= 4K VCLRIBS (bytes) Same.
DATAADJUST=YES/NO NO VCLRDADJ Reduce data block size to an optimal fit. Forbidden for variable records and for SPANNED=YES. Intended for fixed non-spanned data.
INDEXADJUST=YES/NO NO VCLRIADJ Reduce index block size to an optimal fit. Allowed on variable KSDS.
DATAFREESPACE=nn 0 VCLRDFS 0–99. Percent of space left free in a data block at load and after a split.
INDEXFREESPACE=nn 0 VCLRIFS 0–99. Same for index blocks.
DATAFREEBLOCKS=(x,y) (0,0) VCLRDNB, VCLRDFB After every y data blocks, insert x empty ones. (x,0) inserts x empty blocks before the first. x and y ≤ 65535. Cluster: KSDS only.
INDEXFREEBLOCKS=(x,y) (0,0) VCLRINB, VCLRIFB Same for index blocks. Cluster: KSDS only.

Freespace and freeblocks are load-time reservation attributes. They are not restricted to fixed non-spanned KSDS. DEFINE2 applies these additional edits:

  • Fixed spanned KSDS cannot have freespace (severity 12).
  • Fixed spanned KSDS with RECORDSIZE less than data block size is a warning (severity 4).
  • Fixed ESDS cannot have freespace.
  • ESDS cannot have freeblocks.
  • Fixed RRDS cannot have freespace.

Variable KSDS may specify freespace. An AIX may specify freespace and freeblocks (an AIX is indexed). Those cases are valid catalog options; the stricter wording in File Structure should be relaxed to match this chapter.

[!NOTE] We should not impose unnecessary restrictions. on FREESPACE usage, except when in compatability mode. Under noallow, we should mimic VSAM rules.

Other cluster operands

Operand Default Meaning
REUSE=YES/NO NO Reset high-used at OPEN (VCLRRUSE in VCLRFLG2).
DTADSN= omitted Full host path of the data file. C string addressed by VCLRDTAA.
IDXDSN= omitted Full host path of the index file, addressed by VCLRIDXA. Must not equal DTADSN.

LDS skips RECORDSIZE, SPANNED, KEYS, and REUSE in DEFINE2 and goes straight to the DSN overrides.

DEFINE AIX / DEFINE ALTERNATEINDEX

An AIX is catalogued as its own KSDS-like cluster (data + index files) related to a base cluster in the same VCDT. AIX and ALTERNATEINDEX are synonyms.

AIX record format is not a user operand. It is derived from UNIQUEKEY=:

UNIQUEKEY= AIX record type Flags set
YES F VAIXUKEY on; VAIXVREC and VAIXSPAN off
NO VS VAIXUKEY off; VAIXVREC and VAIXSPAN on

SPANNED= is not a DEFINE operand for AIX. Unique AIX data hold one base pointer per alternate key (fixed). Non-unique AIX data hold a variable-length, possibly spanned list of base pointers.

Operand Default Meaning
NAME= required 1–8 characters. Label of the VAIX entry.
RELATE= required Name of the base cluster. Resolved at DEFINE END.
KEYS=(length,offset) required Alternate key in the base record. Must fit in the related cluster’s VCLRLMAX.
UNIQUEKEY=YES/NO YES Unique vs non-unique alternate keys. Also selects F vs VS.
MAXELEMENTS= 0 Only with UNIQUEKEY=NO. Max number of base pointers per AIX record (VAIXMAXE). Bytes or nK, max 2,147,483,647. Used to size AIX data blocks.
UPGRADE=YES/NO YES Include this AIX in the related cluster’s upgrade list (VAIXUAIX).
REUSE=YES/NO/NOREUSE NO NOREUSE is accepted as IBM’s synonym for NO. Stored as VAIXRUSE in VAIXFLG2.
DATABLOCKSIZE= / INDEXBLOCKSIZE= 4K Same range as cluster: 512–16MB.
DATAADJUST=YES/NO NO Rejected when UNIQUEKEY=NO (VS data cannot be adjusted).
INDEXADJUST=YES/NO NO Same meaning as on a cluster.
DATAFREESPACE= / INDEXFREESPACE= 0 0–99. Valid on AIX.
DATAFREEBLOCKS= / INDEXFREEBLOCKS= (0,0) Valid on AIX (it is indexed).
DTADSN= / IDXDSN= omitted Overrides for the AIX .DTA / .IDX files.

DEFINE END requires every RELATE= to name a cluster in this catalog. An AIX may relate to KSDS or ESDS. Relating an AIX to RRDS or LDS is not a defined use; DEFINE2 currently does not reject it.

[!NOTE] 1. In noallow mode, an index can also be created on an RRDS. 2. Does REUSE belong in the catalog? I thought it was an ACB attribute. When in the catalog, no data can ever be accessed that was stored before. To be investigated.

DEFINE PATH

A path is a catalog alias. It has no files of its own.

Operand Default Meaning
NAME= required 1–8 characters.
ENTRY= required Name of an AIX or a base cluster in this catalog.
UPDATE=YES/NO YES When the path is used for output, upgrade associated AIXs (VPTHAIXU)

At DEFINE END:

  • If ENTRY= names an AIX, VPTHAIXP is set and VPTHENTA points at that VAIX. The related cluster is reached via VAIXRELA.
  • If ENTRY= names a cluster, VPTHAIXP is off and VPTHENTA points at that VCLR (alias path).

Search order at OPEN is clusters first, then paths. Duplicate names across types are not diagnosed; the cluster would win.

DEFINE END

  1. Every AIX RELATE= must match a cluster name; the AIX key must lie within that cluster’s maximum record length.
  2. Every path ENTRY= must match an AIX or cluster name; VPTHAIXP is set for AIX entries.
  3. For each cluster, ZDEFINE2 builds the upgrade list: addresses of related AIXs that have UPGRADE=YES. VCLRAIXN is the count, VCLRAIXA points at the list.
  4. Tables and DSECTs are generated.

In-memory layout

VCDTD2 is the canonical map. ZDEFINE2 must emit bytes that match these DSECTs. Where the current generator still follows V1 bit packing, that is a defect; see Implementation issues.

Header — IHAVCDT

Offset Field Type Content
0 VCDTID CL4 C'VCD' + version character (C'VCD2' default)
4 VCDTNAME CL8 Catalog name
12 VCDTCLRT F Number of cluster entries
16 VCDTCLRA A Address of VCLR
20 VCDTAIXT F Number of AIX entries
24 VCDTAIXA A Address of VAIX
28 VCDTPTHT F Number of path entries
32 VCDTPTHA A Address of VPTH

Length 36. V1 continues with VCDTDCBA at offset 36 (model DCB); V2 does not.

Cluster entry — IHAVCLR

Length is VCLRLEN (68 bytes after 0F alignment). Each entry is labelled with the cluster name so AIX and path pointers can use A(name).

Offset Field Type Content
0 VCLRID CL4 C'VCLR'
4 VCLRNAME CL8 Cluster name
12 VCLRTYPE CL4 ESDS / KSDS / RRDS / LDS
16 VCLRFLG1 X See flag table
17 VCLRFLG2 X See flag table
18–19 VCLRFLG3/4 XL2 Reserved (zero)
20 VCLRLAVG F Average length if variable
24 VCLRLMAX F Max or fixed length
28 VCLRKLEN F Primary key length (KSDS)
32 VCLRKOFF F Primary key offset (KSDS)
36 VCLRDTAA A Override DTA dsname, or X'00'
40 VCLRIDXA A Override IDX dsname, or X'00'
44 VCLRDBS F Data block size in bytes
48 VCLRIBS F Index block size in bytes
52 VCLRDFS X Data freespace %
53 VCLRIFS X Index freespace %
54 VCLRDNB XL2 Data free-block count x
56 VCLRDFB XL2 Data free-block interval y
58 VCLRINB XL2 Index free-block count x
60 VCLRIFB XL2 Index free-block interval y
62 VCLRAIXN AL1 Number of upgrade AIXs
63 VCLRAIXA AL4 Address of upgrade address list
67 Pad to fullword (VCLRLEN = 68)

VCLRFLG1:

Bit Equate Meaning
X'80' VCLRVREC Variable records
X'10' VCLRSPAN Spanned
X'08' VCLRKSDS KSDS
X'04' VCLRRRDS RRDS
X'02' VCLRESDS ESDS
X'01' VCLRLDS LDS

VCLRFLG2:

Bit Equate Meaning
X'80' VCLRDADJ DATAADJUST=YES
X'40' VCLRIADJ INDEXADJUST=YES
X'20' VCLRRUSE REUSE=YES

REUSE belongs in VCLRFLG2 X'20', not in the V1 VCLRFLG1 X'40' position.

AIX entry — IHAVAIX

Offset Field Type Content
0 VAIXID CL4 C'VAIX'
4 VAIXNAME CL8 AIX name
12 VAIXRELN CL8 Related cluster name
20 VAIXFLG1 X See flag table
21 VAIXFLG2 X See flag table
22–23 XL2 Reserved
24 VAIXKLEN F Alternate key length
28 VAIXKOFF F Alternate key offset
32 VAIXDTAA A Override DTA dsname
36 VAIXIDXA A Override IDX dsname
40 VAIXRELA A Address of related VCLR
44 VAIXDBS F AIX data block size
48 VAIXIBS F AIX index block size
52 VAIXDFS X Data freespace %
53 VAIXIFS X Index freespace %
54 VAIXDNB XL2 Data free-block count x
56 VAIXDFB XL2 Data free-block interval y
58 VAIXINB XL2 Index free-block count x
60 VAIXIFB XL2 Index free-block interval y
64 VAIXMAXE F MAXELEMENTS (fullword-aligned)

VAIXMAXE is a DS F after VAIXIFB at offset 60, so the assembler inserts two pad bytes. VAIXLEN is 68.

VAIXFLG1:

Bit Equate Meaning
X'80' VAIXVREC Variable AIX records. On when UNIQUEKEY=NO (VS).
X'40' VAIXUKEY Unique keys. On when UNIQUEKEY=YES (F).
X'20' VAIXUAIX Upgrade this AIX
X'10' VAIXSPAN Spanned AIX records. On when UNIQUEKEY=NO (VS).

VAIXFLG2:

Bit Equate Meaning
X'80' VAIXDADJ DATAADJUST=YES
X'40' VAIXIADJ INDEXADJUST=YES
X'20' VAIXRUSE REUSE=YES

REUSE belongs in VAIXFLG2 X'20'. VAIXFLG1 X'80' is VAIXVREC, not the V1 VAIXRUSE bit.

Path entry — IHAVPTH

Offset Field Type Content
0 VPTHID CL4 C'PATH' (RPI 865). The DSECT comment C'VPTH' is stale.
4 VPTHNAME CL8 Path name
12 VPTHENTN CL8 AIX or cluster name
20 VPTHFLG1 X VPTHAIXP X'80' = entry is an AIX; VPTHAIXU X'40' = update upgrades
21–23 XL3 Reserved
24 VPTHENTA A Address of the VAIX or VCLR

Length 28.

UPDATE=YES sets VPTHAIXU. DEFINE2 must assign the same global that ZDEFINE2 emits (&PTH_AIXU).

Relations in a sphere

VCDT
 ├─ VCLR  cluster
 │    ├─ VCLRAIXA → [ VAIX, VAIX, ... ]   upgrade set only
 │    ├─ VCLRDTAA → "…\name.DTA" or X'00'
 │    └─ VCLRIDXA → "…\name.IDX" or X'00'
 ├─ VAIX  aix
 │    ├─ VAIXRELA → VCLR
 │    ├─ VAIXDTAA / VAIXIDXA
 │    └─ RELATE= must match VCLRNAME
 └─ VPTH  path
      └─ VPTHENTA → VAIX or VCLR

OPEN of a path with VPTHAIXP on uses the AIX to locate base records, unless MACRF=AIX treats the AIX as a KSDS. Upgrade OPEN of related AIXs is driven by the cluster upgrade list and by VPTHAIXU; see ACB Processes.

Runtime consumption

V1 OPEN (vz390) loads the VCDT as a module and walks it with V1 offsets, including VCDTDCBA and 56-byte VCLR entries. That path is not valid for a V2 VCDT.

V2 OPEN is intended to:

  1. Load the catalog module (same DDNAME / catalog.entry convention).
  2. Inspect VCDTID and instantiate Java catalog objects from either a V1 or a V2 layout.
  3. Resolve the named cluster or path.
  4. Derive DTA/IDX paths (override or {dir}{name}.DTA / .IDX).
  5. Open those files and validate the prefix against the catalog (type, LRECL, block size, key offset/length) as described in ACB Processes.

zCatVCLR and zCatVAIX exist as stubs: they read the eyecatcher (and, for zCatVCLR, name and type) and leave remaining fields at defaults. zACB.Open() is likewise a stub. Completing those constructors to match VCDTD2 is the Java side of this chapter. There is not yet a header object for IHAVCDT or a path object for IHAVPTH.

[!NOTE] Catalog load logic needs to be revamped to: - extend the zControlBlock to define the physical layout of data in z390 memory - derive the zVSAM V2 objects (if catalog is V1, use what we have, default all else) - since catalogs are frozen, only getter and iterator methods will be needed

SHOWCAT is not supported in V2.

[!NOTE] Let's see if we can change that. SHOWCAT seems to me to be a useful tool.

V1 vs V2 catalog

Topic V1 (DEFINE1 / VCDTD1) V2 (DEFINE2 / VCDTD2)
Id C'VCDT' C'VCD' + VERSION (default C'VCD2')
Model DCB VCDTDCBA omitted
Data/index files .VES / .VX0 / AIX .VXN; defaults stored in the VCDT .DTA / .IDX; overrides only, else null
Block size CONTROLINTERVALSIZE= on cluster (VCLRCI) DATABLOCKSIZE= / INDEXBLOCKSIZE= on cluster and AIX; 512–16MB
Freespace not in VCDT percent + freeblocks on cluster and AIX
Adjust not in VCDT DATAADJUST / INDEXADJUST
Spanned not in VCDT VCLRSPAN on cluster; AIX spanned implied by UNIQUEKEY=NO
Max record length VCLRLREC VCLRLMAX
VCLRAIXN F AL1
VCLR length 56 68
VAIX length 40 68 (with VAIXMAXE and block/space fields)
AIX MAXELEMENTS none VAIXMAXE
AIX record format not distinguished in the VCDT Unique = F; non-unique = VS (VAIXUKEY / VAIXVREC / VAIXSPAN)
REUSE on AIX NOREUSE accepted YES / NO / NOREUSE; bit is VAIXFLG2 VAIXRUSE

V1 and V2 catalog source cannot be mixed in one assembly (ZVSAM(1) vs ZVSAM(2)). Linked modules of both kinds are intended to run in one z390 process; that requires the Java loader to understand both VCDT layouts.

Future: catalog dataset

Once V2 KSDS is complete enough, the assembled VCDT can be replaced by a catalog cluster. Planned consequences:

  • DEFINE / DELETE become runtime operations against that cluster, not an assembly step.
  • Prefix counters that today sit in the first 4096 bytes of each file can move into catalog records.
  • A SYSCAT (or similar) host variable can name the catalog; the ACB DDNAME can then name the cluster directly.

The in-memory objects (zCatVCLR, zCatVAIX, and a future path/header type) should be independent of whether the bytes came from a load module or from a catalog dataset.

Implementation issues

VCDTD2 is the layout this chapter specifies. The items below are defects or incomplete work in the current macros and Java; they should be closed against this chapter rather than documented as if they were finished behaviour.

  1. Cluster REUSE bit. ZDEFINE2 still places REUSE in VCLRFLG1 X'40' (V1 position) and never sets VCLRFLG2 VCLRRUSE X'20'. The generator must match VCDTD2.
  2. AIX flag byte. ZDEFINE2 still packs REUSE at VAIXFLG1 X'80'. That bit is VAIXVREC. REUSE belongs in VAIXFLG2 VAIXRUSE. For UNIQUEKEY=NO the generator must set VAIXVREC and VAIXSPAN; for UNIQUEKEY=YES it must set VAIXUKEY only. SPANNED= is not an AIX operand; DEFINE2 should stop advertising it on AIX.
  3. AIX INDEXADJUST=NO. Both YES and NO fall through to SETB 1, so the index-adjust bit is always on if that path is taken. NO must leave the bit off.
  4. AIX DATABLOCKSIZE minimum. The skip AIF ('&MAXELEMENTS' NE '') is true for the default 0, so the 512-byte check never runs. Enforce 512–16MB unless MAXELEMENTS is a non-zero value that is meant to drive sizing.
  5. 16MB maximum. DEFINE2 does not yet reject a cluster or AIX block size above 16,777,216 bytes.
  6. Path UPDATE. DEFINE2 sets &PTH_UPDATE, but ZDEFINE2 emits &PTH_AIXU. UPDATE=YES therefore does not set VPTHAIXU. Use one global (&PTH_AIXU). The same mismatch exists in V1.
  7. VPTHID DSECT comment. Generated value is C'PATH'. Update the VCDTD2 comment that still says C'VPTH'.
  8. Java objects. zCatVCLR and zCatVAIX do not yet parse block size, freespace, freeblocks, keys, flags, or DSN pointers. Remaining field names still talk about CA/CI percents. Constructors must follow VCDTD2, including VCLRRUSE / VAIXRUSE in flag byte 2 and AIX F vs VS from UNIQUEKEY. There is no IHAVCDT or IHAVPTH Java type yet.
  9. AIX RELATE= to RRDS or LDS. Not a defined use; DEFINE2 should reject it once that edit is agreed.
  10. No name-uniqueness check among clusters, AIXs, and paths. OPEN searches clusters first, so a colliding path name is silently hidden.
  11. File Structure freespace wording. That chapter currently says only a fixed non-spanned KSDS can specify free space. This catalog chapter is authoritative: variable KSDS and AIX may specify freespace; freeblocks are KSDS (cluster) or AIX. File Structure should be updated to match.
  12. And various NOTE sections trhoughout this document.