github.com/dennwc/btrfs@v0.0.0-20221026161108-3097362dc072/btrfs_h.go (about)

     1  package btrfs
     2  
     3  import "strings"
     4  
     5  const maxUint64 = 1<<64 - 1
     6  
     7  const labelSize = 256
     8  
     9  type FeatureFlags uint64
    10  
    11  const (
    12  	FeatureCompatROFreeSpaceTree = FeatureFlags(1 << 0)
    13  )
    14  
    15  type IncompatFeatures uint64
    16  
    17  func (f IncompatFeatures) String() string {
    18  	var s []string
    19  	for i, name := range incompatFeatureNames {
    20  		if uint64(f)&uint64(i) != 0 {
    21  			s = append(s, name)
    22  		}
    23  	}
    24  	return strings.Join(s, ",")
    25  }
    26  
    27  var incompatFeatureNames = []string{
    28  	"DefaultSubvol",
    29  	"MixedGroups",
    30  	"CompressLZO",
    31  	"CompressLZOv2",
    32  	"BigMetadata",
    33  	"ExtendedIRef",
    34  	"RAID56",
    35  	"SkinnyMetadata",
    36  	"NoHoles",
    37  }
    38  
    39  const (
    40  	FeatureIncompatMixedBackRef  = IncompatFeatures(1 << 0)
    41  	FeatureIncompatDefaultSubvol = IncompatFeatures(1 << 1)
    42  	FeatureIncompatMixedGroups   = IncompatFeatures(1 << 2)
    43  	FeatureIncompatCompressLZO   = IncompatFeatures(1 << 3)
    44  
    45  	// Some patches floated around with a second compression method
    46  	// lets save that incompat here for when they do get in.
    47  	// Note we don't actually support it, we're just reserving the number.
    48  	FeatureIncompatCompressLZOv2 = IncompatFeatures(1 << 4)
    49  
    50  	// Older kernels tried to do bigger metadata blocks, but the
    51  	// code was pretty buggy. Lets not let them try anymore.
    52  	FeatureIncompatBigMetadata = IncompatFeatures(1 << 5)
    53  
    54  	FeatureIncompatExtendedIRef   = IncompatFeatures(1 << 6)
    55  	FeatureIncompatRAID56         = IncompatFeatures(1 << 7)
    56  	FeatureIncompatSkinnyMetadata = IncompatFeatures(1 << 8)
    57  	FeatureIncompatNoHoles        = IncompatFeatures(1 << 9)
    58  )
    59  
    60  // Flags definition for balance.
    61  type BalanceFlags uint64
    62  
    63  // Restriper's general type filter.
    64  const (
    65  	BalanceData     = BalanceFlags(1 << 0)
    66  	BalanceSystem   = BalanceFlags(1 << 1)
    67  	BalanceMetadata = BalanceFlags(1 << 2)
    68  
    69  	BalanceMask = (BalanceData | BalanceSystem | BalanceMetadata)
    70  
    71  	BalanceForce  = BalanceFlags(1 << 3)
    72  	BalanceResume = BalanceFlags(1 << 4)
    73  )