Renamed LFS_CKMETAPARITY and LFS_CKDATACKSUMREADS

- LFS_CKPARITY -> LFS_CKMETAPARITY
- LFS_CKDATACKSUMS -> LFS_CKDATACKSUMREADS

The goal here is to provide hints for 1. what is being checked (META,
DATA, etc), and 2. on what operation (FETCHES, PROGS, READS, etc).

Note that LFS_CKDATACKSUMREADS is intended to eventually be a part of a
set of flags that can pull off closed fully-checked reads:

- LFS_CKMETAREDUNDREADS - Check data checksums on reads
- LFS_CKDATACKSUMREADS - Check metadata redund blocks on reads
- LFS_CKREADS - LFS_CKMETAREDUNDREADS + LFS_CKDATACKSUMREADS

Also it's probably not a bad idea for LFS_CKMETAPARITY to be harder to
use. It's really not worth enabling unless you understand its
limitations (<1 bit of error detection, yay).

No code changes.
This commit is contained in:
Christopher Haster
2025-05-24 21:42:05 -05:00
parent 6d9c077261
commit f5dd6f69e8
6 changed files with 230 additions and 191 deletions
+57 -57
View File
@@ -706,17 +706,17 @@ static int lfsr_bd_set(lfs_t *lfs, lfs_block_t block, lfs_size_t off,
// ptail tracks the most recent trunk's parity so we can parity-check
// if it hasn't been written to disk yet
#ifdef LFS_CKPARITY
#ifdef LFS_CKMETAPARITY
#define LFSR_PTAIL_PARITY 0x80000000
#endif
#ifdef LFS_CKPARITY
#ifdef LFS_CKMETAPARITY
static inline bool lfsr_ptail_parity(const lfs_t *lfs) {
return lfs->ptail.off & LFSR_PTAIL_PARITY;
}
#endif
#ifdef LFS_CKPARITY
#ifdef LFS_CKMETAPARITY
static inline lfs_size_t lfsr_ptail_off(const lfs_t *lfs) {
return lfs->ptail.off & ~LFSR_PTAIL_PARITY;
}
@@ -725,7 +725,7 @@ static inline lfs_size_t lfsr_ptail_off(const lfs_t *lfs) {
// checked read helpers
#ifdef LFS_CKDATACKSUMS
#ifdef LFS_CKDATACKSUMREADS
static int lfsr_bd_ckprefix(lfs_t *lfs,
lfs_block_t block, lfs_size_t off, lfs_size_t hint,
lfs_size_t cksize, uint32_t cksum,
@@ -760,7 +760,7 @@ static int lfsr_bd_ckprefix(lfs_t *lfs,
}
#endif
#ifdef LFS_CKDATACKSUMS
#ifdef LFS_CKDATACKSUMREADS
static int lfsr_bd_cksuffix(lfs_t *lfs,
lfs_block_t block, lfs_size_t off, lfs_size_t hint,
lfs_size_t cksize, uint32_t cksum,
@@ -795,7 +795,7 @@ static int lfsr_bd_cksuffix(lfs_t *lfs,
// checked read functions
#ifdef LFS_CKDATACKSUMS
#ifdef LFS_CKDATACKSUMREADS
// caching read with parity/checksum checks
//
// the main downside of checking reads is we need to read all data that
@@ -851,7 +851,7 @@ static int lfsr_bd_readck(lfs_t *lfs,
//
// we'd also need to worry about early termination in lfsr_bd_cmp/cmpck
#ifdef LFS_CKDATACKSUMS
#ifdef LFS_CKDATACKSUMREADS
static lfs_scmp_t lfsr_bd_cmpck(lfs_t *lfs,
lfs_block_t block, lfs_size_t off, lfs_size_t hint,
const void *buffer, lfs_size_t size,
@@ -915,7 +915,7 @@ static lfs_scmp_t lfsr_bd_cmpck(lfs_t *lfs,
}
#endif
#ifdef LFS_CKDATACKSUMS
#ifdef LFS_CKDATACKSUMREADS
static int lfsr_bd_cpyck(lfs_t *lfs,
lfs_block_t dst_block, lfs_size_t dst_off,
lfs_block_t src_block, lfs_size_t src_off, lfs_size_t hint,
@@ -1454,7 +1454,7 @@ static inline bool lfsr_tag_diverging2(
#define LFSR_TAG_DSIZE (2+5+4)
// needed in lfsr_bd_readtag
#ifdef LFS_CKPARITY
#ifdef LFS_CKMETAPARITY
static inline bool lfsr_m_isckparity(uint32_t flags);
#endif
@@ -1519,7 +1519,7 @@ static lfs_ssize_t lfsr_bd_readtag(lfs_t *lfs,
return LFS_ERR_CORRUPT;
}
#ifdef LFS_CKPARITY
#ifdef LFS_CKMETAPARITY
// check the parity if we're checking parity
//
// this requires reading all of the data as well, but with any luck
@@ -1660,7 +1660,7 @@ static lfs_ssize_t lfsr_bd_progtag(lfs_t *lfs,
#define LFSR_DATA_ONDISK 0x80000000
#define LFSR_DATA_ISBPTR 0x40000000
#ifdef LFS_CKDATACKSUMS
#ifdef LFS_CKDATACKSUMREADS
#define LFSR_DATA_ISERASED 0x80000000
#endif
@@ -1697,13 +1697,13 @@ static inline lfs_size_t lfsr_data_size(lfsr_data_t data) {
return data.size & ~LFSR_DATA_ONDISK & ~LFSR_DATA_ISBPTR;
}
#ifdef LFS_CKDATACKSUMS
#ifdef LFS_CKDATACKSUMREADS
static inline lfs_size_t lfsr_data_cksize(lfsr_data_t data) {
return data.u.disk.cksize & ~LFSR_DATA_ISERASED;
}
#endif
#ifdef LFS_CKDATACKSUMS
#ifdef LFS_CKDATACKSUMREADS
static inline uint32_t lfsr_data_cksum(lfsr_data_t data) {
return data.u.disk.cksum;
}
@@ -1768,7 +1768,7 @@ static inline lfsr_data_t lfsr_data_fromfruncate(lfsr_data_t data,
// consuming the data
// needed in lfsr_data_read and friends
#ifdef LFS_CKDATACKSUMS
#ifdef LFS_CKDATACKSUMREADS
static inline bool lfsr_m_isckdatacksums(uint32_t flags);
#endif
@@ -1780,11 +1780,11 @@ static lfs_ssize_t lfsr_data_read(lfs_t *lfs, lfsr_data_t *data,
// on-disk?
if (lfsr_data_ondisk(*data)) {
// validating data cksums?
if (LFS_IFDEF_CKDATACKSUMS(
if (LFS_IFDEF_CKDATACKSUMREADS(
lfsr_m_isckdatacksums(lfs->flags)
&& lfsr_data_isbptr(*data),
false)) {
#ifdef LFS_CKDATACKSUMS
#ifdef LFS_CKDATACKSUMREADS
int err = lfsr_bd_readck(lfs,
data->u.disk.block, data->u.disk.off,
// note our hint includes the full data range
@@ -1887,11 +1887,11 @@ static lfs_scmp_t lfsr_data_cmp(lfs_t *lfs, lfsr_data_t data,
// on-disk?
if (lfsr_data_ondisk(data)) {
// validating data cksums?
if (LFS_IFDEF_CKDATACKSUMS(
if (LFS_IFDEF_CKDATACKSUMREADS(
lfsr_m_isckdatacksums(lfs->flags)
&& lfsr_data_isbptr(data),
false)) {
#ifdef LFS_CKDATACKSUMS
#ifdef LFS_CKDATACKSUMREADS
int cmp = lfsr_bd_cmpck(lfs,
// note the 0 hint, we don't usually use any
// following data
@@ -1959,11 +1959,11 @@ static int lfsr_bd_progdata(lfs_t *lfs,
// on-disk?
if (lfsr_data_ondisk(data)) {
// validating data cksums?
if (LFS_IFDEF_CKDATACKSUMS(
if (LFS_IFDEF_CKDATACKSUMREADS(
lfsr_m_isckdatacksums(lfs->flags)
&& lfsr_data_isbptr(data),
false)) {
#ifdef LFS_CKDATACKSUMS
#ifdef LFS_CKDATACKSUMREADS
int err = lfsr_bd_cpyck(lfs, block, off,
data.u.disk.block, data.u.disk.off, lfsr_data_size(data),
lfsr_data_size(data),
@@ -2582,7 +2582,7 @@ static void lfsr_bptr_init(lfsr_bptr_t *bptr,
bptr->data.size = data.size | LFSR_DATA_ONDISK | LFSR_BPTR_ISBPTR;
bptr->data.u.disk.block = data.u.disk.block;
bptr->data.u.disk.off = data.u.disk.off;
#ifdef LFS_CKDATACKSUMS
#ifdef LFS_CKDATACKSUMREADS
bptr->data.u.disk.cksize = cksize;
bptr->data.u.disk.cksum = cksum;
#else
@@ -2593,14 +2593,14 @@ static void lfsr_bptr_init(lfsr_bptr_t *bptr,
static inline void lfsr_bptr_discard(lfsr_bptr_t *bptr) {
bptr->data = LFSR_DATA_NULL();
#ifndef LFS_CKDATACKSUMS
#ifndef LFS_CKDATACKSUMREADS
bptr->cksize = 0;
bptr->cksum = 0;
#endif
}
static inline void lfsr_bptr_claim(lfsr_bptr_t *bptr) {
#ifdef LFS_CKDATACKSUMS
#ifdef LFS_CKDATACKSUMREADS
bptr->data.u.disk.cksize &= ~LFSR_BPTR_ISERASED;
#else
bptr->cksize &= ~LFSR_BPTR_ISERASED;
@@ -2627,7 +2627,7 @@ static inline lfs_size_t lfsr_bptr_size(const lfsr_bptr_t *bptr) {
// unnecessarily duplicate, this makes accessing ck info annoyingly
// messy...
static inline bool lfsr_bptr_iserased(const lfsr_bptr_t *bptr) {
#ifdef LFS_CKDATACKSUMS
#ifdef LFS_CKDATACKSUMREADS
return bptr->data.u.disk.cksize & LFSR_BPTR_ISERASED;
#else
return bptr->cksize & LFSR_BPTR_ISERASED;
@@ -2635,7 +2635,7 @@ static inline bool lfsr_bptr_iserased(const lfsr_bptr_t *bptr) {
}
static inline lfs_size_t lfsr_bptr_cksize(const lfsr_bptr_t *bptr) {
#ifdef LFS_CKDATACKSUMS
#ifdef LFS_CKDATACKSUMREADS
return bptr->data.u.disk.cksize & ~LFSR_BPTR_ISERASED;
#else
return bptr->cksize & ~LFSR_BPTR_ISERASED;
@@ -2643,7 +2643,7 @@ static inline lfs_size_t lfsr_bptr_cksize(const lfsr_bptr_t *bptr) {
}
static inline uint32_t lfsr_bptr_cksum(const lfsr_bptr_t *bptr) {
#ifdef LFS_CKDATACKSUMS
#ifdef LFS_CKDATACKSUMREADS
return bptr->data.u.disk.cksum;
#else
return bptr->cksum;
@@ -2715,7 +2715,7 @@ static int lfsr_data_readbptr(lfs_t *lfs, lfsr_data_t *data,
// read the cksize, cksum
err = lfsr_data_readlleb128(lfs, data,
LFS_IFDEF_CKDATACKSUMS(
LFS_IFDEF_CKDATACKSUMREADS(
&bptr->data.u.disk.cksize,
&bptr->cksize));
if (err) {
@@ -2723,7 +2723,7 @@ static int lfsr_data_readbptr(lfs_t *lfs, lfsr_data_t *data,
}
err = lfsr_data_readle32(lfs, data,
LFS_IFDEF_CKDATACKSUMS(
LFS_IFDEF_CKDATACKSUMREADS(
&bptr->data.u.disk.cksum,
&bptr->cksum));
if (err) {
@@ -3503,7 +3503,7 @@ static int lfsr_rbyd_appendtag(lfs_t *lfs, lfsr_rbyd_t *rbyd,
rbyd->eoff += d;
#ifdef LFS_CKPARITY
#ifdef LFS_CKMETAPARITY
// keep track of most recent parity
lfs->ptail.block = rbyd->blocks[0];
lfs->ptail.off
@@ -3714,7 +3714,7 @@ static int lfsr_rbyd_appendrattr_(lfs_t *lfs, lfsr_rbyd_t *rbyd,
}
}
#ifdef LFS_CKPARITY
#ifdef LFS_CKMETAPARITY
// keep track of most recent parity
lfs->ptail.block = rbyd->blocks[0];
lfs->ptail.off
@@ -7163,24 +7163,24 @@ static inline bool lfsr_m_isckfetches(uint32_t flags) {
}
#endif
#ifdef LFS_CKPARITY
#ifdef LFS_CKMETAPARITY
static inline bool lfsr_m_isckparity(uint32_t flags) {
(void)flags;
#ifdef LFS_YES_CKPARITY
#ifdef LFS_YES_CKMETAPARITY
return true;
#else
return flags & LFS_M_CKPARITY;
return flags & LFS_M_CKMETAPARITY;
#endif
}
#endif
#ifdef LFS_CKDATACKSUMS
#ifdef LFS_CKDATACKSUMREADS
static inline bool lfsr_m_isckdatacksums(uint32_t flags) {
(void)flags;
#ifdef LFS_YES_CKDATACKSUMS
#ifdef LFS_YES_CKDATACKSUMREADS
return true;
#else
return flags & LFS_M_CKDATACKSUMS;
return flags & LFS_M_CKDATACKSUMREADS;
#endif
}
#endif
@@ -13786,8 +13786,8 @@ static int lfs_init(lfs_t *lfs, uint32_t flags,
| LFS_IFDEF_REVNOISE(LFS_M_REVNOISE, 0)
| LFS_IFDEF_CKPROGS(LFS_M_CKPROGS, 0)
| LFS_IFDEF_CKFETCHES(LFS_M_CKFETCHES, 0)
| LFS_IFDEF_CKPARITY(LFS_M_CKPARITY, 0)
| LFS_IFDEF_CKDATACKSUMS(LFS_M_CKDATACKSUMS, 0))) == 0);
| LFS_IFDEF_CKMETAPARITY(LFS_M_CKMETAPARITY, 0)
| LFS_IFDEF_CKDATACKSUMREADS(LFS_M_CKDATACKSUMREADS, 0))) == 0);
#if defined(LFS_REVNOISE) && defined(LFS_REVDBG)
// LFS_M_REVDBG and LFS_M_REVNOISE are incompatible
LFS_ASSERT(!lfsr_m_isrevdbg(flags) || !lfsr_m_isrevnoise(flags));
@@ -13898,7 +13898,7 @@ static int lfs_init(lfs_t *lfs, uint32_t flags,
}
}
#ifdef LFS_CKPARITY
#ifdef LFS_CKMETAPARITY
// setup ptail, nothing should actually check off=0
lfs->ptail.block = 0;
lfs->ptail.off = 0;
@@ -14632,11 +14632,11 @@ int lfsr_mount(lfs_t *lfs, uint32_t flags,
#ifdef LFS_YES_CKFETCHES
flags |= LFS_M_CKFETCHES;
#endif
#ifdef LFS_YES_CKPARITY
flags |= LFS_M_CKPARITY;
#ifdef LFS_YES_CKMETAPARITY
flags |= LFS_M_CKMETAPARITY;
#endif
#ifdef LFS_YES_CKDATACKSUMS
flags |= LFS_M_CKDATACKSUMS;
#ifdef LFS_YES_CKDATACKSUMREADS
flags |= LFS_M_CKDATACKSUMREADS;
#endif
#ifdef LFS_YES_MKCONSISTENT
flags |= LFS_M_MKCONSISTENT;
@@ -14664,8 +14664,8 @@ int lfsr_mount(lfs_t *lfs, uint32_t flags,
| LFS_IFDEF_REVNOISE(LFS_M_REVNOISE, 0)
| LFS_IFDEF_CKPROGS(LFS_M_CKPROGS, 0)
| LFS_IFDEF_CKFETCHES(LFS_M_CKFETCHES, 0)
| LFS_IFDEF_CKPARITY(LFS_M_CKPARITY, 0)
| LFS_IFDEF_CKDATACKSUMS(LFS_M_CKDATACKSUMS, 0)
| LFS_IFDEF_CKMETAPARITY(LFS_M_CKMETAPARITY, 0)
| LFS_IFDEF_CKDATACKSUMREADS(LFS_M_CKDATACKSUMREADS, 0)
| LFS_M_MKCONSISTENT
| LFS_M_LOOKAHEAD
| LFS_M_COMPACT
@@ -14686,8 +14686,8 @@ int lfsr_mount(lfs_t *lfs, uint32_t flags,
| LFS_IFDEF_REVNOISE(LFS_M_REVNOISE, 0)
| LFS_IFDEF_CKPROGS(LFS_M_CKPROGS, 0)
| LFS_IFDEF_CKFETCHES(LFS_M_CKFETCHES, 0)
| LFS_IFDEF_CKPARITY(LFS_M_CKPARITY, 0)
| LFS_IFDEF_CKDATACKSUMS(LFS_M_CKDATACKSUMS, 0)),
| LFS_IFDEF_CKMETAPARITY(LFS_M_CKMETAPARITY, 0)
| LFS_IFDEF_CKDATACKSUMREADS(LFS_M_CKDATACKSUMREADS, 0)),
cfg);
if (err) {
return err;
@@ -14855,11 +14855,11 @@ int lfsr_format(lfs_t *lfs, uint32_t flags,
#ifdef LFS_YES_CKFETCHES
flags |= LFS_F_CKFETCHES;
#endif
#ifdef LFS_YES_CKPARITY
flags |= LFS_F_CKPARITY;
#ifdef LFS_YES_CKMETAPARITY
flags |= LFS_F_CKMETAPARITY;
#endif
#ifdef LFS_YES_CKDATACKSUMS
flags |= LFS_F_CKDATACKSUMS;
#ifdef LFS_YES_CKDATACKSUMREADS
flags |= LFS_F_CKDATACKSUMREADS;
#endif
#ifdef LFS_YES_CKMETA
flags |= LFS_F_CKMETA;
@@ -14875,8 +14875,8 @@ int lfsr_format(lfs_t *lfs, uint32_t flags,
| LFS_IFDEF_REVNOISE(LFS_F_REVNOISE, 0)
| LFS_IFDEF_CKPROGS(LFS_F_CKPROGS, 0)
| LFS_IFDEF_CKFETCHES(LFS_F_CKFETCHES, 0)
| LFS_IFDEF_CKPARITY(LFS_F_CKPARITY, 0)
| LFS_IFDEF_CKDATACKSUMS(LFS_F_CKDATACKSUMS, 0)
| LFS_IFDEF_CKMETAPARITY(LFS_F_CKMETAPARITY, 0)
| LFS_IFDEF_CKDATACKSUMREADS(LFS_F_CKDATACKSUMREADS, 0)
| LFS_F_CKMETA
| LFS_F_CKDATA)) == 0);
@@ -14887,8 +14887,8 @@ int lfsr_format(lfs_t *lfs, uint32_t flags,
| LFS_IFDEF_REVNOISE(LFS_F_REVNOISE, 0)
| LFS_IFDEF_CKPROGS(LFS_F_CKPROGS, 0)
| LFS_IFDEF_CKFETCHES(LFS_F_CKFETCHES, 0)
| LFS_IFDEF_CKPARITY(LFS_F_CKPARITY, 0)
| LFS_IFDEF_CKDATACKSUMS(LFS_F_CKDATACKSUMS, 0)),
| LFS_IFDEF_CKMETAPARITY(LFS_F_CKMETAPARITY, 0)
| LFS_IFDEF_CKDATACKSUMREADS(LFS_F_CKDATACKSUMREADS, 0)),
cfg);
if (err) {
return err;
@@ -14948,8 +14948,8 @@ int lfsr_fs_stat(lfs_t *lfs, struct lfs_fsinfo *fsinfo) {
| LFS_IFDEF_REVNOISE(LFS_I_REVNOISE, 0)
| LFS_IFDEF_CKPROGS(LFS_I_CKPROGS, 0)
| LFS_IFDEF_CKFETCHES(LFS_I_CKFETCHES, 0)
| LFS_IFDEF_CKPARITY(LFS_I_CKPARITY, 0)
| LFS_IFDEF_CKDATACKSUMS(LFS_I_CKDATACKSUMS, 0)
| LFS_IFDEF_CKMETAPARITY(LFS_I_CKMETAPARITY, 0)
| LFS_IFDEF_CKDATACKSUMREADS(LFS_I_CKDATACKSUMREADS, 0)
| LFS_I_MKCONSISTENT
| LFS_I_LOOKAHEAD
| LFS_I_COMPACT
+19 -16
View File
@@ -178,11 +178,12 @@ enum lfs_type {
#ifdef LFS_CKFETCHES
#define LFS_F_CKFETCHES 0x00001000 // Check block checksums before first use
#endif
#ifdef LFS_CKPARITY
#define LFS_F_CKPARITY 0x00002000 // Check metadata tag parity bits
#ifdef LFS_CKMETAPARITY
#define LFS_F_CKMETAPARITY \
0x00002000 // Check metadata tag parity bits
#endif
#ifdef LFS_CKDATACKSUMS
#define LFS_F_CKDATACKSUMS \
#ifdef LFS_CKDATACKSUMREADS
#define LFS_F_CKDATACKSUMREADS \
0x00008000 // Check data checksums on reads
#endif
@@ -207,11 +208,12 @@ enum lfs_type {
#ifdef LFS_CKFETCHES
#define LFS_M_CKFETCHES 0x00001000 // Check block checksums before first use
#endif
#ifdef LFS_CKPARITY
#define LFS_M_CKPARITY 0x00002000 // Check metadata tag parity bits
#ifdef LFS_CKMETAPARITY
#define LFS_M_CKMETAPARITY \
0x00002000 // Check metadata tag parity bits
#endif
#ifdef LFS_CKDATACKSUMS
#define LFS_M_CKDATACKSUMS \
#ifdef LFS_CKDATACKSUMREADS
#define LFS_M_CKDATACKSUMREADS \
0x00008000 // Check data checksums on reads
#endif
@@ -238,12 +240,13 @@ enum lfs_type {
#ifdef LFS_CKFETCHES
#define LFS_I_CKFETCHES 0x00001000 // Mounted with LFS_M_CKFETCHES
#endif
#ifdef LFS_CKPARITY
#define LFS_I_CKPARITY 0x00002000 // Mounted with LFS_M_CKPARITY
#ifdef LFS_CKMETAPARITY
#define LFS_I_CKMETAPARITY \
0x00002000 // Mounted with LFS_M_CKMETAPARITY
#endif
#ifdef LFS_CKDATACKSUMS
#define LFS_I_CKDATACKSUMS \
0x00008000 // Mounted with LFS_M_CKDATACKSUMS
#ifdef LFS_CKDATACKSUMREADS
#define LFS_I_CKDATACKSUMREADS \
0x00008000 // Mounted with LFS_M_CKDATACKSUMREADS
#endif
#define LFS_I_MKCONSISTENT \
@@ -641,7 +644,7 @@ typedef struct lfsr_data {
struct {
lfs_block_t block;
lfs_size_t off;
#ifdef LFS_CKDATACKSUMS
#ifdef LFS_CKDATACKSUMREADS
// optional context for validating data
// sign(cksize)=0 => block not erased
// sign(cksize)=1 => block erased
@@ -658,7 +661,7 @@ typedef struct lfsr_bptr {
// sign2(size)=0b10 => on-disk data
// sign2(size)=0b11 => block pointer
lfsr_data_t data;
#ifndef LFS_CKDATACKSUMS
#ifndef LFS_CKDATACKSUMREADS
// sign(cksize)=0 => block not erased
// sign(cksize)=1 => block erased
lfs_size_t cksize;
@@ -871,7 +874,7 @@ typedef struct lfs {
uint8_t *buffer;
} pcache;
#ifdef LFS_CKPARITY
#ifdef LFS_CKMETAPARITY
struct {
lfs_block_t block;
// sign(off) => tail parity
+16 -16
View File
@@ -38,11 +38,11 @@
#ifndef LFS_CKFETCHES
#define LFS_CKFETCHES
#endif
#ifndef LFS_CKPARITY
#define LFS_CKPARITY
#ifndef LFS_CKMETAPARITY
#define LFS_CKMETAPARITY
#endif
#ifndef LFS_CKDATACKSUMS
#define LFS_CKDATACKSUMS
#ifndef LFS_CKDATACKSUMREADS
#define LFS_CKDATACKSUMREADS
#endif
#ifndef LFS_GC
#define LFS_GC
@@ -65,14 +65,14 @@
#ifdef LFS_YES_CKFETCHES
#define LFS_CKFETCHES
#endif
#ifdef LFS_YES_CKPARITY
#define LFS_CKPARITY
#ifdef LFS_YES_CKMETAPARITY
#define LFS_CKMETAPARITY
#endif
#ifdef LFS_YES_CKDATACKSUMS
#define LFS_CKDATACKSUMS
#ifdef LFS_YES_CKDATACKSUMREADS
#define LFS_CKDATACKSUMREADS
#endif
#ifdef LFS_YES_CKDATACKSUMS
#define LFS_CKDATACKSUMS
#ifdef LFS_YES_GC
#define LFS_GC
#endif
// LFS_NO_LOG disables all logging macros
@@ -240,16 +240,16 @@
#define LFS_IFDEF_CKFETCHES(a, b) (b)
#endif
#ifdef LFS_CKPARITY
#define LFS_IFDEF_CKPARITY(a, b) (a)
#ifdef LFS_CKMETAPARITY
#define LFS_IFDEF_CKMETAPARITY(a, b) (a)
#else
#define LFS_IFDEF_CKPARITY(a, b) (b)
#define LFS_IFDEF_CKMETAPARITY(a, b) (b)
#endif
#ifdef LFS_CKDATACKSUMS
#define LFS_IFDEF_CKDATACKSUMS(a, b) (a)
#ifdef LFS_CKDATACKSUMREADS
#define LFS_IFDEF_CKDATACKSUMREADS(a, b) (a)
#else
#define LFS_IFDEF_CKDATACKSUMS(a, b) (b)
#define LFS_IFDEF_CKDATACKSUMREADS(a, b) (b)
#endif
#ifdef LFS_GC
+10 -7
View File
@@ -65,8 +65,9 @@ FLAGS = [
('F', 'REVNOISE', 0x00000020, "Add noise to revision counts" ),
('F', 'CKPROGS', 0x00000800, "Check progs by reading back progged data" ),
('F', 'CKFETCHES', 0x00001000, "Check block checksums before first use" ),
('F', 'CKPARITY', 0x00002000, "Check metadata tag parity bits" ),
('F', 'CKDATACKSUMS',
('F', 'CKMETAPARITY',
0x00002000, "Check metadata tag parity bits" ),
('F', 'CKDATACKSUMREADS',
0x00008000, "Check data checksums on reads" ),
('F', 'CKMETA', 0x00100000, "Check metadata checksums" ),
@@ -82,8 +83,9 @@ FLAGS = [
('M', 'REVNOISE', 0x00000020, "Add noise to revision counts" ),
('M', 'CKPROGS', 0x00000800, "Check progs by reading back progged data" ),
('M', 'CKFETCHES', 0x00001000, "Check block checksums before first use" ),
('M', 'CKPARITY', 0x00002000, "Check metadata tag parity bits" ),
('M', 'CKDATACKSUMS',
('M', 'CKMETAPARITY',
0x00002000, "Check metadata tag parity bits" ),
('M', 'CKDATACKSUMREADS',
0x00008000, "Check data checksums on reads" ),
('M', 'MKCONSISTENT',
@@ -109,9 +111,10 @@ FLAGS = [
('I', 'REVNOISE', 0x00000020, "Mounted with LFS_M_REVNOISE" ),
('I', 'CKPROGS', 0x00000800, "Mounted with LFS_M_CKPROGS" ),
('I', 'CKFETCHES', 0x00001000, "Mounted with LFS_M_CKFETCHES" ),
('I', 'CKPARITY', 0x00002000, "Mounted with LFS_M_CKPARITY" ),
('I', 'CKDATACKSUMS',
0x00008000, "Mounted with LFS_M_CKDATACKSUMS" ),
('I', 'CKMETAPARITY',
0x00002000, "Mounted with LFS_M_CKMETAPARITY" ),
('I', 'CKDATACKSUMREADS',
0x00008000, "Mounted with LFS_M_CKDATACKSUMREADS" ),
('I', 'MKCONSISTENT',
0x00010000, "Filesystem needs mkconsistent to write" ),
+105 -78
View File
@@ -2313,7 +2313,7 @@ defines.BADBLOCK_BEHAVIOR = [
]
# this should stay inlined
defines.SIZE = 'BLOCK_SIZE/16'
ifdef = 'LFS_CKPARITY'
ifdef = 'LFS_CKMETAPARITY'
code = '''
// test all bad bits in the mroot
for (lfs_size_t i = 0;
@@ -2342,12 +2342,12 @@ code = '''
// format
lfs_t lfs;
int err = lfsr_format(&lfs, LFS_M_RDWR | LFS_M_CKPARITY, CFG);
int err = lfsr_format(&lfs, LFS_M_RDWR | LFS_M_CKMETAPARITY, CFG);
assert(!err || err == LFS_ERR_CORRUPT);
if (err == LFS_ERR_CORRUPT) {
goto corrupt;
}
err = lfsr_mount(&lfs, LFS_M_RDWR | LFS_M_CKPARITY, CFG);
err = lfsr_mount(&lfs, LFS_M_RDWR | LFS_M_CKMETAPARITY, CFG);
assert(!err || err == LFS_ERR_CORRUPT);
if (err == LFS_ERR_CORRUPT) {
goto corrupt;
@@ -2383,7 +2383,8 @@ code = '''
// remount?
if (remount) {
lfsr_unmount(&lfs) => 0;
err = lfsr_mount(&lfs, LFS_M_RDWR | LFS_M_CKPARITY, CFG);
err = lfsr_mount(&lfs,
LFS_M_RDWR | LFS_M_CKMETAPARITY, CFG);
if (err == LFS_ERR_CORRUPT) {
goto corrupt;
}
@@ -2433,7 +2434,7 @@ defines.INLINE_SIZE = 0
defines.CRYSTAL_THRESH = -1
defines.FRAGMENT_SIZE = 'BLOCK_SIZE/8'
defines.SIZE = '2*FRAGMENT_SIZE'
ifdef = 'LFS_CKPARITY'
ifdef = 'LFS_CKMETAPARITY'
code = '''
// first we need to figure out where the btree block will actually
// end up, fortunately our block randomization is intentionally
@@ -2441,8 +2442,8 @@ code = '''
// format
lfs_t lfs;
lfsr_format(&lfs, LFS_F_RDWR | LFS_F_CKPARITY, CFG) => 0;
lfsr_mount(&lfs, LFS_M_RDWR | LFS_M_CKPARITY, CFG) => 0;
lfsr_format(&lfs, LFS_F_RDWR | LFS_F_CKMETAPARITY, CFG) => 0;
lfsr_mount(&lfs, LFS_M_RDWR | LFS_M_CKMETAPARITY, CFG) => 0;
// create a file
lfsr_file_t file;
@@ -2499,8 +2500,8 @@ code = '''
// format
lfs_t lfs;
lfsr_format(&lfs, LFS_F_RDWR | LFS_F_CKPARITY, CFG) => 0;
lfsr_mount(&lfs, LFS_M_RDWR | LFS_M_CKPARITY, CFG) => 0;
lfsr_format(&lfs, LFS_F_RDWR | LFS_F_CKMETAPARITY, CFG) => 0;
lfsr_mount(&lfs, LFS_M_RDWR | LFS_M_CKMETAPARITY, CFG) => 0;
{
// create a file
@@ -2528,7 +2529,7 @@ code = '''
// remount?
if (remount) {
lfsr_unmount(&lfs) => 0;
lfsr_mount(&lfs, LFS_M_RDWR | LFS_M_CKPARITY, CFG) => 0;
lfsr_mount(&lfs, LFS_M_RDWR | LFS_M_CKMETAPARITY, CFG) => 0;
}
// yes reads can fail here
@@ -2575,7 +2576,7 @@ defines.BADBLOCK_BEHAVIOR = [
]
# this should create a single block file
defines.SIZE = 'BLOCK_SIZE'
ifdef = 'LFS_CKDATACKSUMS'
ifdef = 'LFS_CKDATACKSUMREADS'
code = '''
// first we need to figure out where the data block will actually
// end up, fortunately our block randomization is intentionally
@@ -2583,8 +2584,8 @@ code = '''
// format
lfs_t lfs;
lfsr_format(&lfs, LFS_F_RDWR | LFS_F_CKDATACKSUMS, CFG) => 0;
lfsr_mount(&lfs, LFS_M_RDWR | LFS_M_CKDATACKSUMS, CFG) => 0;
lfsr_format(&lfs, LFS_F_RDWR | LFS_F_CKDATACKSUMREADS, CFG) => 0;
lfsr_mount(&lfs, LFS_M_RDWR | LFS_M_CKDATACKSUMREADS, CFG) => 0;
// create a file
lfsr_file_t file;
@@ -2634,8 +2635,8 @@ code = '''
// format
lfs_t lfs;
lfsr_format(&lfs, LFS_F_RDWR | LFS_F_CKDATACKSUMS, CFG) => 0;
lfsr_mount(&lfs, LFS_M_RDWR | LFS_M_CKDATACKSUMS, CFG) => 0;
lfsr_format(&lfs, LFS_F_RDWR | LFS_F_CKDATACKSUMREADS, CFG) => 0;
lfsr_mount(&lfs, LFS_M_RDWR | LFS_M_CKDATACKSUMREADS, CFG) => 0;
{
// create a file
@@ -2664,7 +2665,7 @@ code = '''
if (remount) {
lfsr_unmount(&lfs) => 0;
lfsr_mount(&lfs,
LFS_M_RDWR | LFS_M_CKDATACKSUMS,
LFS_M_RDWR | LFS_M_CKDATACKSUMREADS,
CFG) => 0;
}
@@ -2734,16 +2735,16 @@ defines.CKDATA = 'METHOD == 1'
defines.MTREEONLY = 'METHOD == 2'
defines.CKPROGS = 'METHOD == 0'
defines.CKFETCHES = 'METHOD == 2'
defines.CKPARITY = false
defines.CKDATACKSUMS = 'METHOD == 3'
defines.CKMETAPARITY = false
defines.CKDATACKSUMREADS = 'METHOD == 3'
defines.N = [1, 2, 4, 8, 16, 32, 64, 128, 256]
defines.SEED = 'range(10)'
fuzz = 'SEED'
if = [
'LFS_IFDEF_CKPROGS(true, !CKPROGS)',
'LFS_IFDEF_CKFETCHES(true, !CKFETCHES)',
'LFS_IFDEF_CKPARITY(true, !CKPARITY)',
'LFS_IFDEF_CKDATACKSUMS(true, !CKDATACKSUMS)',
'LFS_IFDEF_CKMETAPARITY(true, !CKMETAPARITY)',
'LFS_IFDEF_CKDATACKSUMREADS(true, !CKDATACKSUMREADS)',
]
code = '''
// seed our block device with our seed so we have different error
@@ -2764,18 +2765,22 @@ code = '''
LFS_F_RDWR
| ((CKPROGS) ? LFS_IFDEF_CKPROGS(LFS_F_CKPROGS, -1) : 0)
| ((CKFETCHES) ? LFS_IFDEF_CKFETCHES(LFS_F_CKFETCHES, -1) : 0)
| ((CKPARITY) ? LFS_IFDEF_CKPARITY(LFS_F_CKPARITY, -1) : 0)
| ((CKDATACKSUMS)
? LFS_IFDEF_CKDATACKSUMS(LFS_F_CKDATACKSUMS, -1)
| ((CKMETAPARITY)
? LFS_IFDEF_CKMETAPARITY(LFS_F_CKMETAPARITY, -1)
: 0)
| ((CKDATACKSUMREADS)
? LFS_IFDEF_CKDATACKSUMREADS(LFS_F_CKDATACKSUMREADS, -1)
: 0),
CFG) => 0;
lfsr_mount(&lfs,
LFS_M_RDWR
| ((CKPROGS) ? LFS_IFDEF_CKPROGS(LFS_M_CKPROGS, -1) : 0)
| ((CKFETCHES) ? LFS_IFDEF_CKFETCHES(LFS_M_CKFETCHES, -1) : 0)
| ((CKPARITY) ? LFS_IFDEF_CKPARITY(LFS_M_CKPARITY, -1) : 0)
| ((CKDATACKSUMS)
? LFS_IFDEF_CKDATACKSUMS(LFS_M_CKDATACKSUMS, -1)
| ((CKMETAPARITY)
? LFS_IFDEF_CKMETAPARITY(LFS_M_CKMETAPARITY, -1)
: 0)
| ((CKDATACKSUMREADS)
? LFS_IFDEF_CKDATACKSUMREADS(LFS_M_CKDATACKSUMREADS, -1)
: 0),
CFG) => 0;
@@ -2954,11 +2959,13 @@ code = '''
| ((CKFETCHES)
? LFS_IFDEF_CKFETCHES(LFS_M_CKFETCHES, -1)
: 0)
| ((CKPARITY)
? LFS_IFDEF_CKPARITY(LFS_M_CKPARITY, -1)
| ((CKMETAPARITY)
? LFS_IFDEF_CKMETAPARITY(LFS_M_CKMETAPARITY, -1)
: 0)
| ((CKDATACKSUMS)
? LFS_IFDEF_CKDATACKSUMS(LFS_M_CKDATACKSUMS, -1)
| ((CKDATACKSUMREADS)
? LFS_IFDEF_CKDATACKSUMREADS(
LFS_M_CKDATACKSUMREADS,
-1)
: 0),
CFG) => 0;
}
@@ -3035,8 +3042,8 @@ defines.CKDATA = 'METHOD == 1'
defines.MTREEONLY = 'METHOD == 2'
defines.CKPROGS = 'METHOD == 0'
defines.CKFETCHES = 'METHOD == 2'
defines.CKPARITY = false
defines.CKDATACKSUMS = 'METHOD == 3'
defines.CKMETAPARITY = false
defines.CKDATACKSUMREADS = 'METHOD == 3'
defines.N = [1, 2, 4, 8, 16, 32, 64]
defines.SIZE = [
'0',
@@ -3052,8 +3059,8 @@ fuzz = 'SEED'
if = [
'LFS_IFDEF_CKPROGS(true, !CKPROGS)',
'LFS_IFDEF_CKFETCHES(true, !CKFETCHES)',
'LFS_IFDEF_CKPARITY(true, !CKPARITY)',
'LFS_IFDEF_CKDATACKSUMS(true, !CKDATACKSUMS)',
'LFS_IFDEF_CKMETAPARITY(true, !CKMETAPARITY)',
'LFS_IFDEF_CKDATACKSUMREADS(true, !CKDATACKSUMREADS)',
'(SIZE*N)/BLOCK_SIZE <= 16',
]
code = '''
@@ -3075,18 +3082,22 @@ code = '''
LFS_F_RDWR
| ((CKPROGS) ? LFS_IFDEF_CKPROGS(LFS_F_CKPROGS, -1) : 0)
| ((CKFETCHES) ? LFS_IFDEF_CKFETCHES(LFS_F_CKFETCHES, -1) : 0)
| ((CKPARITY) ? LFS_IFDEF_CKPARITY(LFS_F_CKPARITY, -1) : 0)
| ((CKDATACKSUMS)
? LFS_IFDEF_CKDATACKSUMS(LFS_F_CKDATACKSUMS, -1)
| ((CKMETAPARITY)
? LFS_IFDEF_CKMETAPARITY(LFS_F_CKMETAPARITY, -1)
: 0)
| ((CKDATACKSUMREADS)
? LFS_IFDEF_CKDATACKSUMREADS(LFS_F_CKDATACKSUMREADS, -1)
: 0),
CFG) => 0;
lfsr_mount(&lfs,
LFS_M_RDWR
| ((CKPROGS) ? LFS_IFDEF_CKPROGS(LFS_M_CKPROGS, -1) : 0)
| ((CKFETCHES) ? LFS_IFDEF_CKFETCHES(LFS_M_CKFETCHES, -1) : 0)
| ((CKPARITY) ? LFS_IFDEF_CKPARITY(LFS_M_CKPARITY, -1) : 0)
| ((CKDATACKSUMS)
? LFS_IFDEF_CKDATACKSUMS(LFS_M_CKDATACKSUMS, -1)
| ((CKMETAPARITY)
? LFS_IFDEF_CKMETAPARITY(LFS_M_CKMETAPARITY, -1)
: 0)
| ((CKDATACKSUMREADS)
? LFS_IFDEF_CKDATACKSUMREADS(LFS_M_CKDATACKSUMREADS, -1)
: 0),
CFG) => 0;
@@ -3312,11 +3323,13 @@ code = '''
| ((CKFETCHES)
? LFS_IFDEF_CKFETCHES(LFS_M_CKFETCHES, -1)
: 0)
| ((CKPARITY)
? LFS_IFDEF_CKPARITY(LFS_M_CKPARITY, -1)
| ((CKMETAPARITY)
? LFS_IFDEF_CKMETAPARITY(LFS_M_CKMETAPARITY, -1)
: 0)
| ((CKDATACKSUMS)
? LFS_IFDEF_CKDATACKSUMS(LFS_M_CKDATACKSUMS, -1)
| ((CKDATACKSUMREADS)
? LFS_IFDEF_CKDATACKSUMREADS(
LFS_M_CKDATACKSUMREADS,
-1)
: 0),
CFG) => 0;
}
@@ -3416,8 +3429,8 @@ defines.CKDATA = 'METHOD == 1'
defines.MTREEONLY = false
defines.CKPROGS = 'METHOD == 0'
defines.CKFETCHES = 'METHOD == 2'
defines.CKPARITY = false
defines.CKDATACKSUMS = 'METHOD == 3'
defines.CKMETAPARITY = false
defines.CKDATACKSUMREADS = 'METHOD == 3'
defines.SIZE = [
'FILE_CACHE_SIZE/2',
'2*FILE_CACHE_SIZE',
@@ -3438,8 +3451,8 @@ fuzz = 'SEED'
if = [
'LFS_IFDEF_CKPROGS(true, !CKPROGS)',
'LFS_IFDEF_CKFETCHES(true, !CKFETCHES)',
'LFS_IFDEF_CKPARITY(true, !CKPARITY)',
'LFS_IFDEF_CKDATACKSUMS(true, !CKDATACKSUMS)',
'LFS_IFDEF_CKMETAPARITY(true, !CKMETAPARITY)',
'LFS_IFDEF_CKDATACKSUMREADS(true, !CKDATACKSUMREADS)',
'CHUNK <= SIZE',
# this just saves testing time
'SIZE <= 4*1024*FRAGMENT_SIZE',
@@ -3463,18 +3476,22 @@ code = '''
LFS_F_RDWR
| ((CKPROGS) ? LFS_IFDEF_CKPROGS(LFS_F_CKPROGS, -1) : 0)
| ((CKFETCHES) ? LFS_IFDEF_CKFETCHES(LFS_F_CKFETCHES, -1) : 0)
| ((CKPARITY) ? LFS_IFDEF_CKPARITY(LFS_F_CKPARITY, -1) : 0)
| ((CKDATACKSUMS)
? LFS_IFDEF_CKDATACKSUMS(LFS_F_CKDATACKSUMS, -1)
| ((CKMETAPARITY)
? LFS_IFDEF_CKMETAPARITY(LFS_F_CKMETAPARITY, -1)
: 0)
| ((CKDATACKSUMREADS)
? LFS_IFDEF_CKDATACKSUMREADS(LFS_F_CKDATACKSUMREADS, -1)
: 0),
CFG) => 0;
lfsr_mount(&lfs,
LFS_M_RDWR
| ((CKPROGS) ? LFS_IFDEF_CKPROGS(LFS_M_CKPROGS, -1) : 0)
| ((CKFETCHES) ? LFS_IFDEF_CKFETCHES(LFS_M_CKFETCHES, -1) : 0)
| ((CKPARITY) ? LFS_IFDEF_CKPARITY(LFS_M_CKPARITY, -1) : 0)
| ((CKDATACKSUMS)
? LFS_IFDEF_CKDATACKSUMS(LFS_M_CKDATACKSUMS, -1)
| ((CKMETAPARITY)
? LFS_IFDEF_CKMETAPARITY(LFS_M_CKMETAPARITY, -1)
: 0)
| ((CKDATACKSUMREADS)
? LFS_IFDEF_CKDATACKSUMREADS(LFS_M_CKDATACKSUMREADS, -1)
: 0),
CFG) => 0;
@@ -3627,11 +3644,13 @@ code = '''
| ((CKFETCHES)
? LFS_IFDEF_CKFETCHES(LFS_M_CKFETCHES, -1)
: 0)
| ((CKPARITY)
? LFS_IFDEF_CKPARITY(LFS_M_CKPARITY, -1)
| ((CKMETAPARITY)
? LFS_IFDEF_CKMETAPARITY(LFS_M_CKMETAPARITY, -1)
: 0)
| ((CKDATACKSUMS)
? LFS_IFDEF_CKDATACKSUMS(LFS_M_CKDATACKSUMS, -1)
| ((CKDATACKSUMREADS)
? LFS_IFDEF_CKDATACKSUMREADS(
LFS_M_CKDATACKSUMREADS,
-1)
: 0),
CFG) => 0;
}
@@ -3711,8 +3730,8 @@ defines.CKDATA = 'METHOD == 1'
defines.MTREEONLY = false
defines.CKPROGS = 'METHOD == 0'
defines.CKFETCHES = 'METHOD == 2'
defines.CKPARITY = false
defines.CKDATACKSUMS = 'METHOD == 3'
defines.CKMETAPARITY = false
defines.CKDATACKSUMREADS = 'METHOD == 3'
defines.N = [1, 2, 4, 8, 16, 32, 64]
defines.SIZE = [
'0',
@@ -3728,8 +3747,8 @@ fuzz = 'SEED'
if = [
'LFS_IFDEF_CKPROGS(true, !CKPROGS)',
'LFS_IFDEF_CKFETCHES(true, !CKFETCHES)',
'LFS_IFDEF_CKPARITY(true, !CKPARITY)',
'LFS_IFDEF_CKDATACKSUMS(true, !CKDATACKSUMS)',
'LFS_IFDEF_CKMETAPARITY(true, !CKMETAPARITY)',
'LFS_IFDEF_CKDATACKSUMREADS(true, !CKDATACKSUMREADS)',
'(SIZE*N)/BLOCK_SIZE <= 16',
]
code = '''
@@ -3751,18 +3770,22 @@ code = '''
LFS_F_RDWR
| ((CKPROGS) ? LFS_IFDEF_CKPROGS(LFS_F_CKPROGS, -1) : 0)
| ((CKFETCHES) ? LFS_IFDEF_CKFETCHES(LFS_F_CKFETCHES, -1) : 0)
| ((CKPARITY) ? LFS_IFDEF_CKPARITY(LFS_F_CKPARITY, -1) : 0)
| ((CKDATACKSUMS)
? LFS_IFDEF_CKDATACKSUMS(LFS_F_CKDATACKSUMS, -1)
| ((CKMETAPARITY)
? LFS_IFDEF_CKMETAPARITY(LFS_F_CKMETAPARITY, -1)
: 0)
| ((CKDATACKSUMREADS)
? LFS_IFDEF_CKDATACKSUMREADS(LFS_F_CKDATACKSUMREADS, -1)
: 0),
CFG) => 0;
lfsr_mount(&lfs,
LFS_M_RDWR
| ((CKPROGS) ? LFS_IFDEF_CKPROGS(LFS_M_CKPROGS, -1) : 0)
| ((CKFETCHES) ? LFS_IFDEF_CKFETCHES(LFS_M_CKFETCHES, -1) : 0)
| ((CKPARITY) ? LFS_IFDEF_CKPARITY(LFS_M_CKPARITY, -1) : 0)
| ((CKDATACKSUMS)
? LFS_IFDEF_CKDATACKSUMS(LFS_M_CKDATACKSUMS, -1)
| ((CKMETAPARITY)
? LFS_IFDEF_CKMETAPARITY(LFS_M_CKMETAPARITY, -1)
: 0)
| ((CKDATACKSUMREADS)
? LFS_IFDEF_CKDATACKSUMREADS(LFS_M_CKDATACKSUMREADS, -1)
: 0),
CFG) => 0;
@@ -4306,8 +4329,8 @@ defines.CKDATA = 'METHOD == 1'
defines.MTREEONLY = false
defines.CKPROGS = 'METHOD == 0'
defines.CKFETCHES = 'METHOD == 2'
defines.CKPARITY = false
defines.CKDATACKSUMS = 'METHOD == 3'
defines.CKMETAPARITY = false
defines.CKDATACKSUMREADS = 'METHOD == 3'
defines.N = [1, 2, 4, 8, 16, 32, 64]
defines.SIZE = [
'0',
@@ -4323,8 +4346,8 @@ fuzz = 'SEED'
if = [
'LFS_IFDEF_CKPROGS(true, !CKPROGS)',
'LFS_IFDEF_CKFETCHES(true, !CKFETCHES)',
'LFS_IFDEF_CKPARITY(true, !CKPARITY)',
'LFS_IFDEF_CKDATACKSUMS(true, !CKDATACKSUMS)',
'LFS_IFDEF_CKMETAPARITY(true, !CKMETAPARITY)',
'LFS_IFDEF_CKDATACKSUMREADS(true, !CKDATACKSUMREADS)',
'(SIZE*N)/BLOCK_SIZE <= 16',
]
code = '''
@@ -4346,18 +4369,22 @@ code = '''
LFS_F_RDWR
| ((CKPROGS) ? LFS_IFDEF_CKPROGS(LFS_F_CKPROGS, -1) : 0)
| ((CKFETCHES) ? LFS_IFDEF_CKFETCHES(LFS_F_CKFETCHES, -1) : 0)
| ((CKPARITY) ? LFS_IFDEF_CKPARITY(LFS_F_CKPARITY, -1) : 0)
| ((CKDATACKSUMS)
? LFS_IFDEF_CKDATACKSUMS(LFS_F_CKDATACKSUMS, -1)
| ((CKMETAPARITY)
? LFS_IFDEF_CKMETAPARITY(LFS_F_CKMETAPARITY, -1)
: 0)
| ((CKDATACKSUMREADS)
? LFS_IFDEF_CKDATACKSUMREADS(LFS_F_CKDATACKSUMREADS, -1)
: 0),
CFG) => 0;
lfsr_mount(&lfs,
LFS_M_RDWR
| ((CKPROGS) ? LFS_IFDEF_CKPROGS(LFS_M_CKPROGS, -1) : 0)
| ((CKFETCHES) ? LFS_IFDEF_CKFETCHES(LFS_M_CKFETCHES, -1) : 0)
| ((CKPARITY) ? LFS_IFDEF_CKPARITY(LFS_M_CKPARITY, -1) : 0)
| ((CKDATACKSUMS)
? LFS_IFDEF_CKDATACKSUMS(LFS_M_CKDATACKSUMS, -1)
| ((CKMETAPARITY)
? LFS_IFDEF_CKMETAPARITY(LFS_M_CKMETAPARITY, -1)
: 0)
| ((CKDATACKSUMREADS)
? LFS_IFDEF_CKDATACKSUMREADS(LFS_M_CKDATACKSUMREADS, -1)
: 0),
CFG) => 0;
+23 -17
View File
@@ -21,8 +21,8 @@ defines.REVDBG = [false, true]
defines.REVNOISE = [false, true]
defines.CKPROGS = [false, true]
defines.CKFETCHES = [false, true]
defines.CKPARITY = [false, true]
defines.CKDATACKSUMS = [false, true]
defines.CKMETAPARITY = [false, true]
defines.CKDATACKSUMREADS = [false, true]
defines.MKCONSISTENT = [false, true]
defines.LOOKAHEAD = [false, true]
defines.COMPACT = [false, true]
@@ -34,8 +34,8 @@ if = [
'!REVDBG || !REVNOISE',
'LFS_IFDEF_CKPROGS(true, !CKPROGS)',
'LFS_IFDEF_CKFETCHES(true, !CKFETCHES)',
'LFS_IFDEF_CKPARITY(true, !CKPARITY)',
'LFS_IFDEF_CKDATACKSUMS(true, !CKDATACKSUMS)',
'LFS_IFDEF_CKMETAPARITY(true, !CKMETAPARITY)',
'LFS_IFDEF_CKDATACKSUMREADS(true, !CKDATACKSUMREADS)',
'!RDONLY || !MKCONSISTENT',
'!RDONLY || !LOOKAHEAD',
'!RDONLY || !COMPACT',
@@ -51,9 +51,11 @@ code = '''
| ((REVNOISE) ? LFS_IFDEF_REVNOISE(LFS_M_REVNOISE, -1) : 0)
| ((CKPROGS) ? LFS_IFDEF_CKPROGS(LFS_M_CKPROGS, -1) : 0)
| ((CKFETCHES) ? LFS_IFDEF_CKFETCHES(LFS_M_CKFETCHES, -1) : 0)
| ((CKPARITY) ? LFS_IFDEF_CKPARITY(LFS_M_CKPARITY, -1) : 0)
| ((CKDATACKSUMS)
? LFS_IFDEF_CKDATACKSUMS(LFS_M_CKDATACKSUMS, -1)
| ((CKMETAPARITY)
? LFS_IFDEF_CKMETAPARITY(LFS_M_CKMETAPARITY, -1)
: 0)
| ((CKDATACKSUMREADS)
? LFS_IFDEF_CKDATACKSUMREADS(LFS_M_CKDATACKSUMREADS, -1)
: 0)
| ((MKCONSISTENT) ? LFS_M_MKCONSISTENT : 0)
| ((LOOKAHEAD) ? LFS_M_LOOKAHEAD : 0)
@@ -73,9 +75,11 @@ code = '''
| ((REVNOISE) ? LFS_IFDEF_REVNOISE(LFS_M_REVNOISE, -1) : 0)
| ((CKPROGS) ? LFS_IFDEF_CKPROGS(LFS_I_CKPROGS, -1) : 0)
| ((CKFETCHES) ? LFS_IFDEF_CKFETCHES(LFS_I_CKFETCHES, -1) : 0)
| ((CKPARITY) ? LFS_IFDEF_CKPARITY(LFS_I_CKPARITY, -1) : 0)
| ((CKDATACKSUMS)
? LFS_IFDEF_CKDATACKSUMS(LFS_I_CKDATACKSUMS, -1)
| ((CKMETAPARITY)
? LFS_IFDEF_CKMETAPARITY(LFS_I_CKMETAPARITY, -1)
: 0)
| ((CKDATACKSUMREADS)
? LFS_IFDEF_CKDATACKSUMREADS(LFS_I_CKDATACKSUMREADS, -1)
: 0)
| ((!MKCONSISTENT) ? LFS_I_MKCONSISTENT : 0)
| ((!LOOKAHEAD) ? LFS_I_LOOKAHEAD : 0)
@@ -95,8 +99,8 @@ defines.REVDBG = [false, true]
defines.REVNOISE = [false, true]
defines.CKPROGS = [false, true]
defines.CKFETCHES = [false, true]
defines.CKPARITY = [false, true]
defines.CKDATACKSUMS = [false, true]
defines.CKMETAPARITY = [false, true]
defines.CKDATACKSUMREADS = [false, true]
defines.CKMETA = [false, true]
defines.CKDATA = [false, true]
if = [
@@ -105,8 +109,8 @@ if = [
'!REVDBG || !REVNOISE',
'LFS_IFDEF_CKPROGS(true, !CKPROGS)',
'LFS_IFDEF_CKFETCHES(true, !CKFETCHES)',
'LFS_IFDEF_CKPARITY(true, !CKPARITY)',
'LFS_IFDEF_CKDATACKSUMS(true, !CKDATACKSUMS)',
'LFS_IFDEF_CKMETAPARITY(true, !CKMETAPARITY)',
'LFS_IFDEF_CKDATACKSUMREADS(true, !CKDATACKSUMREADS)',
]
code = '''
lfs_t lfs;
@@ -116,9 +120,11 @@ code = '''
| ((REVNOISE) ? LFS_IFDEF_REVNOISE(LFS_F_REVNOISE, -1) : 0)
| ((CKPROGS) ? LFS_IFDEF_CKPROGS(LFS_F_CKPROGS, -1) : 0)
| ((CKFETCHES) ? LFS_IFDEF_CKFETCHES(LFS_F_CKFETCHES, -1) : 0)
| ((CKPARITY) ? LFS_IFDEF_CKPARITY(LFS_F_CKPARITY, -1) : 0)
| ((CKDATACKSUMS)
? LFS_IFDEF_CKDATACKSUMS(LFS_F_CKDATACKSUMS, -1)
| ((CKMETAPARITY)
? LFS_IFDEF_CKMETAPARITY(LFS_F_CKMETAPARITY, -1)
: 0)
| ((CKDATACKSUMREADS)
? LFS_IFDEF_CKDATACKSUMREADS(LFS_F_CKDATACKSUMREADS, -1)
: 0)
| ((CKMETA) ? LFS_F_CKMETA : 0)
| ((CKDATA) ? LFS_F_CKDATA : 0),