extern int hammer_verify_data;
extern int hammer_write_mode;
extern int hammer_double_buffer;
+extern int hammer_btree_full_undo;
extern int hammer_yield_check;
extern int hammer_fsync_mode;
extern int hammer_autoflush;
(char *)base + len <=
(char *)node->ondisk + sizeof(*node->ondisk));
KKASSERT((node->flags & HAMMER_NODE_CRCBAD) == 0);
- hammer_modify_buffer(trans, node->buffer, base, len);
- crcptr = &node->ondisk->crc;
- hammer_modify_buffer(trans, node->buffer, crcptr, sizeof(hammer_crc_t));
- --node->buffer->io.modify_refs; /* only want one ref */
+
+ if (hammer_btree_full_undo) {
+ hammer_modify_node_all(trans, node);
+ } else {
+ hammer_modify_buffer(trans, node->buffer, base, len);
+ crcptr = &node->ondisk->crc;
+ hammer_modify_buffer(trans, node->buffer,
+ crcptr, sizeof(hammer_crc_t));
+ --node->buffer->io.modify_refs; /* only want one ref */
+ }
}
/*
int hammer_verify_data = 1;
int hammer_write_mode;
int hammer_double_buffer;
+int hammer_btree_full_undo = 1;
int hammer_yield_check = 16;
int hammer_fsync_mode = 3;
int64_t hammer_contention_count;
* 0 - live dedup is disabled
* 1 - dedup cache is populated on reads only
* 2 - dedup cache is populated on both reads and writes
+ *
+ * LIVE_DEDUP IS DISABLED PERMANENTLY! This feature appears to cause
+ * blockmap corruption over time so we've turned it off permanently.
*/
SYSCTL_INT(_vfs_hammer, OID_AUTO, live_dedup, CTLFLAG_RD,
&hammer_live_dedup, 0, "Enable live dedup (experimental)");
&hammer_write_mode, 0, "");
SYSCTL_INT(_vfs_hammer, OID_AUTO, double_buffer, CTLFLAG_RW,
&hammer_double_buffer, 0, "");
+SYSCTL_INT(_vfs_hammer, OID_AUTO, btree_full_undo, CTLFLAG_RW,
+ &hammer_btree_full_undo, 0, "");
SYSCTL_INT(_vfs_hammer, OID_AUTO, yield_check, CTLFLAG_RW,
&hammer_yield_check, 0, "");
SYSCTL_INT(_vfs_hammer, OID_AUTO, fsync_mode, CTLFLAG_RW,