diff --git a/kmod/src/btree.c b/kmod/src/btree.c index 7a21afc7..caabc065 100644 --- a/kmod/src/btree.c +++ b/kmod/src/btree.c @@ -2486,6 +2486,14 @@ int scoutfs_btree_merge(struct super_block *sb, mitem = next_mitem(mitem); free_mitem(&rng, tmp); } + + if (mitem && walk_val_len == 0 && + !(walk_flags & (BTW_INSERT | BTW_DELETE)) && + scoutfs_trigger(sb, LOG_MERGE_FORCE_PARTIAL)) { + ret = -ERANGE; + *next_ret = mitem->key; + goto out; + } } ret = 0; diff --git a/kmod/src/triggers.c b/kmod/src/triggers.c index 4616d013..15ddf907 100644 --- a/kmod/src/triggers.c +++ b/kmod/src/triggers.c @@ -46,6 +46,7 @@ static char *names[] = { [SCOUTFS_TRIGGER_SRCH_MERGE_STOP_SAFE] = "srch_merge_stop_safe", [SCOUTFS_TRIGGER_STATFS_LOCK_PURGE] = "statfs_lock_purge", [SCOUTFS_TRIGGER_RECLAIM_SKIP_FINALIZE] = "reclaim_skip_finalize", + [SCOUTFS_TRIGGER_LOG_MERGE_FORCE_PARTIAL] = "log_merge_force_partial", }; bool scoutfs_trigger_test_and_clear(struct super_block *sb, unsigned int t) diff --git a/kmod/src/triggers.h b/kmod/src/triggers.h index 64a798b7..6d70cbea 100644 --- a/kmod/src/triggers.h +++ b/kmod/src/triggers.h @@ -9,6 +9,7 @@ enum scoutfs_trigger { SCOUTFS_TRIGGER_SRCH_MERGE_STOP_SAFE, SCOUTFS_TRIGGER_STATFS_LOCK_PURGE, SCOUTFS_TRIGGER_RECLAIM_SKIP_FINALIZE, + SCOUTFS_TRIGGER_LOG_MERGE_FORCE_PARTIAL, SCOUTFS_TRIGGER_NR, };