77 lines
2.6 KiB
Go
77 lines
2.6 KiB
Go
// Copyright 2019 The gVisor Authors.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
package disklayout
|
|
|
|
// SuperBlock32Bit implements SuperBlock and represents the 32-bit version of
|
|
// the ext4_super_block struct in fs/ext4/ext4.h. Should be used only if
|
|
// RevLevel = DynamicRev and 64-bit feature is disabled.
|
|
type SuperBlock32Bit struct {
|
|
// We embed the old superblock struct here because the 32-bit version is just
|
|
// an extension of the old version.
|
|
SuperBlockOld
|
|
|
|
FirstInode uint32
|
|
InodeSizeRaw uint16
|
|
BlockGroupNumber uint16
|
|
FeatureCompat uint32
|
|
FeatureIncompat uint32
|
|
FeatureRoCompat uint32
|
|
UUID [16]byte
|
|
VolumeName [16]byte
|
|
LastMounted [64]byte
|
|
AlgoUsageBitmap uint32
|
|
PreallocBlocks uint8
|
|
PreallocDirBlocks uint8
|
|
ReservedGdtBlocks uint16
|
|
JournalUUID [16]byte
|
|
JournalInum uint32
|
|
JournalDev uint32
|
|
LastOrphan uint32
|
|
HashSeed [4]uint32
|
|
DefaultHashVersion uint8
|
|
JnlBackupType uint8
|
|
BgDescSizeRaw uint16
|
|
DefaultMountOpts uint32
|
|
FirstMetaBg uint32
|
|
MkfsTime uint32
|
|
JnlBlocks [17]uint32
|
|
}
|
|
|
|
// Compiles only if SuperBlock32Bit implements SuperBlock.
|
|
var _ SuperBlock = (*SuperBlock32Bit)(nil)
|
|
|
|
// Only override methods which change based on the additional fields above.
|
|
// Not overriding SuperBlock.BgDescSize because it would still return 32 here.
|
|
|
|
// InodeSize implements SuperBlock.InodeSize.
|
|
func (sb *SuperBlock32Bit) InodeSize() uint16 {
|
|
return sb.InodeSizeRaw
|
|
}
|
|
|
|
// CompatibleFeatures implements SuperBlock.CompatibleFeatures.
|
|
func (sb *SuperBlock32Bit) CompatibleFeatures() CompatFeatures {
|
|
return CompatFeaturesFromInt(sb.FeatureCompat)
|
|
}
|
|
|
|
// IncompatibleFeatures implements SuperBlock.IncompatibleFeatures.
|
|
func (sb *SuperBlock32Bit) IncompatibleFeatures() IncompatFeatures {
|
|
return IncompatFeaturesFromInt(sb.FeatureIncompat)
|
|
}
|
|
|
|
// ReadOnlyCompatibleFeatures implements SuperBlock.ReadOnlyCompatibleFeatures.
|
|
func (sb *SuperBlock32Bit) ReadOnlyCompatibleFeatures() RoCompatFeatures {
|
|
return RoCompatFeaturesFromInt(sb.FeatureRoCompat)
|
|
}
|