undo
struct undo *sunptr;
struct undo *sunptr;
int64_t undo;
if (libhammer_stats_undo(&iostats->undo) < 0)
(uintmax_t)head->undo.undo_offset,
head->undo.undo_data_bytes);
_sysctl(_HAMMER"undo", &p->undo);
(intmax_t)(p1->undo - p2->undo),
int64_t undo;
struct jattr *undo;
struct jattr *undo;
if ((undo = jattr->undo) != NULL)
jattr_reset(jattr->undo);
jattr->undo = undo;
struct undo *sunptr;
struct undo *sunptr;
struct hammer_fifo_undo undo;
hammer_fifo_undo_t undo)
if (undo->head.hdr_type != HAMMER_HEAD_TYPE_UNDO)
bytes = undo->head.hdr_size - sizeof(*undo) -
if (bytes < 0 || undo->undo_data_bytes < 0 ||
undo->undo_data_bytes > bytes) {
undo->undo_data_bytes, bytes);
bytes = undo->undo_data_bytes;
zone = HAMMER_ZONE_DECODE(undo->undo_offset);
offset = undo->undo_offset & HAMMER_BUFMASK;
vol_no = HAMMER_VOL_DECODE(undo->undo_offset);
hammer_recover_copy_undo(undo->undo_offset,
(char *)(undo + 1),
buf_offset = undo->undo_offset & ~HAMMER_BUFMASK64;
(intmax_t)undo->undo_offset);
hammer_recover_copy_undo(undo->undo_offset,
(char *)(undo + 1),
hammer_fifo_undo_t undo);
error = hammer_recover_undo(hmp, root_volume, &head->undo);
hammer_fifo_undo_t undo;
undo = hammer_bnew(hmp, next_offset, &error, &buffer);
hammer_format_undo(hmp, undo,
undo = hammer_bread(hmp, next_offset, &error, &buffer);
tail = (void *)((char *)undo + bytes - sizeof(*tail));
if ((void *)undo != (void *)tail) {
undo->head.hdr_signature = HAMMER_HEAD_SIGNATURE;
undo->head.hdr_type = HAMMER_HEAD_TYPE_PAD;
undo->head.hdr_size = bytes;
undo->head.hdr_signature = HAMMER_HEAD_SIGNATURE;
undo->head.hdr_type = HAMMER_HEAD_TYPE_UNDO;
undo->head.hdr_size = bytes;
undo->head.hdr_seq = hmp->undo_seqno++;
undo->head.hdr_crc = 0;
undo->undo_offset = zone_off;
undo->undo_data_bytes = n;
bcopy(base, undo + 1, n);
tail = (void *)((char *)undo + bytes - sizeof(*tail));
KKASSERT(bytes >= sizeof(undo->head));
hammer_crc_set_fifo_head(hmp->version, &undo->head, bytes);
undo = (void *)(tail + 1);
tail = (void *)((char *)undo + bytes - sizeof(*tail));
if ((void *)undo != (void *)tail) {
undo->head.hdr_signature = HAMMER_HEAD_SIGNATURE;
undo->head.hdr_type = HAMMER_HEAD_TYPE_PAD;
undo->head.hdr_size = bytes;
goto undo;
goto undo;
undo: