#!/usr/sbin/dtrace -FCs

receive_process_record:entry
{
	self->trace = 1;
	self->err = 0;
	self->spec = speculation();
	self->rwa = (struct receive_writer_arg *)arg0;
	self->rrd = (struct receive_record_arg *)arg1;
	speculate(self->spec);
	print(*self->rwa);
	print(*self->rrd);
}

receive_process_record:return
/self->trace == 1 && self->err != 49/
{
	discard(self->spec);
	self->trace = 0;
}

receive_process_record:return
/self->trace == 1 && self->err == 49/
{
	speculate(self->spec);
	printf("Returns 0x%llx", arg1);
	commit(self->spec);
	self->trace = 0;
}

dsl_dataset_check_quota:return
/arg1 == 49/
{
	self->err = 49;
	speculate(self->spec);
	print(*self->rwa);
	print(*self->rrd);
}

::entry
/self->trace == 1/
{
	speculate(self->spec);
}

::return
/self->trace == 1/
{
	speculate(self->spec);
	printf("Returns 0x%llx", arg1);
}
