1241
1242 mutex_exit(&sdp->sd_lock);
1243 VN_RELE(dvp);
1244
1245 /*
1246 * Dispose of the vnode for the snapshot mount point.
1247 * This is safe to do because once this entry has been removed
1248 * from the AVL tree, it can't be found again, so cannot become
1249 * "active". If we lookup the same name again we will end up
1250 * creating a new vnode.
1251 */
1252 gfs_vop_inactive(vp, cr, ct);
1253 }
1254
1255
1256 /*
1257 * These VP's should never see the light of day. They should always
1258 * be covered.
1259 */
1260 static const fs_operation_def_t zfsctl_tops_snapshot[] = {
1261 VOPNAME_INACTIVE, { .vop_inactive = zfsctl_snapshot_inactive },
1262 NULL, NULL
1263 };
1264
1265 int
1266 zfsctl_lookup_objset(vfs_t *vfsp, uint64_t objsetid, zfsvfs_t **zfsvfsp)
1267 {
1268 zfsvfs_t *zfsvfs = vfsp->vfs_data;
1269 vnode_t *dvp, *vp;
1270 zfsctl_snapdir_t *sdp;
1271 zfsctl_node_t *zcp;
1272 zfs_snapentry_t *sep;
1273 int error;
1274
1275 ASSERT(zfsvfs->z_ctldir != NULL);
1276 error = zfsctl_root_lookup(zfsvfs->z_ctldir, "snapshot", &dvp,
1277 NULL, 0, NULL, kcred, NULL, NULL, NULL);
1278 if (error != 0)
1279 return (error);
1280 sdp = dvp->v_data;
1281
1282 mutex_enter(&sdp->sd_lock);
|
1241
1242 mutex_exit(&sdp->sd_lock);
1243 VN_RELE(dvp);
1244
1245 /*
1246 * Dispose of the vnode for the snapshot mount point.
1247 * This is safe to do because once this entry has been removed
1248 * from the AVL tree, it can't be found again, so cannot become
1249 * "active". If we lookup the same name again we will end up
1250 * creating a new vnode.
1251 */
1252 gfs_vop_inactive(vp, cr, ct);
1253 }
1254
1255
1256 /*
1257 * These VP's should never see the light of day. They should always
1258 * be covered.
1259 */
1260 static const fs_operation_def_t zfsctl_tops_snapshot[] = {
1261 { VOPNAME_INACTIVE, { .vop_inactive = zfsctl_snapshot_inactive } },
1262 { NULL, { NULL } }
1263 };
1264
1265 int
1266 zfsctl_lookup_objset(vfs_t *vfsp, uint64_t objsetid, zfsvfs_t **zfsvfsp)
1267 {
1268 zfsvfs_t *zfsvfs = vfsp->vfs_data;
1269 vnode_t *dvp, *vp;
1270 zfsctl_snapdir_t *sdp;
1271 zfsctl_node_t *zcp;
1272 zfs_snapentry_t *sep;
1273 int error;
1274
1275 ASSERT(zfsvfs->z_ctldir != NULL);
1276 error = zfsctl_root_lookup(zfsvfs->z_ctldir, "snapshot", &dvp,
1277 NULL, 0, NULL, kcred, NULL, NULL, NULL);
1278 if (error != 0)
1279 return (error);
1280 sdp = dvp->v_data;
1281
1282 mutex_enter(&sdp->sd_lock);
|