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:
Ryan Moeller 2021-08-18 18:01:04 +00:00 committed by Brian Behlendorf
parent 1ae7835177
commit 1910a30848
1 changed files with 31 additions and 20 deletions

View File

@ -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);