static int farm_snapshot(const struct siocb *iocb) { unsigned char snap_sha1[SHA1_LEN]; unsigned char trunk_sha1[SHA1_LEN]; struct sd_node nodes[SD_MAX_NODES]; int nr_nodes; void *buffer; int log_nr, ret = SD_RES_EIO, epoch; buffer = snap_log_read(&log_nr); if (!buffer) goto out; epoch = log_nr + 1; sd_dprintf("user epoch %d", epoch); nr_nodes = epoch_log_read(sys->epoch, nodes, sizeof(nodes)); if (nr_nodes < 0) goto out; if (trunk_file_write(trunk_sha1) < 0) goto out; if (snap_file_write(sys->epoch, nodes, nr_nodes, trunk_sha1, snap_sha1) < 0) goto out; if (snap_log_write(epoch, snap_sha1) < 0) goto out; ret = SD_RES_SUCCESS; out: free(buffer); return ret; }
static int farm_snapshot(struct siocb *iocb) { unsigned char snap_sha1[SHA1_LEN]; unsigned char trunk_sha1[SHA1_LEN]; void *buffer; int log_nr, ret = SD_RES_EIO, epoch; buffer = snap_log_read(&log_nr, 1); if (!buffer) goto out; epoch = log_nr + 1; dprintf("user epoch %d\n", epoch); if (trunk_file_write(trunk_sha1, 1) < 0) goto out; if (snap_file_write(epoch, trunk_sha1, snap_sha1, 1) < 0) goto out; if (snap_log_write(epoch, snap_sha1, 1) < 0) goto out; ret = SD_RES_SUCCESS; out: free(buffer); return ret; }