libzfs_sendrecv: Style pass on dump_filesystem
* Add high level comments. * Eliminate unnecessarily void arg. * Avoid unnecessary line wrapping. * Initialize sdd fields with the correct types. * Remove extra whitespace. * Refactor replication checks for clarity. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Ryan Moeller <freqlabs@FreeBSD.org> Closes #12967
This commit is contained in:
parent
1ae7835177
commit
1910a30848
|
@ -1149,15 +1149,20 @@ dump_snapshot(zfs_handle_t *zhp, void *arg)
|
||||||
return (err);
|
return (err);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Send all snapshots for a filesystem, updating the send dump data.
|
||||||
|
*/
|
||||||
static int
|
static int
|
||||||
dump_filesystem(zfs_handle_t *zhp, void *arg)
|
dump_filesystem(zfs_handle_t *zhp, send_dump_data_t *sdd)
|
||||||
{
|
{
|
||||||
int rv = 0;
|
int rv = 0;
|
||||||
send_dump_data_t *sdd = arg;
|
|
||||||
boolean_t missingfrom = B_FALSE;
|
boolean_t missingfrom = B_FALSE;
|
||||||
zfs_cmd_t zc = {"\0"};
|
zfs_cmd_t zc = {"\0"};
|
||||||
uint64_t min_txg = 0, max_txg = 0;
|
uint64_t min_txg = 0, max_txg = 0;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Make sure the tosnap exists.
|
||||||
|
*/
|
||||||
(void) snprintf(zc.zc_name, sizeof (zc.zc_name), "%s@%s",
|
(void) snprintf(zc.zc_name, sizeof (zc.zc_name), "%s@%s",
|
||||||
zhp->zfs_name, sdd->tosnap);
|
zhp->zfs_name, sdd->tosnap);
|
||||||
if (zfs_ioctl(zhp->zfs_hdl, ZFS_IOC_OBJSET_STATS, &zc) != 0) {
|
if (zfs_ioctl(zhp->zfs_hdl, ZFS_IOC_OBJSET_STATS, &zc) != 0) {
|
||||||
|
@ -1168,47 +1173,52 @@ dump_filesystem(zfs_handle_t *zhp, void *arg)
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If this fs does not have fromsnap, and we're doing
|
||||||
|
* recursive, we need to send a full stream from the
|
||||||
|
* beginning (or an incremental from the origin if this
|
||||||
|
* is a clone). If we're doing non-recursive, then let
|
||||||
|
* them get the error.
|
||||||
|
*/
|
||||||
if (sdd->replicate && sdd->fromsnap) {
|
if (sdd->replicate && sdd->fromsnap) {
|
||||||
/*
|
/*
|
||||||
* If this fs does not have fromsnap, and we're doing
|
* Make sure the fromsnap exists.
|
||||||
* recursive, we need to send a full stream from the
|
|
||||||
* beginning (or an incremental from the origin if this
|
|
||||||
* is a clone). If we're doing non-recursive, then let
|
|
||||||
* them get the error.
|
|
||||||
*/
|
*/
|
||||||
(void) snprintf(zc.zc_name, sizeof (zc.zc_name), "%s@%s",
|
(void) snprintf(zc.zc_name, sizeof (zc.zc_name), "%s@%s",
|
||||||
zhp->zfs_name, sdd->fromsnap);
|
zhp->zfs_name, sdd->fromsnap);
|
||||||
if (zfs_ioctl(zhp->zfs_hdl,
|
if (zfs_ioctl(zhp->zfs_hdl, ZFS_IOC_OBJSET_STATS, &zc) != 0)
|
||||||
ZFS_IOC_OBJSET_STATS, &zc) != 0) {
|
|
||||||
missingfrom = B_TRUE;
|
missingfrom = B_TRUE;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sdd->seenfrom = sdd->seento = sdd->prevsnap[0] = 0;
|
sdd->seenfrom = sdd->seento = B_FALSE;
|
||||||
|
sdd->prevsnap[0] = '\0';
|
||||||
sdd->prevsnap_obj = 0;
|
sdd->prevsnap_obj = 0;
|
||||||
if (sdd->fromsnap == NULL || missingfrom)
|
if (sdd->fromsnap == NULL || missingfrom)
|
||||||
sdd->seenfrom = B_TRUE;
|
sdd->seenfrom = B_TRUE;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Iterate through all snapshots and process the ones we will be
|
* Iterate through all snapshots and process the ones we will be
|
||||||
* sending. If we only have a "from" and "to" snapshot to deal
|
* sending. If we only have a "from" and "to" snapshot to deal
|
||||||
* with, we can avoid iterating through all the other snapshots.
|
* with, we can avoid iterating through all the other snapshots.
|
||||||
*/
|
*/
|
||||||
if (sdd->doall || sdd->replicate || sdd->tosnap == NULL) {
|
if (sdd->doall || sdd->replicate || sdd->tosnap == NULL) {
|
||||||
if (!sdd->replicate && sdd->fromsnap != NULL)
|
if (!sdd->replicate) {
|
||||||
min_txg = get_snap_txg(zhp->zfs_hdl, zhp->zfs_name,
|
if (sdd->fromsnap != NULL) {
|
||||||
sdd->fromsnap);
|
min_txg = get_snap_txg(zhp->zfs_hdl,
|
||||||
if (!sdd->replicate && sdd->tosnap != NULL)
|
zhp->zfs_name, sdd->fromsnap);
|
||||||
max_txg = get_snap_txg(zhp->zfs_hdl, zhp->zfs_name,
|
}
|
||||||
sdd->tosnap);
|
if (sdd->tosnap != NULL) {
|
||||||
rv = zfs_iter_snapshots_sorted(zhp, dump_snapshot, arg,
|
max_txg = get_snap_txg(zhp->zfs_hdl,
|
||||||
|
zhp->zfs_name, sdd->tosnap);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
rv = zfs_iter_snapshots_sorted(zhp, dump_snapshot, sdd,
|
||||||
min_txg, max_txg);
|
min_txg, max_txg);
|
||||||
} else {
|
} else {
|
||||||
char snapname[MAXPATHLEN] = { 0 };
|
char snapname[MAXPATHLEN] = { 0 };
|
||||||
zfs_handle_t *snap;
|
zfs_handle_t *snap;
|
||||||
|
|
||||||
|
/* Dump fromsnap. */
|
||||||
if (!sdd->seenfrom) {
|
if (!sdd->seenfrom) {
|
||||||
(void) snprintf(snapname, sizeof (snapname),
|
(void) snprintf(snapname, sizeof (snapname),
|
||||||
"%s@%s", zhp->zfs_name, sdd->fromsnap);
|
"%s@%s", zhp->zfs_name, sdd->fromsnap);
|
||||||
|
@ -1220,6 +1230,7 @@ dump_filesystem(zfs_handle_t *zhp, void *arg)
|
||||||
rv = -1;
|
rv = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Dump tosnap. */
|
||||||
if (rv == 0) {
|
if (rv == 0) {
|
||||||
(void) snprintf(snapname, sizeof (snapname),
|
(void) snprintf(snapname, sizeof (snapname),
|
||||||
"%s@%s", zhp->zfs_name, sdd->tosnap);
|
"%s@%s", zhp->zfs_name, sdd->tosnap);
|
||||||
|
|
Loading…
Reference in New Issue