Lines Matching refs:bdd
221 be_should_promote_clones(zfs_handle_t *zfs_hdl, struct be_destroy_data *bdd) in be_should_promote_clones() argument
235 if (bdd->snapname == NULL) in be_should_promote_clones()
239 return (strcmp(atpos + 1, bdd->snapname) == 0); in be_should_promote_clones()
256 struct be_destroy_data *bdd; in be_dependent_clone_cb() local
261 bdd = (struct be_destroy_data *)data; in be_dependent_clone_cb()
263 if (be_should_promote_clones(zfs_hdl, bdd) && in be_dependent_clone_cb()
272 if (strncmp(name, bdd->target_name, in be_dependent_clone_cb()
273 strlen(bdd->target_name)) == 0 || in be_dependent_clone_cb()
274 strstr(name, bdd->target_name) == name) { in be_dependent_clone_cb()
279 SLIST_FOREACH(entry, &bdd->promotelist, link) { in be_dependent_clone_cb()
314 SLIST_INSERT_HEAD(&bdd->promotelist, newentry, link); in be_dependent_clone_cb()
327 be_promote_dependent_clones(zfs_handle_t *zfs_hdl, struct be_destroy_data *bdd) in be_promote_dependent_clones() argument
333 snprintf(bdd->target_name, BE_MAXPATHLEN, "%s/", zfs_get_name(zfs_hdl)); in be_promote_dependent_clones()
334 err = zfs_iter_dependents(zfs_hdl, true, be_dependent_clone_cb, bdd); in be_promote_dependent_clones()
340 if (bdd->snapname != NULL && !SLIST_EMPTY(&bdd->promotelist)) in be_promote_dependent_clones()
342 while (!SLIST_EMPTY(&bdd->promotelist)) { in be_promote_dependent_clones()
343 entry = SLIST_FIRST(&bdd->promotelist); in be_promote_dependent_clones()
344 SLIST_REMOVE_HEAD(&bdd->promotelist, link); in be_promote_dependent_clones()
347 zfs_open(bdd->lbh->lzh, entry->name, ZFS_TYPE_FILESYSTEM) in be_promote_dependent_clones()
370 struct be_destroy_data *bdd; in be_destroy_cb() local
374 bdd = (struct be_destroy_data *)data; in be_destroy_cb()
375 if (bdd->snapname == NULL) { in be_destroy_cb()
395 bdd->snapname); in be_destroy_cb()
396 if (!zfs_dataset_exists(bdd->lbh->lzh, path, ZFS_TYPE_SNAPSHOT)) in be_destroy_cb()
398 snap = zfs_open(bdd->lbh->lzh, path, ZFS_TYPE_SNAPSHOT); in be_destroy_cb()
415 struct be_destroy_data bdd; in be_destroy_internal() local
422 bdd.lbh = lbh; in be_destroy_internal()
423 bdd.snapname = NULL; in be_destroy_internal()
424 SLIST_INIT(&bdd.promotelist); in be_destroy_internal()
447 free(bdd.snapname); in be_destroy_internal()
469 bdd.snapname = strdup(snapdelim + 1); in be_destroy_internal()
470 if (bdd.snapname == NULL) in be_destroy_internal()
475 free(bdd.snapname); in be_destroy_internal()
485 if ((err = be_promote_dependent_clones(fs, &bdd)) != 0) { in be_destroy_internal()
486 free(bdd.snapname); in be_destroy_internal()
523 err = be_destroy_cb(fs, &bdd); in be_destroy_internal()
525 free(bdd.snapname); in be_destroy_internal()