From 9acf6a08b129c0ab5898f37e61cf1e8e76e0d2c1 Mon Sep 17 00:00:00 2001 From: Christopher Haster Date: Tue, 26 Nov 2019 13:59:45 -0600 Subject: [PATCH] Stop wear-leveling during migration Stop proactively relocate blocks during migrations, this can cause a number of failure states such: clobbering the v1 superblock if we relocate root, and invalidating directory pointers if we relocate the head of a directory. On top of this, relocations increase the overall complexity of lfs_migration, which is already a delicate operation. --- lfs.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/lfs.c b/lfs.c index e71faff..a2c29de 100644 --- a/lfs.c +++ b/lfs.c @@ -1503,9 +1503,13 @@ static int lfs_dir_compact(lfs_t *lfs, } } #ifdef LFS_MIGRATE - } else if (lfs_pair_cmp(dir->pair, lfs->root) == 0 && lfs->lfs1) { - // we can't relocate our root during migrations, as this would - // cause the superblock to get updated, which would clobber v1 + } else if (lfs->lfs1) { + // do not proactively relocate blocks during migrations, this + // can cause a number of failure states such: clobbering the + // v1 superblock if we relocate root, and invalidating directory + // pointers if we relocate the head of a directory. On top of + // this, relocations increase the overall complexity of + // lfs_migration, which is already a delicate operation. #endif } else { // we're writing too much, time to relocate