--- a/usr/src/uts/common/fs/zfs/dmu_objset.c Sat Apr 26 21:58:06 2008 -0700
+++ b/usr/src/uts/common/fs/zfs/dmu_objset.c Sun Apr 27 10:20:38 2008 -0700
@@ -481,6 +481,7 @@
dsl_dataset_t *clone_parent;
const char *lastname;
dmu_objset_type_t type;
+ uint64_t flags;
};
/*ARGSUSED*/
@@ -527,7 +528,7 @@
ASSERT(dmu_tx_is_syncing(tx));
dsobj = dsl_dataset_create_sync(dd, oa->lastname,
- oa->clone_parent, cr, tx);
+ oa->clone_parent, oa->flags, cr, tx);
VERIFY(0 == dsl_dataset_open_obj(dd->dd_pool, dsobj, NULL,
DS_MODE_STANDARD | DS_MODE_READONLY, FTAG, &ds));
@@ -551,7 +552,7 @@
int
dmu_objset_create(const char *name, dmu_objset_type_t type,
- objset_t *clone_parent,
+ objset_t *clone_parent, uint64_t flags,
void (*func)(objset_t *os, void *arg, cred_t *cr, dmu_tx_t *tx), void *arg)
{
dsl_dir_t *pdd;
@@ -574,6 +575,7 @@
oa.userarg = arg;
oa.lastname = tail;
oa.type = type;
+ oa.flags = flags;
if (clone_parent != NULL) {
/*
@@ -946,6 +948,21 @@
}
int
+dmu_snapshot_realname(objset_t *os, char *name, char *real, int maxlen,
+ boolean_t *conflict)
+{
+ dsl_dataset_t *ds = os->os->os_dsl_dataset;
+ uint64_t ignored;
+
+ if (ds->ds_phys->ds_snapnames_zapobj == 0)
+ return (ENOENT);
+
+ return (zap_lookup_norm(ds->ds_dir->dd_pool->dp_meta_objset,
+ ds->ds_phys->ds_snapnames_zapobj, name, 8, 1, &ignored, MT_FIRST,
+ real, maxlen, conflict));
+}
+
+int
dmu_snapshot_list_next(objset_t *os, int namelen, char *name,
uint64_t *idp, uint64_t *offp, boolean_t *case_conflict)
{