ahrens commented on this pull request.
looks good aside from the comment updates I noted
> + * See if the snapshot is a snapshot of the filesystem
+ * or the snapshot is an origin of the filesystem.
+ */
+ if (snapds->ds_dir == ds->ds_dir ||
+ (dsl_dir_is_clone(ds->ds_dir) &&
+ dsl_dir_phys(ds->ds_dir)->dd_origin_obj ==
+ snapds->ds_object)) {
+ error = SET_ERROR(EEXIST);
+ } else {
+ error = SET_ERROR(ESRCH);
+ }
+ dsl_dataset_rele(snapds, FTAG);
+ dsl_dataset_rele(ds, FTAG);
+ return (error);
+ }
+ dsl_dataset_rele(snapds, FTAG);
}
/* must not have any bookmarks after the most recent snapshot */
while you're here, can you fix line 2545, it needs to release `ds` as well when
returning the error.
> + /* Check if the target snapshot exists at all. */
+ error = dsl_dataset_hold(dp, ddra->ddra_tosnap, FTAG, &snapds);
+ if (error != 0) {
+ /* Distinguish between missing dataset and snapshot. */
+ if (error == ENOENT || error == EXDEV)
+ error = SET_ERROR(ESRCH);
+ dsl_dataset_rele(ds, FTAG);
+ return (error);
+ }
+ ASSERT(snapds->ds_is_snapshot);
+
+ /* Check if the snapshot is the latest snapshot indeed. */
+ if (snapds != ds->ds_prev) {
+ /*
+ * See if the snapshot is a snapshot of the filesystem
+ * or the snapshot is an origin of the filesystem.
nit: `is *the* origin`
you might say something like, `distinguish between the case where the only
problem is intervening snapshots (EEXIST) vs the snapshot can't possibly be a
valid target for rollback (or doesn't exist) (ESRCH).`
- dsl_dataset_name(ds->ds_prev, namebuf);
- if (strcmp(namebuf, ddra->ddra_tosnap) != 0)
- return (SET_ERROR(EXDEV));
+ /* Check if the target snapshot exists at all. */
+ error = dsl_dataset_hold(dp, ddra->ddra_tosnap, FTAG, &snapds);
+ if (error != 0) {
+ /* Distinguish between missing dataset and snapshot. */
I think this is squashing `missing dataset and missing snapshot` to the same
error, not distinguishing them.
--
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/openzfs/openzfs/pull/434#pullrequestreview-61313581
------------------------------------------
openzfs-developer
Archives:
https://openzfs.topicbox.com/groups/developer/discussions/T5032507ba3c52b88-M9986a7c719f13ac1bcf683b9
Powered by Topicbox: https://topicbox.com