gvisor/pkg/sentry/fsimpl/ext/disklayout/superblock_32.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)
}