Lines 1655-1665
static int
Link Here
|
1655 |
dsl_dataset_rename_snapshot_sync_impl(dsl_pool_t *dp, |
1655 |
dsl_dataset_rename_snapshot_sync_impl(dsl_pool_t *dp, |
1656 |
dsl_dataset_t *hds, void *arg) |
1656 |
dsl_dataset_t *hds, void *arg) |
1657 |
{ |
1657 |
{ |
1658 |
#ifdef __FreeBSD__ |
1658 |
#if defined(__FreeBSD__) && defined(_KERNEL) |
1659 |
#ifdef _KERNEL |
|
|
1660 |
char *oldname, *newname; |
1659 |
char *oldname, *newname; |
1661 |
#endif |
1660 |
#endif |
1662 |
#endif |
|
|
1663 |
dsl_dataset_rename_snapshot_arg_t *ddrsa = arg; |
1661 |
dsl_dataset_rename_snapshot_arg_t *ddrsa = arg; |
1664 |
dsl_dataset_t *ds; |
1662 |
dsl_dataset_t *ds; |
1665 |
uint64_t val; |
1663 |
uint64_t val; |
Lines 1686-1693
dsl_dataset_rename_snapshot_sync_impl(ds
Link Here
|
1686 |
VERIFY0(zap_add(dp->dp_meta_objset, hds->ds_phys->ds_snapnames_zapobj, |
1684 |
VERIFY0(zap_add(dp->dp_meta_objset, hds->ds_phys->ds_snapnames_zapobj, |
1687 |
ds->ds_snapname, 8, 1, &ds->ds_object, tx)); |
1685 |
ds->ds_snapname, 8, 1, &ds->ds_object, tx)); |
1688 |
|
1686 |
|
1689 |
#ifdef __FreeBSD__ |
1687 |
#if defined(__FreeBSD__) && defined (_KERNEL) |
1690 |
#ifdef _KERNEL |
|
|
1691 |
oldname = kmem_alloc(MAXPATHLEN, KM_SLEEP); |
1688 |
oldname = kmem_alloc(MAXPATHLEN, KM_SLEEP); |
1692 |
newname = kmem_alloc(MAXPATHLEN, KM_SLEEP); |
1689 |
newname = kmem_alloc(MAXPATHLEN, KM_SLEEP); |
1693 |
snprintf(oldname, MAXPATHLEN, "%s@%s", ddrsa->ddrsa_fsname, |
1690 |
snprintf(oldname, MAXPATHLEN, "%s@%s", ddrsa->ddrsa_fsname, |
Lines 1699-1705
dsl_dataset_rename_snapshot_sync_impl(ds
Link Here
|
1699 |
kmem_free(newname, MAXPATHLEN); |
1696 |
kmem_free(newname, MAXPATHLEN); |
1700 |
kmem_free(oldname, MAXPATHLEN); |
1697 |
kmem_free(oldname, MAXPATHLEN); |
1701 |
#endif |
1698 |
#endif |
1702 |
#endif |
|
|
1703 |
dsl_dataset_rele(ds, FTAG); |
1699 |
dsl_dataset_rele(ds, FTAG); |
1704 |
|
1700 |
|
1705 |
return (0); |
1701 |
return (0); |
Lines 2076-2081
dsl_dataset_promote_sync(void *arg, dmu_
Link Here
|
2076 |
dsl_dir_t *odd = NULL; |
2072 |
dsl_dir_t *odd = NULL; |
2077 |
uint64_t oldnext_obj; |
2073 |
uint64_t oldnext_obj; |
2078 |
int64_t delta; |
2074 |
int64_t delta; |
|
|
2075 |
#if defined(__FreeBSD__) && defined(_KERNEL) |
2076 |
char *oldname, *newname; |
2077 |
#endif |
2079 |
|
2078 |
|
2080 |
VERIFY0(promote_hold(ddpa, dp, FTAG)); |
2079 |
VERIFY0(promote_hold(ddpa, dp, FTAG)); |
2081 |
hds = ddpa->ddpa_clone; |
2080 |
hds = ddpa->ddpa_clone; |
Lines 2141-2146
dsl_dataset_promote_sync(void *arg, dmu_
Link Here
|
2141 |
dd->dd_phys->dd_clones, origin_head->ds_object, tx)); |
2140 |
dd->dd_phys->dd_clones, origin_head->ds_object, tx)); |
2142 |
} |
2141 |
} |
2143 |
|
2142 |
|
|
|
2143 |
#if defined(__FreeBSD__) && defined(_KERNEL) |
2144 |
/* Take the spa_namespace_lock so zvol renames don't livelock */ |
2145 |
mutex_enter(&spa_namespace_lock); |
2146 |
|
2147 |
oldname = kmem_alloc(MAXPATHLEN, KM_SLEEP); |
2148 |
newname = kmem_alloc(MAXPATHLEN, KM_SLEEP); |
2149 |
#endif |
2150 |
|
2144 |
/* move snapshots to this dir */ |
2151 |
/* move snapshots to this dir */ |
2145 |
for (snap = list_head(&ddpa->shared_snaps); snap; |
2152 |
for (snap = list_head(&ddpa->shared_snaps); snap; |
2146 |
snap = list_next(&ddpa->shared_snaps, snap)) { |
2153 |
snap = list_next(&ddpa->shared_snaps, snap)) { |
Lines 2173-2178
dsl_dataset_promote_sync(void *arg, dmu_
Link Here
|
2173 |
VERIFY0(dsl_dir_hold_obj(dp, dd->dd_object, |
2180 |
VERIFY0(dsl_dir_hold_obj(dp, dd->dd_object, |
2174 |
NULL, ds, &ds->ds_dir)); |
2181 |
NULL, ds, &ds->ds_dir)); |
2175 |
|
2182 |
|
|
|
2183 |
#if defined(__FreeBSD__) && defined(_KERNEL) |
2184 |
dsl_dataset_name(ds, newname); |
2185 |
zfsvfs_update_fromname(oldname, newname); |
2186 |
zvol_rename_minors(oldname, newname); |
2187 |
#endif |
2188 |
|
2176 |
/* move any clone references */ |
2189 |
/* move any clone references */ |
2177 |
if (ds->ds_phys->ds_next_clones_obj && |
2190 |
if (ds->ds_phys->ds_next_clones_obj && |
2178 |
spa_version(dp->dp_spa) >= SPA_VERSION_DIR_CLONES) { |
2191 |
spa_version(dp->dp_spa) >= SPA_VERSION_DIR_CLONES) { |
Lines 2210-2215
dsl_dataset_promote_sync(void *arg, dmu_
Link Here
|
2210 |
ASSERT(!dsl_prop_hascb(ds)); |
2223 |
ASSERT(!dsl_prop_hascb(ds)); |
2211 |
} |
2224 |
} |
2212 |
|
2225 |
|
|
|
2226 |
#if defined(__FreeBSD__) && defined(_KERNEL) |
2227 |
mutex_exit(&spa_namespace_lock); |
2228 |
|
2229 |
kmem_free(newname, MAXPATHLEN); |
2230 |
kmem_free(oldname, MAXPATHLEN); |
2231 |
#endif |
2213 |
/* |
2232 |
/* |
2214 |
* Change space accounting. |
2233 |
* Change space accounting. |
2215 |
* Note, pa->*usedsnap and dd_used_breakdown[SNAP] will either |
2234 |
* Note, pa->*usedsnap and dd_used_breakdown[SNAP] will either |