I've just spotted what looks like a possible miss-merge of: 4369 implement zfs bookmarks
It seems we've lost the snap must be in the specified pool check as well as the check for error on unmount which was specifically added by: 3744 zfs shouldn't ignore errors unmounting snapshots Both seem a little odd. https://github.com/illumos/illumos-gate/commit/78f171005391b928aaf1642b3206c534ed644332#diff-6296d5738a0663ee611fea974d51e0ca Prior to this commit this we had:- static int zfs_ioc_destroy_snaps(const char *poolname, nvlist_t *innvl, nvlist_t *outnvl) { int error, poollen; nvlist_t *snaps; nvpair_t *pair; boolean_t defer; if (nvlist_lookup_nvlist(innvl, "snaps", &snaps) != 0) return (SET_ERROR(EINVAL)); defer = nvlist_exists(innvl, "defer"); poollen = strlen(poolname); for (pair = nvlist_next_nvpair(snaps, NULL); pair != NULL; pair = nvlist_next_nvpair(snaps, pair)) { const char *name = nvpair_name(pair); /* * The snap must be in the specified pool. */ if (strncmp(name, poolname, poollen) != 0 || (name[poollen] != '/' && name[poollen] != '@')) return (SET_ERROR(EXDEV)); error = zfs_unmount_snap(name); if (error != 0) return (error); } return (dsl_destroy_snapshots_nvl(snaps, defer, outnvl)); } After it we have: zfs_ioc_destroy_snaps(const char *poolname, nvlist_t *innvl, nvlist_t *outnvl) { nvlist_t *snaps; nvpair_t *pair; boolean_t defer; if (nvlist_lookup_nvlist(innvl, "snaps", &snaps) != 0) return (SET_ERROR(EINVAL)); defer = nvlist_exists(innvl, "defer"); for (pair = nvlist_next_nvpair(snaps, NULL); pair != NULL; pair = nvlist_next_nvpair(snaps, pair)) { (void) zfs_unmount_snap(nvpair_name(pair)); } return (dsl_destroy_snapshots_nvl(snaps, defer, outnvl)); } _______________________________________________ developer mailing list [email protected] http://lists.open-zfs.org/mailman/listinfo/developer
