forked from Imagelibrary/littlefs
Added grm rcompat flag, dropped ocompat, tweaked compat flags a bit
I'm just not seeing a use case for optional compat flags (ocompat), so
dropping for now. It seems their *nix equivalent, feature_compat, is
used to inform fsck of things, but this doesn't really make since in
littlefs since there is no fsck. Or from a different perspective,
littlefs is always running fsck.
Ocompat flags can always be added later (since they do nothing).
Unfortunately this really ruins the alignment of the tag encoding. For
whatever reason config limits tend to come in pairs. For now the best
solution is just leave tag 0x0006 unused. I guess you can consider it
reserved for hypothetical ocompat flags in the future.
---
This adds an rcompat flag for the grm, since in theory a filesystem
doesn't need to support grms if it never renames files (or creates
directories?). But if a filesystem doesn't support grms and a grms gets
written into the filesystem, this can lead to corruption.
I think every piece of gstate will end up with its own compat flag for
this reason.
---
Also renamed r/w/oflags -> r/w/ocompatflags to make their purpose
clearer.
---
The code impact of adding the grm rcompat flag is minimal, and will
probably be less for additional rcompat flags:
code stack
before: 31528 2752
after: 31584 (+0.2%) 2752 (+0.0%)
This commit is contained in:
@@ -10,47 +10,46 @@ import shutil
|
||||
import struct
|
||||
|
||||
|
||||
TAG_NULL = 0x0000
|
||||
TAG_CONFIG = 0x0000
|
||||
TAG_MAGIC = 0x0003
|
||||
TAG_VERSION = 0x0004
|
||||
TAG_RFLAGS = 0x0005
|
||||
TAG_WFLAGS = 0x0006
|
||||
TAG_OFLAGS = 0x0007
|
||||
TAG_BLOCKSIZE = 0x0008
|
||||
TAG_BLOCKCOUNT = 0x0009
|
||||
TAG_NAMELIMIT = 0x000a
|
||||
TAG_SIZELIMIT = 0x000b
|
||||
TAG_UTAGLIMIT = 0x000c
|
||||
TAG_UATTRLIMIT = 0x000d
|
||||
TAG_STAGLIMIT = 0x000e
|
||||
TAG_SATTRLIMIT = 0x000f
|
||||
TAG_MDIRLIMIT = 0x0010
|
||||
TAG_MTREELIMIT = 0x0011
|
||||
TAG_GSTATE = 0x0100
|
||||
TAG_GRM = 0x0100
|
||||
TAG_NAME = 0x0200
|
||||
TAG_BOOKMARK = 0x0201
|
||||
TAG_REG = 0x0202
|
||||
TAG_DIR = 0x0203
|
||||
TAG_STRUCT = 0x0300
|
||||
TAG_DATA = 0x0300
|
||||
TAG_TRUNK = 0x0304
|
||||
TAG_BLOCK = 0x0308
|
||||
TAG_BTREE = 0x030c
|
||||
TAG_BRANCH = 0x031c
|
||||
TAG_MDIR = 0x0321
|
||||
TAG_MTREE = 0x0324
|
||||
TAG_MROOT = 0x0329
|
||||
TAG_DID = 0x032c
|
||||
TAG_UATTR = 0x0400
|
||||
TAG_SATTR = 0x0600
|
||||
TAG_SHRUB = 0x1000
|
||||
TAG_CKSUM = 0x3000
|
||||
TAG_ECKSUM = 0x3100
|
||||
TAG_ALT = 0x4000
|
||||
TAG_GT = 0x2000
|
||||
TAG_R = 0x1000
|
||||
TAG_NULL = 0x0000
|
||||
TAG_CONFIG = 0x0000
|
||||
TAG_MAGIC = 0x0003
|
||||
TAG_VERSION = 0x0004
|
||||
TAG_RCOMPATFLAGS = 0x0006
|
||||
TAG_WCOMPATFLAGS = 0x0007
|
||||
TAG_BLOCKSIZE = 0x0008
|
||||
TAG_BLOCKCOUNT = 0x0009
|
||||
TAG_NAMELIMIT = 0x000a
|
||||
TAG_SIZELIMIT = 0x000b
|
||||
TAG_UTAGLIMIT = 0x000c
|
||||
TAG_UATTRLIMIT = 0x000d
|
||||
TAG_STAGLIMIT = 0x000e
|
||||
TAG_SATTRLIMIT = 0x000f
|
||||
TAG_MDIRLIMIT = 0x0010
|
||||
TAG_MTREELIMIT = 0x0011
|
||||
TAG_GSTATE = 0x0100
|
||||
TAG_GRM = 0x0100
|
||||
TAG_NAME = 0x0200
|
||||
TAG_BOOKMARK = 0x0201
|
||||
TAG_REG = 0x0202
|
||||
TAG_DIR = 0x0203
|
||||
TAG_STRUCT = 0x0300
|
||||
TAG_DATA = 0x0300
|
||||
TAG_TRUNK = 0x0304
|
||||
TAG_BLOCK = 0x0308
|
||||
TAG_BTREE = 0x030c
|
||||
TAG_BRANCH = 0x031c
|
||||
TAG_MDIR = 0x0321
|
||||
TAG_MTREE = 0x0324
|
||||
TAG_MROOT = 0x0329
|
||||
TAG_DID = 0x032c
|
||||
TAG_UATTR = 0x0400
|
||||
TAG_SATTR = 0x0600
|
||||
TAG_SHRUB = 0x1000
|
||||
TAG_CKSUM = 0x3000
|
||||
TAG_ECKSUM = 0x3100
|
||||
TAG_ALT = 0x4000
|
||||
TAG_GT = 0x2000
|
||||
TAG_R = 0x1000
|
||||
|
||||
|
||||
CHARS = 'mbd-'
|
||||
|
||||
Reference in New Issue
Block a user