您当前的位置:首页 > IT编程 > C++
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:C++ zfs_get_type函数代码示例

51自学网 2021-06-03 11:59:27
  C++
这篇教程C++ zfs_get_type函数代码示例写得很实用,希望能帮到您。

本文整理汇总了C++中zfs_get_type函数的典型用法代码示例。如果您正苦于以下问题:C++ zfs_get_type函数的具体用法?C++ zfs_get_type怎么用?C++ zfs_get_type使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。

在下文中一共展示了zfs_get_type函数的30个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: libzfs_dataset_cmp

intlibzfs_dataset_cmp(const void *a, const void *b){	zfs_handle_t **za = (zfs_handle_t **)a;	zfs_handle_t **zb = (zfs_handle_t **)b;	char mounta[MAXPATHLEN];	char mountb[MAXPATHLEN];	boolean_t gota, gotb;	if ((gota = (zfs_get_type(*za) == ZFS_TYPE_FILESYSTEM)) != 0)		verify(zfs_prop_get(*za, ZFS_PROP_MOUNTPOINT, mounta,		    sizeof (mounta), NULL, NULL, 0, B_FALSE) == 0);	if ((gotb = (zfs_get_type(*zb) == ZFS_TYPE_FILESYSTEM)) != 0)		verify(zfs_prop_get(*zb, ZFS_PROP_MOUNTPOINT, mountb,		    sizeof (mountb), NULL, NULL, 0, B_FALSE) == 0);	if (gota && gotb)		return (strcmp(mounta, mountb));	if (gota)		return (-1);	if (gotb)		return (1);	return (strcmp(zfs_get_name(a), zfs_get_name(b)));}
开发者ID:tommiatplayfish,项目名称:zfs-crypto,代码行数:26,


示例2: zfs_callback

/* * Called for each dataset.  If the object is of an appropriate type, * add it to the avl tree and recurse over any children as necessary. */static intzfs_callback(zfs_handle_t *zhp, void *data){	callback_data_t *cb = data;	int dontclose = 0;	int include_snaps = zfs_include_snapshots(zhp, cb);	if ((zfs_get_type(zhp) & cb->cb_types) ||	    ((zfs_get_type(zhp) == ZFS_TYPE_SNAPSHOT) && include_snaps)) {		uu_avl_index_t idx;		zfs_node_t *node = safe_malloc(sizeof (zfs_node_t));		node->zn_handle = zhp;		uu_avl_node_init(node, &node->zn_avlnode, avl_pool);		if (uu_avl_find(cb->cb_avl, node, cb->cb_sortcol,		    &idx) == NULL) {			if (cb->cb_proplist) {				if ((*cb->cb_proplist) &&				    !(*cb->cb_proplist)->pl_all)					zfs_prune_proplist(zhp,					    cb->cb_props_table);				if (zfs_expand_proplist(zhp, cb->cb_proplist,				    (cb->cb_flags & ZFS_ITER_RECVD_PROPS),				    (cb->cb_flags & ZFS_ITER_LITERAL_PROPS))				    != 0) {					free(node);					return (-1);				}			}			uu_avl_insert(cb->cb_avl, node, idx);			dontclose = 1;		} else {			free(node);		}	}	/*	 * Recurse if necessary.	 */	if (cb->cb_flags & ZFS_ITER_RECURSE &&	    ((cb->cb_flags & ZFS_ITER_DEPTH_LIMIT) == 0 ||	    cb->cb_depth < cb->cb_depth_limit)) {		cb->cb_depth++;		if (zfs_get_type(zhp) == ZFS_TYPE_FILESYSTEM)			(void) zfs_iter_filesystems(zhp, zfs_callback, data);		if ((zfs_get_type(zhp) != ZFS_TYPE_SNAPSHOT) && include_snaps) {			(void) zfs_iter_snapshots(zhp,			    (cb->cb_flags & ZFS_ITER_SIMPLE) != 0, zfs_callback,			    data);		}		cb->cb_depth--;	}	if (!dontclose)		zfs_close(zhp);	return (0);}
开发者ID:Bingfeng,项目名称:zfs,代码行数:63,


示例3: zfs_unmount

/* * Unmount the given filesystem. */intzfs_unmount(zfs_handle_t *zhp, const char *mountpoint, int flags){	libzfs_handle_t *hdl = zhp->zfs_hdl;	struct mnttab entry;	char *mntpt = NULL;	/* check to see if we need to unmount the filesystem */	if (mountpoint != NULL || ((zfs_get_type(zhp) == ZFS_TYPE_FILESYSTEM ||				    zfs_get_type(zhp) == ZFS_TYPE_SNAPSHOT ) &&				   libzfs_mnttab_find(hdl, zhp->zfs_name,						      &entry) == 0)) {		/*		 * mountpoint may have come from a call to		 * getmnt/getmntany if it isn't NULL. If it is NULL,		 * we know it comes from libzfs_mnttab_find which can		 * then get freed later. We strdup it to play it safe.		 */		if (mountpoint == NULL)			mntpt = zfs_strdup(hdl, entry.mnt_mountp);		else			mntpt = zfs_strdup(hdl, mountpoint);#if defined(HAVE_ZPL)		/*		 * Unshare and unmount the filesystem		 */		if (zfs_unshare_proto(zhp, mntpt, share_all_proto) != 0)			return (-1);#else		if (unmount_one(hdl, mntpt, flags) != 0) {			free(mntpt);#if defined(HAVE_ZPL)			(void) zfs_shareall(zhp);#endif			return (-1);		}#endif		libzfs_mnttab_remove(hdl, zhp->zfs_name);#if defined(LINUX_PORT)		/* remove a /etc/mtab entry */		if (zfs_linux_remove_entry(mntpt, zhp->zfs_name, MTAB_FILE) < 0) {			free(mntpt);			return (zfs_error_fmt(hdl, EZFS_MOUNTFAILED,				  dgettext(TEXT_DOMAIN, "failed to remove from /etc/mtab '%s'"),					      zhp->zfs_name));		}#endif		free(mntpt);	}	return (0);}
开发者ID:mirko67,项目名称:zfs,代码行数:56,


示例4: zvol_cb

/*ARGSUSED1*/static intzvol_cb(zfs_handle_t *zhp, void *unused){	int error = 0;	if (zfs_get_type(zhp) == ZFS_TYPE_FILESYSTEM)		(void) zfs_iter_children(zhp, zvol_cb, NULL);	if (zfs_get_type(zhp) == ZFS_TYPE_VOLUME)		error = zfs_unshare_iscsi(zhp);	zfs_close(zhp);	return (error);}
开发者ID:haad,项目名称:netbsd-zfs,代码行数:14,


示例5: get_snap_max

/* * This is a ZFS snapshot iterator call-back function which returns the * highest number of SUNWzone snapshots that have been taken. */static intget_snap_max(zfs_handle_t *zhp, void *data){	int			res;	zfs_snapshot_data_t	*cbp;	if (zfs_get_type(zhp) != ZFS_TYPE_SNAPSHOT) {		zfs_close(zhp);		return (0);	}	cbp = (zfs_snapshot_data_t *)data;	if (strncmp(zfs_get_name(zhp), cbp->match_name, cbp->len) == 0) {		char	*nump;		int	num;		cbp->num++;		nump = (char *)(zfs_get_name(zhp) + cbp->len);		num = atoi(nump);		if (num > cbp->max)			cbp->max = num;	}	res = zfs_iter_snapshots(zhp, B_FALSE, get_snap_max, data);	zfs_close(zhp);	return (res);}
开发者ID:bahamas10,项目名称:openzfs,代码行数:32,


示例6: fs_is_chkpntvol

/* * Check if the volume type is snapshot volume */boolean_tfs_is_chkpntvol(char *path){    zfs_handle_t *zhp;    char vol[ZFS_MAXNAMELEN];    if (!path || !*path)        return (FALSE);    if (get_zfsvolname(vol, sizeof (vol), path) == -1)        return (FALSE);    (void) mutex_lock(&zlib_mtx);    if ((zhp = zfs_open(zlibh, vol, ZFS_TYPE_DATASET)) == NULL) {        (void) mutex_unlock(&zlib_mtx);        return (FALSE);    }    if (zfs_get_type(zhp) != ZFS_TYPE_SNAPSHOT) {        zfs_close(zhp);        (void) mutex_unlock(&zlib_mtx);        return (FALSE);    }    zfs_close(zhp);    (void) mutex_unlock(&zlib_mtx);    return (TRUE);}
开发者ID:mikess,项目名称:illumos-gate,代码行数:31,


示例7: mount_cb

static intmount_cb(zfs_handle_t *zhp, void *data){	get_all_cb_t *cbp = data;	if (!(zfs_get_type(zhp) & ZFS_TYPE_FILESYSTEM)) {		zfs_close(zhp);		return (0);	}	if (zfs_prop_get_int(zhp, ZFS_PROP_CANMOUNT) == ZFS_CANMOUNT_NOAUTO) {		zfs_close(zhp);		return (0);	}	/*	 * If this filesystem is inconsistent and has a receive resume	 * token, we can not mount it.	 */	if (zfs_prop_get_int(zhp, ZFS_PROP_INCONSISTENT) &&	    zfs_prop_get(zhp, ZFS_PROP_RECEIVE_RESUME_TOKEN,	    NULL, 0, NULL, NULL, 0, B_TRUE) == 0) {		zfs_close(zhp);		return (0);	}	libzfs_add_handle(cbp, zhp);	if (zfs_iter_filesystems(zhp, mount_cb, cbp) != 0) {		zfs_close(zhp);		return (-1);	}	return (0);}
开发者ID:SageCloud,项目名称:zfs,代码行数:33,


示例8: mount_cb

static intmount_cb(zfs_handle_t *zhp, void *data){	get_all_cb_t *cbp = data;    if (zfs_prop_get_int(zhp, ZFS_PROP_KEYSTATUS) ==        ZFS_CRYPT_KEY_UNAVAILABLE) {        if (zfs_key_load(zhp, B_FALSE, B_FALSE, B_TRUE) != 0) {            zfs_close(zhp);            return (0);        }    }	if (!(zfs_get_type(zhp) & ZFS_TYPE_FILESYSTEM)) {		zfs_close(zhp);		return (0);	}	if (zfs_prop_get_int(zhp, ZFS_PROP_CANMOUNT) == ZFS_CANMOUNT_NOAUTO) {		zfs_close(zhp);		return (0);	}	libzfs_add_handle(cbp, zhp);	if (zfs_iter_filesystems(zhp, mount_cb, cbp) != 0) {		zfs_close(zhp);		return (-1);	}	return (0);}
开发者ID:tommiatplayfish,项目名称:zfs-crypto,代码行数:30,


示例9: mount_cb

static intmount_cb(zfs_handle_t *zhp, void *data){	mount_cbdata_t *cbp = data;	if (!(zfs_get_type(zhp) & (ZFS_TYPE_FILESYSTEM | ZFS_TYPE_VOLUME))) {		zfs_close(zhp);		return (0);	}	if (zfs_prop_get_int(zhp, ZFS_PROP_CANMOUNT) == ZFS_CANMOUNT_NOAUTO) {		zfs_close(zhp);		return (0);	}	if (cbp->cb_alloc == cbp->cb_used) {		void *ptr;		if ((ptr = zfs_realloc(zhp->zfs_hdl,		    cbp->cb_datasets, cbp->cb_alloc * sizeof (void *),		    cbp->cb_alloc * 2 * sizeof (void *))) == NULL)			return (-1);		cbp->cb_datasets = ptr;		cbp->cb_alloc *= 2;	}	cbp->cb_datasets[cbp->cb_used++] = zhp;	return (zfs_iter_filesystems(zhp, mount_cb, cbp));}
开发者ID:YaroslavLitvinov,项目名称:zfs-port,代码行数:31,


示例10: zfs_key_unload

intzfs_key_unload(zfs_handle_t *zhp, boolean_t force){	zfs_cmd_t zc = { { 0 }};	int ret = 0;	int terrno;	int type = zfs_get_type(zhp);	char errbuf[1024];	(void) snprintf(errbuf, sizeof (errbuf), dgettext(TEXT_DOMAIN,	    "cannot unload key for '%s'"), zfs_get_name(zhp));	if (zfs_prop_get_int(zhp, ZFS_PROP_ENCRYPTION) == ZIO_CRYPT_OFF) {		zfs_error_aux(zhp->zfs_hdl, dgettext(TEXT_DOMAIN,		    "no key to unload when encryption=off."));		return (zfs_error(zhp->zfs_hdl, EZFS_KEYERR, errbuf));	}	if (zfs_prop_get_int(zhp, ZFS_PROP_KEYSTATUS) !=	    ZFS_CRYPT_KEY_AVAILABLE) {		zfs_error_aux(zhp->zfs_hdl, dgettext(TEXT_DOMAIN,		    "key not present."));		return (zfs_error(zhp->zfs_hdl, EZFS_KEYERR, errbuf));	}	/*	 * We need to be sure that all the data has been written to	 * disk before we unload the key so we first have to attempt	 * an unmount, if that fails we don't continue with the key unload	 * and instead return the error from zfs_umount.	 */	if (type == ZFS_TYPE_FILESYSTEM) {		if (zfs_is_mounted(zhp, NULL)) {			ret = zfs_unmountall(zhp, force ? MS_FORCE : 0);			if (ret) {				zfs_error_aux(zhp->zfs_hdl,				    dgettext(TEXT_DOMAIN,				    "failed to unload key: unmount failed"));				return (zfs_error(zhp->zfs_hdl,				    EZFS_KEYERR, errbuf));			}		}	}	(void) strlcpy(zc.zc_name, zfs_get_name(zhp), sizeof (zc.zc_name));	errno = 0;	ret = zfs_ioctl(zhp->zfs_hdl, ZFS_IOC_CRYPTO_KEY_UNLOAD, &zc);	terrno = errno;	if (ret != 0) {		zfs_error_aux(zhp->zfs_hdl, dgettext(TEXT_DOMAIN,		    "failed to unload key: %s"), strerror(terrno));		errno = terrno;	/* make sure it is the zfs_ioctl errno */		return (zfs_error(zhp->zfs_hdl, EZFS_KEYERR, errbuf));	}	zfs_refresh_properties(zhp);	return (0);}
开发者ID:corbosman,项目名称:zfs-crypto,代码行数:58,


示例11: update_zfs_shares_cb

static intupdate_zfs_shares_cb(zfs_handle_t *zhp, void *pcookie){	update_cookie_t *udata = (update_cookie_t *)pcookie;	char mountpoint[ZFS_MAXPROPLEN];	char shareopts[ZFS_MAXPROPLEN];	char *dataset;	zfs_type_t type = zfs_get_type(zhp);	if (type == ZFS_TYPE_FILESYSTEM &&	    zfs_iter_filesystems(zhp, update_zfs_shares_cb, pcookie) != 0) {		zfs_close(zhp);		return (1);	}	if (type != ZFS_TYPE_FILESYSTEM) {		zfs_close(zhp);		return (0);	}	if (zfs_prop_get(zhp, ZFS_PROP_MOUNTPOINT, mountpoint,	    sizeof (mountpoint), NULL, NULL, 0, B_FALSE) != 0) {		zfs_close(zhp);		return (0);	}	dataset = (char *)zfs_get_name(zhp);	if (dataset == NULL) {		zfs_close(zhp);		return (0);	}	if (!zfs_is_mounted(zhp, NULL)) {		zfs_close(zhp);		return (0);	}	if ((udata->proto == NULL || strcmp(udata->proto, "nfs") == 0) &&	    zfs_prop_get(zhp, ZFS_PROP_SHARENFS, shareopts,	    sizeof (shareopts), NULL, NULL, 0, B_FALSE) == 0 &&	    strcmp(shareopts, "off") != 0) {		(void) process_share(udata->handle, NULL, mountpoint, NULL,		    "nfs", shareopts, NULL, dataset, B_FALSE);	}	if ((udata->proto == NULL || strcmp(udata->proto, "smb") == 0) &&	    zfs_prop_get(zhp, ZFS_PROP_SHARESMB, shareopts,	    sizeof (shareopts), NULL, NULL, 0, B_FALSE) == 0 &&	    strcmp(shareopts, "off") != 0) {		(void) process_share(udata->handle, NULL, mountpoint, NULL,		    "smb", shareopts, NULL, dataset, B_FALSE);	}	zfs_close(zhp);	return (0);}
开发者ID:DeHackEd,项目名称:zfs,代码行数:58,


示例12: zfs_callback

/* * Called for each dataset.  If the object the object is of an appropriate type, * add it to the avl tree and recurse over any children as necessary. */static intzfs_callback(zfs_handle_t *zhp, void *data){	callback_data_t *cb = data;	int dontclose = 0;	/*	 * If this object is of the appropriate type, add it to the AVL tree.	 */	if (zfs_get_type(zhp) & cb->cb_types) {		uu_avl_index_t idx;		zfs_node_t *node = safe_malloc(sizeof (zfs_node_t));		node->zn_handle = zhp;		uu_avl_node_init(node, &node->zn_avlnode, avl_pool);		if (uu_avl_find(cb->cb_avl, node, cb->cb_sortcol,		    &idx) == NULL) {			if (cb->cb_proplist &&			    zfs_expand_proplist(zhp, cb->cb_proplist) != 0) {				free(node);				return (-1);			}			uu_avl_insert(cb->cb_avl, node, idx);			dontclose = 1;		} else {			free(node);		}	}	/*	 * Recurse if necessary.	 */	if (cb->cb_recurse) {		if (zfs_get_type(zhp) == ZFS_TYPE_FILESYSTEM)			(void) zfs_iter_filesystems(zhp, zfs_callback, data);		if (zfs_get_type(zhp) != ZFS_TYPE_SNAPSHOT &&		    (cb->cb_types & ZFS_TYPE_SNAPSHOT))			(void) zfs_iter_snapshots(zhp, zfs_callback, data);	}	if (!dontclose)		zfs_close(zhp);	return (0);}
开发者ID:YaroslavLitvinov,项目名称:zfs-port,代码行数:49,


示例13: get_one_filesystem

static intget_one_filesystem(zfs_handle_t *zhp, void *data){	get_all_cbdata_t *cbp = data;	zfs_type_t type = zfs_get_type(zhp);	/*	 * Interate over any nested datasets.	 */	if (type == ZFS_TYPE_FILESYSTEM &&	    zfs_iter_filesystems(zhp, get_one_filesystem, data) != 0) {		zfs_close(zhp);		return (1);	}	/*	 * Skip any datasets whose type does not match.	 */	if ((type & cbp->cb_types) == 0) {		zfs_close(zhp);		return (0);	}	if (cbp->cb_alloc == cbp->cb_used) {		zfs_handle_t **handles;		if (cbp->cb_alloc == 0)			cbp->cb_alloc = 64;		else			cbp->cb_alloc *= 2;		handles = (zfs_handle_t **)calloc(1,		    cbp->cb_alloc * sizeof (void *));		if (handles == NULL) {			zfs_close(zhp);			return (0);		}		if (cbp->cb_handles) {			bcopy(cbp->cb_handles, handles,			    cbp->cb_used * sizeof (void *));			free(cbp->cb_handles);		}		cbp->cb_handles = handles;	}	cbp->cb_handles[cbp->cb_used++] = zhp;	return (0);}
开发者ID:BjoKaSH,项目名称:ZCE-CDDL-FILES,代码行数:51,


示例14: zfs_iter_bookmarks

/* * Iterate over all bookmarks */intzfs_iter_bookmarks(zfs_handle_t *zhp, zfs_iter_f func, void *data){	zfs_handle_t *nzhp;	nvlist_t *props = NULL;	nvlist_t *bmarks = NULL;	int err;	nvpair_t *pair;	if ((zfs_get_type(zhp) & (ZFS_TYPE_SNAPSHOT | ZFS_TYPE_BOOKMARK)) != 0)		return (0);	/* Setup the requested properties nvlist. */	props = fnvlist_alloc();	fnvlist_add_boolean(props, zfs_prop_to_name(ZFS_PROP_GUID));	fnvlist_add_boolean(props, zfs_prop_to_name(ZFS_PROP_CREATETXG));	fnvlist_add_boolean(props, zfs_prop_to_name(ZFS_PROP_CREATION));	/* Allocate an nvlist to hold the bookmarks. */	bmarks = fnvlist_alloc();	if ((err = lzc_get_bookmarks(zhp->zfs_name, props, &bmarks)) != 0)		goto out;	for (pair = nvlist_next_nvpair(bmarks, NULL);	    pair != NULL; pair = nvlist_next_nvpair(bmarks, pair)) {		char name[ZFS_MAXNAMELEN];		char *bmark_name;		nvlist_t *bmark_props;		bmark_name = nvpair_name(pair);		bmark_props = fnvpair_value_nvlist(pair);		(void) snprintf(name, sizeof (name), "%s#%s", zhp->zfs_name,		    bmark_name);		nzhp = make_bookmark_handle(zhp, name, bmark_props);		if (nzhp == NULL)			continue;		if ((err = func(nzhp, data)) != 0)			goto out;	}out:	fnvlist_free(props);	fnvlist_free(bmarks);	return (err);}
开发者ID:Acidburn0zzz,项目名称:zfs,代码行数:53,


示例15: iter_dataset

int Destroy::iter_dataset(zfs_handle_t *hzfs, void *ptr){    Destroy *self = (Destroy*)ptr;    if (zfs_get_type(hzfs) == ZFS_TYPE_SNAPSHOT) {        Dataset ds(hzfs);        if (self->check_tag(ds) && self->check_age(ds)) {            self->m_datasets.push_back(ds);        }    }    if (self->m_recursive) {        zfs_iter_filesystems(hzfs, iter_dataset, self);        zfs_iter_snapshots(hzfs, B_FALSE, iter_dataset, self);    }    return 0;}
开发者ID:kona4kona,项目名称:zsnapmaster,代码行数:18,


示例16: zfs_unshare_proto

/* * Unshare the given filesystem. */intzfs_unshare_proto(zfs_handle_t *zhp, const char *mountpoint,    zfs_share_proto_t *proto){	struct mnttab search = { 0 }, entry;	char *mntpt = NULL;	/* check to see if need to unmount the filesystem */	search.mnt_special = (char *)zfs_get_name(zhp);	search.mnt_fstype = MNTTYPE_ZFS;#ifndef __APPLE__	rewind(zhp->zfs_hdl->libzfs_mnttab);#endif /*!__APPLE__*/	if (mountpoint != NULL)		mntpt = zfs_strdup(zhp->zfs_hdl, mountpoint);	if (mountpoint != NULL || ((zfs_get_type(zhp) == ZFS_TYPE_FILESYSTEM) &&	    getmntany(zhp->zfs_hdl->libzfs_mnttab, &entry, &search) == 0)) {		zfs_share_proto_t *curr_proto;		if (mountpoint == NULL)			mntpt = zfs_strdup(zhp->zfs_hdl, entry.mnt_mountp);		for (curr_proto = proto; *curr_proto != PROTO_END;		    curr_proto++) {			if (is_shared(zhp->zfs_hdl, mntpt, *curr_proto) &&			    unshare_one(zhp->zfs_hdl, zhp->zfs_name,			    mntpt, *curr_proto) != 0) {				if (mntpt != NULL)					free(mntpt);				return (-1);			}		}	}	if (mntpt != NULL)		free(mntpt);	return (0);}
开发者ID:roddi,项目名称:maczfs-10a286,代码行数:44,


示例17: zfs_unmount

/* * Unmount the given filesystem. */intzfs_unmount(zfs_handle_t *zhp, const char *mountpoint, int flags){	struct mnttab search = { 0 }, entry;	char *mntpt = NULL;	/* check to see if need to unmount the filesystem */	search.mnt_special = zhp->zfs_name;	search.mnt_fstype = MNTTYPE_ZFS;	rewind(zhp->zfs_hdl->libzfs_mnttab);	if (mountpoint != NULL || ((zfs_get_type(zhp) == ZFS_TYPE_FILESYSTEM) &&	    getmntany(zhp->zfs_hdl->libzfs_mnttab, &entry, &search) == 0)) {		/*		 * mountpoint may have come from a call to		 * getmnt/getmntany if it isn't NULL. If it is NULL,		 * we know it comes from getmntany which can then get		 * overwritten later. We strdup it to play it safe.		 */		if (mountpoint == NULL)			mntpt = zfs_strdup(zhp->zfs_hdl, entry.mnt_mountp);		else			mntpt = zfs_strdup(zhp->zfs_hdl, mountpoint);		/*		 * Unshare and unmount the filesystem		 */		if (zfs_unshare_proto(zhp, mntpt, share_all_proto) != 0)			return (-1);		if (unmount_one(zhp->zfs_hdl, mntpt, flags) != 0) {			free(mntpt);			(void) zfs_shareall(zhp);			return (-1);		}		free(mntpt);	}	return (0);}
开发者ID:YaroslavLitvinov,项目名称:zfs-port,代码行数:43,


示例18: zfs_unmount

/* * Unmount the given filesystem. */intzfs_unmount(zfs_handle_t *zhp, const char *mountpoint, int flags){	libzfs_handle_t *hdl = zhp->zfs_hdl;	struct mnttab entry;	char *mntpt = NULL;	/* check to see if we need to unmount the filesystem */	if (mountpoint != NULL || ((zfs_get_type(zhp) == ZFS_TYPE_FILESYSTEM) &&	    libzfs_mnttab_find(hdl, zhp->zfs_name, &entry) == 0)) {		/*		 * mountpoint may have come from a call to		 * getmnt/getmntany if it isn't NULL. If it is NULL,		 * we know it comes from libzfs_mnttab_find which can		 * then get freed later. We strdup it to play it safe.		 */		if (mountpoint == NULL)			mntpt = zfs_strdup(hdl, entry.mnt_mountp);		else			mntpt = zfs_strdup(hdl, mountpoint);		/*		 * Unshare and unmount the filesystem		 */		if (zfs_unshare_proto(zhp, mntpt, share_all_proto) != 0) {			free(mntpt);			return (-1);		}		if (unmount_one(hdl, mntpt, flags) != 0) {			free(mntpt);			(void) zfs_shareall(zhp);			return (-1);		}		libzfs_mnttab_remove(hdl, zhp->zfs_name);		free(mntpt);	}	return (0);}
开发者ID:Ramzec,项目名称:zfs,代码行数:43,


示例19: check_zvol

/* ARGSUSED */static intcheck_zvol(zfs_handle_t *zhp, void *unused){	int ret;	if (zfs_get_type(zhp) == ZFS_TYPE_VOLUME) {		/*		 * TRANSLATION_NOTE		 * zfs and dataset are literals that should not be translated.		 */		(void) fprintf(stderr, gettext("cannot verify zfs dataset %s: "		    "volumes cannot be specified as a zone dataset resource/n"),		    zfs_get_name(zhp));		ret = -1;	} else {		ret = zfs_iter_children(zhp, check_zvol, NULL);	}	zfs_close(zhp);	return (ret);}
开发者ID:andreiw,项目名称:polaris,代码行数:23,


示例20: mount_cb

static intmount_cb(zfs_handle_t *zhp, void *data){    get_all_cb_t *cbp = data;    if (!(zfs_get_type(zhp) & ZFS_TYPE_FILESYSTEM)) {        zfs_close(zhp);        return (0);    }    if (zfs_prop_get_int(zhp, ZFS_PROP_CANMOUNT) == ZFS_CANMOUNT_NOAUTO) {        zfs_close(zhp);        return (0);    }    libzfs_add_handle(cbp, zhp);    if (zfs_iter_filesystems(zhp, mount_cb, cbp) != 0) {        zfs_close(zhp);        return (-1);    }    return (0);}
开发者ID:kelsieflynn,项目名称:SamFlynnOS,代码行数:22,


示例21: zfs_unshare_proto

/* * Unshare the given filesystem. */intzfs_unshare_proto(zfs_handle_t *zhp, const char *mountpoint,    zfs_share_proto_t *proto){	libzfs_handle_t *hdl = zhp->zfs_hdl;	struct mnttab entry;	char *mntpt = NULL;	/* check to see if need to unmount the filesystem */	rewind(zhp->zfs_hdl->libzfs_mnttab);	if (mountpoint != NULL)		mountpoint = mntpt = zfs_strdup(hdl, mountpoint);	if (mountpoint != NULL || ((zfs_get_type(zhp) == ZFS_TYPE_FILESYSTEM) &&	    libzfs_mnttab_find(hdl, zfs_get_name(zhp), &entry) == 0)) {		zfs_share_proto_t *curr_proto;		if (mountpoint == NULL)			mntpt = zfs_strdup(zhp->zfs_hdl, entry.mnt_mountp);		for (curr_proto = proto; *curr_proto != PROTO_END;		    curr_proto++) {			while (is_shared(hdl, mntpt, *curr_proto)) {			    if (unshare_one(hdl, zhp->zfs_name,					mntpt, *curr_proto) != 0) {				if (mntpt != NULL)					free(mntpt);				return (-1);			    }			}		}	}	if (mntpt != NULL)		free(mntpt);	return (0);}
开发者ID:ElCoyote27,项目名称:zfs-fuse,代码行数:41,


示例22: match_mountpoint

/* * A ZFS file system iterator call-back function which returns the * zfs_handle_t for a ZFS file system on the specified mount point. */static intmatch_mountpoint(zfs_handle_t *zhp, void *data){	int			res;	zfs_mount_data_t	*cbp;	char			mp[ZFS_MAXPROPLEN];	if (zfs_get_type(zhp) != ZFS_TYPE_FILESYSTEM) {		zfs_close(zhp);		return (0);	}	cbp = (zfs_mount_data_t *)data;	if (zfs_prop_get(zhp, ZFS_PROP_MOUNTPOINT, mp, sizeof (mp), NULL, NULL,	    0, B_FALSE) == 0 && strcmp(mp, cbp->match_name) == 0) {		cbp->match_handle = zhp;		return (1);	}	res = zfs_iter_filesystems(zhp, match_mountpoint, data);	zfs_close(zhp);	return (res);}
开发者ID:andreiw,项目名称:polaris,代码行数:27,


示例23: zpool_disable_volumes

intzpool_disable_volumes(zfs_handle_t *nzhp, void *data){	// Same pool?	if (nzhp && nzhp->zpool_hdl && zpool_get_name(nzhp->zpool_hdl) &&	    data && !strcmp(zpool_get_name(nzhp->zpool_hdl), (char *)data)) {		if (zfs_get_type(nzhp) == ZFS_TYPE_VOLUME) {			char *volume = NULL;			/*			 *	/var/run/zfs/zvol/dsk/$POOL/$volume			 */			volume = zfs_asprintf(nzhp->zfs_hdl,			    "%s/zfs/zvol/dsk/%s",			    ZVOL_ROOT,			    zfs_get_name(nzhp));			if (volume) {				/* Unfortunately, diskutil does not handle our				 * symlink to /dev/diskX - so we need to				 * readlink() to find the path				 */				char dstlnk[MAXPATHLEN];				int ret;				ret = readlink(volume, dstlnk, sizeof(dstlnk));				if (ret > 0) {					printf("Attempting to eject volume "					    "'%s'/n", zfs_get_name(nzhp));					dstlnk[ret] = '/0';					do_unmount_volume(dstlnk, 0);				}				free(volume);			}		}	}	(void) zfs_iter_children(nzhp, zpool_disable_volumes, data);	zfs_close(nzhp);	return (0);}
开发者ID:Spencerx,项目名称:zfs-1,代码行数:37,


示例24: zfs_callback

/* * Called for each dataset.  If the object is of an appropriate type, * add it to the avl tree and recurse over any children as necessary. */static intzfs_callback(zfs_handle_t *zhp, void *data){	callback_data_t *cb = data;	boolean_t should_close = B_TRUE;	boolean_t include_snaps = zfs_include_snapshots(zhp, cb);	boolean_t include_bmarks = (cb->cb_types & ZFS_TYPE_BOOKMARK);	if ((zfs_get_type(zhp) & cb->cb_types) ||	    ((zfs_get_type(zhp) == ZFS_TYPE_SNAPSHOT) && include_snaps)) {		uu_avl_index_t idx;		zfs_node_t *node = safe_malloc(sizeof (zfs_node_t));		node->zn_handle = zhp;		uu_avl_node_init(node, &node->zn_avlnode, avl_pool);		if (uu_avl_find(cb->cb_avl, node, cb->cb_sortcol,		    &idx) == NULL) {			if (cb->cb_proplist) {				if ((*cb->cb_proplist) &&				    !(*cb->cb_proplist)->pl_all)					zfs_prune_proplist(zhp,					    cb->cb_props_table);				if (zfs_expand_proplist(zhp, cb->cb_proplist,				    (cb->cb_flags & ZFS_ITER_RECVD_PROPS),				    (cb->cb_flags & ZFS_ITER_LITERAL_PROPS))				    != 0) {					free(node);					return (-1);				}			}			uu_avl_insert(cb->cb_avl, node, idx);			should_close = B_FALSE;		} else {			free(node);		}	}	/*	 * Recurse if necessary.	 */	if (cb->cb_flags & ZFS_ITER_RECURSE &&	    ((cb->cb_flags & ZFS_ITER_DEPTH_LIMIT) == 0 ||	    cb->cb_depth < cb->cb_depth_limit)) {		cb->cb_depth++;		/*		 * If we are not looking for filesystems, we don't need to		 * recurse into filesystems when we are at our depth limit.		 */		if ((cb->cb_depth < cb->cb_depth_limit ||		    (cb->cb_flags & ZFS_ITER_DEPTH_LIMIT) == 0 ||		    (cb->cb_types &		    (ZFS_TYPE_FILESYSTEM | ZFS_TYPE_VOLUME))) &&		    zfs_get_type(zhp) == ZFS_TYPE_FILESYSTEM) {			(void) zfs_iter_filesystems(zhp, zfs_callback, data);		}		if (((zfs_get_type(zhp) & (ZFS_TYPE_SNAPSHOT |		    ZFS_TYPE_BOOKMARK)) == 0) && include_snaps) {			(void) zfs_iter_snapshots(zhp,			    (cb->cb_flags & ZFS_ITER_SIMPLE) != 0,			    zfs_callback, data, 0, 0);		}		if (((zfs_get_type(zhp) & (ZFS_TYPE_SNAPSHOT |		    ZFS_TYPE_BOOKMARK)) == 0) && include_bmarks) {			(void) zfs_iter_bookmarks(zhp, zfs_callback, data);		}		cb->cb_depth--;	}	if (should_close)		zfs_close(zhp);	return (0);}
开发者ID:DeHackEd,项目名称:zfs,代码行数:82,


示例25: zfs_sort

/* * Sort datasets by specified columns. * * o  Numeric types sort in ascending order. * o  String types sort in alphabetical order. * o  Types inappropriate for a row sort that row to the literal *    bottom, regardless of the specified ordering. * * If no sort columns are specified, or two datasets compare equally * across all specified columns, they are sorted alphabetically by name * with snapshots grouped under their parents. */static intzfs_sort(const void *larg, const void *rarg, void *data){	zfs_handle_t *l = ((zfs_node_t *)larg)->zn_handle;	zfs_handle_t *r = ((zfs_node_t *)rarg)->zn_handle;	zfs_sort_column_t *sc = (zfs_sort_column_t *)data;	zfs_sort_column_t *psc;	for (psc = sc; psc != NULL; psc = psc->sc_next) {		char lbuf[ZFS_MAXPROPLEN], rbuf[ZFS_MAXPROPLEN];		char *lstr, *rstr;		uint64_t lnum, rnum;		boolean_t lvalid, rvalid;		int ret = 0;		/*		 * We group the checks below the generic code.  If 'lstr' and		 * 'rstr' are non-NULL, then we do a string based comparison.		 * Otherwise, we compare 'lnum' and 'rnum'.		 */		lstr = rstr = NULL;		if (psc->sc_prop == ZPROP_INVAL) {			nvlist_t *luser, *ruser;			nvlist_t *lval, *rval;			luser = zfs_get_user_props(l);			ruser = zfs_get_user_props(r);			lvalid = (nvlist_lookup_nvlist(luser,			    psc->sc_user_prop, &lval) == 0);			rvalid = (nvlist_lookup_nvlist(ruser,			    psc->sc_user_prop, &rval) == 0);			if (lvalid)				verify(nvlist_lookup_string(lval,				    ZPROP_VALUE, &lstr) == 0);			if (rvalid)				verify(nvlist_lookup_string(rval,				    ZPROP_VALUE, &rstr) == 0);		} else if (psc->sc_prop == ZFS_PROP_NAME) {			lvalid = rvalid = B_TRUE;			(void) strlcpy(lbuf, zfs_get_name(l), sizeof(lbuf));			(void) strlcpy(rbuf, zfs_get_name(r), sizeof(rbuf));			lstr = lbuf;			rstr = rbuf;		} else if (zfs_prop_is_string(psc->sc_prop)) {			lvalid = (zfs_prop_get(l, psc->sc_prop, lbuf,			    sizeof (lbuf), NULL, NULL, 0, B_TRUE) == 0);			rvalid = (zfs_prop_get(r, psc->sc_prop, rbuf,			    sizeof (rbuf), NULL, NULL, 0, B_TRUE) == 0);			lstr = lbuf;			rstr = rbuf;		} else {			lvalid = zfs_prop_valid_for_type(psc->sc_prop,			    zfs_get_type(l));			rvalid = zfs_prop_valid_for_type(psc->sc_prop,			    zfs_get_type(r));			if (lvalid)				(void) zfs_prop_get_numeric(l, psc->sc_prop,				    &lnum, NULL, NULL, 0);			if (rvalid)				(void) zfs_prop_get_numeric(r, psc->sc_prop,				    &rnum, NULL, NULL, 0);		}		if (!lvalid && !rvalid)			continue;		else if (!lvalid)			return (1);		else if (!rvalid)			return (-1);		if (lstr)			ret = strcmp(lstr, rstr);		else if (lnum < rnum)			ret = -1;		else if (lnum > rnum)			ret = 1;		if (ret != 0) {			if (psc->sc_reverse == B_TRUE)				ret = (ret < 0) ? 1 : -1;			return (ret);		}//.........这里部分代码省略.........
开发者ID:Der-Jan,项目名称:freebsd-crypto,代码行数:101,


示例26: zfs_mount

/* * Mount the given filesystem. * * 'flags' appears pretty much always 0 here. */intzfs_mount(zfs_handle_t *zhp, const char *options, int flags){	struct stat buf;	char mountpoint[ZFS_MAXPROPLEN];	char mntopts[MNT_LINE_MAX];	libzfs_handle_t *hdl = zhp->zfs_hdl;	int remount;	if (options == NULL) {		mntopts[0] = '/0';	} else {		(void) strlcpy(mntopts, options, sizeof (mntopts));	}	if (strstr(mntopts, MNTOPT_REMOUNT) != NULL)		remount = 1;	/*	 * If the pool is imported read-only then all mounts must be read-only	 */#ifdef __LINUX__	if (zpool_get_prop_int(zhp->zpool_hdl, ZPOOL_PROP_READONLY, NULL))		(void) strlcat(mntopts, "," MNTOPT_RO, sizeof (mntopts));#else	if (zpool_get_prop_int(zhp->zpool_hdl, ZPOOL_PROP_READONLY, NULL))		flags |= MS_RDONLY;#endif /* __LINUX__ */	if (!zfs_is_mountable(zhp, mountpoint, sizeof (mountpoint), NULL))		return (0);#ifdef __LINUX__	/*	 * Append default mount options which apply to the mount point.	 * This is done because under Linux (unlike Solaris) multiple mount	 * points may reference a single super block.  This means that just	 * given a super block there is no back reference to update the per	 * mount point options.	 */	rc = zfs_add_options(zhp, &flags);	if (rc) {		zfs_error_aux(hdl, dgettext(TEXT_DOMAIN,		    "default options unavailable"));		return (zfs_error_fmt(hdl, EZFS_MOUNTFAILED,		    dgettext(TEXT_DOMAIN, "cannot mount '%s'"),		    mountpoint));	}	/*	 * Append zfsutil option so the mount helper allow the mount	 */	strlcat(mntopts, "," MNTOPT_ZFSUTIL, sizeof (mntopts));#endif /* __LINUX__ */	/* Create the directory if it doesn't already exist */#ifdef __APPLE__	if (zfs_get_type(zhp) != ZFS_TYPE_SNAPSHOT &&	    lstat(mountpoint, &buf) != 0) {#else	if (lstat(mountpoint, &buf) != 0) {#endif		if (mkdirp(mountpoint, 0755) != 0) {			zfs_error_aux(hdl, dgettext(TEXT_DOMAIN,			    "failed to create mountpoint"));			return (zfs_error_fmt(hdl, EZFS_MOUNTFAILED,			    dgettext(TEXT_DOMAIN, "cannot mount '%s'"),			    mountpoint));		}	}	/*	 * Determine if the mountpoint is empty.  If so, refuse to perform the	 * mount.  We don't perform this check if 'remount' is	 * specified or if overlay option(-O) is given	 */	if ((flags & MS_OVERLAY) == 0 && !remount &&	    !dir_is_empty(mountpoint)) {		zfs_error_aux(hdl, dgettext(TEXT_DOMAIN,		    "directory is not empty"));		return (zfs_error_fmt(hdl, EZFS_MOUNTFAILED,		    dgettext(TEXT_DOMAIN, "cannot mount '%s'"), mountpoint));	}	/* perform the mount */#ifdef __LINUX__	rc = do_mount(zfs_get_name(zhp), mountpoint, mntopts);#elif defined(__APPLE__) || defined (__FREEBSD__)	if (zmount(zfs_get_name(zhp), mountpoint, MS_OPTIONSTR | flags,	    MNTTYPE_ZFS, NULL, 0, mntopts, sizeof (mntopts)) != 0) {#elif defined(__illumos__)	if (mount(zfs_get_name(zhp), mountpoint, MS_OPTIONSTR | flags,	    MNTTYPE_ZFS, NULL, 0, mntopts, sizeof (mntopts)) != 0) {//.........这里部分代码省略.........
开发者ID:Spencerx,项目名称:zfs-1,代码行数:101,


示例27: match_mountpoint

/* * A ZFS file system iterator call-back function which returns the * zfs_handle_t for a ZFS file system on the specified mount point. */static intmatch_mountpoint(zfs_handle_t *zhp, void *data){	int			res;	zfs_mount_data_t	*cbp;	char			mp[ZFS_MAXPROPLEN];	if (zfs_get_type(zhp) != ZFS_TYPE_FILESYSTEM) {		zfs_close(zhp);		return (0);	}	/* First check if the dataset is mounted. */	if (zfs_prop_get(zhp, ZFS_PROP_MOUNTED, mp, sizeof (mp), NULL, NULL,	    0, B_FALSE) != 0 || strcmp(mp, "no") == 0) {		zfs_close(zhp);		return (0);	}	/* Now check mount point. */	if (zfs_prop_get(zhp, ZFS_PROP_MOUNTPOINT, mp, sizeof (mp), NULL, NULL,	    0, B_FALSE) != 0) {		zfs_close(zhp);		return (0);	}	cbp = (zfs_mount_data_t *)data;	if (strcmp(mp, "legacy") == 0) {		/* If legacy, must look in mnttab for mountpoint. */		FILE		*fp;		struct mnttab	entry;		const char	*nm;		nm = zfs_get_name(zhp);		if ((fp = fopen(MNTTAB, "r")) == NULL) {			zfs_close(zhp);			return (0);		}		while (getmntent(fp, &entry) == 0) {			if (strcmp(nm, entry.mnt_special) == 0) {				if (strcmp(entry.mnt_mountp, cbp->match_name)				    == 0) {					(void) fclose(fp);					cbp->match_handle = zhp;					return (1);				}				break;			}		}		(void) fclose(fp);	} else if (strcmp(mp, cbp->match_name) == 0) {		cbp->match_handle = zhp;		return (1);	}	/* Iterate over any nested datasets. */	res = zfs_iter_filesystems(zhp, match_mountpoint, data);	zfs_close(zhp);	return (res);}
开发者ID:bahamas10,项目名称:openzfs,代码行数:67,


示例28: zfs_key_load

//.........这里部分代码省略.........		    "already loaded."));		return (zfs_error(zhp->zfs_hdl, EZFS_KEYERR, errbuf));	}	if (zfs_prop_get(zhp, ZFS_PROP_KEYSOURCE, keysource, ZFS_MAXNAMELEN,	    &propsrctype, source, sizeof (source), FALSE) != 0) {		zfs_error_aux(zhp->zfs_hdl, dgettext(TEXT_DOMAIN,		    "no keysource property available."));		return (zfs_error(zhp->zfs_hdl, EZFS_KEYERR, errbuf));	}	if (propsrctype == ZPROP_SRC_INHERITED) {#if 0 // FIXME		if (strcmp(source, ZONE_INVISIBLE_SOURCE) == 0) {			zfs_error_aux(zhp->zfs_hdl, dgettext(TEXT_DOMAIN,			    "key must be loaded from global zone."));			return (zfs_error(zhp->zfs_hdl, EZFS_KEYERR, errbuf));		}#endif		pzhp = make_dataset_handle(zhp->zfs_hdl, source);		if (pzhp == NULL) {			errno = EINVAL;			return (zfs_error(zhp->zfs_hdl, EZFS_KEYERR, errbuf));		}		keystatus = zfs_prop_get_int(pzhp, ZFS_PROP_KEYSTATUS);		zfs_close(pzhp);	}	if (propsrctype == ZPROP_SRC_DEFAULT) {		zfs_error_aux(zhp->zfs_hdl, dgettext(TEXT_DOMAIN,		    "invalid keysource property."));		return (zfs_error(zhp->zfs_hdl, EZFS_KEYERR, errbuf));	}	if (!zfs_can_prompt_if_needed(keysource)) {		errno = ENOTTY;		return (-1);	}	/*	 * NONE we are the top ds asking for crypto so we	 * need to get and load the key.	 *	 * UNAVAILABLE we need to load the key of a higher level	 * dataset.	 *	 * AVAILABLE we are done other than filling in who we	 * are inheriting the wrapping key from.	 */	if (propsrctype == ZPROP_SRC_INHERITED &&	    keystatus == ZFS_CRYPT_KEY_AVAILABLE) {		(void) strlcpy(zc.zc_crypto.zic_inherit_dsname, source,		    sizeof (zc.zc_crypto.zic_inherit_dsname));		ret = zfs_ioctl(zhp->zfs_hdl, ZFS_IOC_CRYPTO_KEY_INHERIT, &zc);		goto out;	}	zc.zc_crypto.zic_crypt = crypt;	ret = key_hdl_to_zc(zhp->zfs_hdl, zhp, keysource, crypt, &zc,	    ZFS_CRYPTO_KEY_LOAD);	if (ret != 0) {		if (errno == ENOTTY)			ret = 0;		goto out;	}	ret = zfs_ioctl(zhp->zfs_hdl, ZFS_IOC_CRYPTO_KEY_LOAD, &zc);out:	if (ret != 0) {		if (errno == EACCES) {			zfs_error_aux(zhp->zfs_hdl, dgettext(TEXT_DOMAIN,			    "incorrect key."));			return (zfs_error(zhp->zfs_hdl, EZFS_KEYERR, errbuf));		} else if (!recursive) {			if (errno == EEXIST) {				zfs_error_aux(zhp->zfs_hdl,				    dgettext(TEXT_DOMAIN, "already loaded."));			} else if (zhp->zfs_hdl->libzfs_desc_active == 0) {				zfs_error_aux(zhp->zfs_hdl, strerror(errno));			}			return (zfs_error(zhp->zfs_hdl, EZFS_KEYERR, errbuf));		}	}	zfs_refresh_properties(zhp);	if (mount) {		if (zfs_get_type(zhp) == ZFS_TYPE_FILESYSTEM) {			if (recursive) {				ret = zfs_mountall(zhp, 0);			} else {				ret = zfs_mount(zhp, NULL, 0);			}			if (ret == 0 && share) {				ret = zfs_share(zhp);			}		}	}	return (ret);}
开发者ID:corbosman,项目名称:zfs-crypto,代码行数:101,


示例29: unmount_one

/* * Unmount a single filesystem. */static intunmount_one(libzfs_handle_t *hdl, const char *mountpoint, int flags){#ifdef __APPLE__#if !TARGET_OS_EMBEDDED && !TARGET_OS_IPHONE	/* First try going through diskarb */	if (diskarb_unmount(mountpoint, flags) == 0) {		return (0);	}#endif#endif#ifdef __APPLE__	if (unmount(mountpoint, flags) != 0) {#else	if (umount2(mountpoint, flags) != 0) {#endif		zfs_error_aux(hdl, strerror(errno));		return (zfs_error_fmt(hdl, EZFS_UMOUNTFAILED,		    dgettext(TEXT_DOMAIN, "cannot unmount '%s'"),		    mountpoint));	}	return (0);}/* * Unmount the given filesystem. */intzfs_unmount(zfs_handle_t *zhp, const char *mountpoint, int flags){	struct mnttab search = { 0 }, entry;	char *mntpt = NULL;	/* check to see if need to unmount the filesystem */	search.mnt_special = zhp->zfs_name;	search.mnt_fstype = MNTTYPE_ZFS;#ifndef __APPLE__	rewind(zhp->zfs_hdl->libzfs_mnttab);#endif /*!__APPLE__*/	if (mountpoint != NULL || ((zfs_get_type(zhp) == ZFS_TYPE_FILESYSTEM) &&	    getmntany(zhp->zfs_hdl->libzfs_mnttab, &entry, &search) == 0)) {		/*		 * mountpoint may have come from a call to		 * getmnt/getmntany if it isn't NULL. If it is NULL,		 * we know it comes from getmntany which can then get		 * overwritten later. We strdup it to play it safe.		 */		if (mountpoint == NULL)			mntpt = zfs_strdup(zhp->zfs_hdl, entry.mnt_mountp);		else			mntpt = zfs_strdup(zhp->zfs_hdl, mountpoint);		/*		 * Unshare and unmount the filesystem		 */#ifndef __APPLE__		if (zfs_unshare_proto(zhp, mntpt, share_all_proto) != 0)			return (-1);#endif		if (unmount_one(zhp->zfs_hdl, mntpt, flags) != 0) {			free(mntpt);			(void) zfs_shareall(zhp);			return (-1);		}		free(mntpt);	}	return (0);}/* * Unmount this filesystem and any children inheriting the mountpoint property. * To do this, just act like we're changing the mountpoint property, but don't * remount the filesystems afterwards. */intzfs_unmountall(zfs_handle_t *zhp, int flags){	prop_changelist_t *clp;	int ret;	clp = changelist_gather(zhp, ZFS_PROP_MOUNTPOINT, flags);	if (clp == NULL)		return (-1);	ret = changelist_prefix(clp);	changelist_free(clp);	return (ret);}
开发者ID:roddi,项目名称:maczfs-10a286,代码行数:96,


示例30: be_add_children_callback

/* * Function:	be_add_children_callback * Description:	Callback function used by zfs_iter to look through all *		the datasets and snapshots for each BE and add them to *		the lists of information to be passed back. * Parameters: *		zhp - handle to the first zfs dataset. (provided by the *		      zfs_iter_* call) *		data - pointer to the callback data and where we'll pass *		       the BE information back. * Returns: *		0 - Success *		be_errno_t - Failure * Scope: *		Private */static intbe_add_children_callback(zfs_handle_t *zhp, void *data){	list_callback_data_t	*cb = (list_callback_data_t *)data;	char			*str = NULL, *ds_path = NULL;	int			ret = 0;	struct be_defaults be_defaults;	be_get_defaults(&be_defaults);	ds_path = str = strdup(zfs_get_name(zhp));	/*	 * get past the end of the container dataset plus the trailing "/"	 */	str = str + (strlen(be_container_ds) + 1);	if (be_defaults.be_deflt_rpool_container) {		/* just skip if invalid */		if (!be_valid_be_name(str))			return (BE_SUCCESS);	}	if (cb->be_nodes_head == NULL) {		if ((cb->be_nodes_head = be_list_alloc(&ret,		    sizeof (be_node_list_t))) == NULL) {			ZFS_CLOSE(zhp);			return (ret);		}		cb->be_nodes = cb->be_nodes_head;	}	if (zfs_get_type(zhp) == ZFS_TYPE_SNAPSHOT && !zone_be) {		be_snapshot_list_t *snapshots = NULL;		if (cb->be_nodes->be_node_snapshots == NULL) {			if ((cb->be_nodes->be_node_snapshots =			    be_list_alloc(&ret, sizeof (be_snapshot_list_t)))			    == NULL || ret != BE_SUCCESS) {				ZFS_CLOSE(zhp);				return (ret);			}			cb->be_nodes->be_node_snapshots->be_next_snapshot =			    NULL;			snapshots = cb->be_nodes->be_node_snapshots;		} else {			for (snapshots = cb->be_nodes->be_node_snapshots;			    snapshots != NULL;			    snapshots = snapshots->be_next_snapshot) {				if (snapshots->be_next_snapshot != NULL)					continue;				/*				 * We're at the end of the list add the				 * new snapshot.				 */				if ((snapshots->be_next_snapshot =				    be_list_alloc(&ret,				    sizeof (be_snapshot_list_t))) == NULL ||				    ret != BE_SUCCESS) {					ZFS_CLOSE(zhp);					return (ret);				}				snapshots = snapshots->be_next_snapshot;				snapshots->be_next_snapshot = NULL;				break;			}		}		if ((ret = be_get_ss_data(zhp, str, snapshots,		    cb->be_nodes)) != BE_SUCCESS) {			ZFS_CLOSE(zhp);			return (ret);		}	} else if (strchr(str, '/') == NULL) {		if (cb->be_nodes->be_node_name != NULL) {			if ((cb->be_nodes->be_next_node =			    be_list_alloc(&ret, sizeof (be_node_list_t))) ==			    NULL || ret != BE_SUCCESS) {				ZFS_CLOSE(zhp);				return (ret);			}			cb->be_nodes = cb->be_nodes->be_next_node;			cb->be_nodes->be_next_node = NULL;		}		/*		 * If this is a zone root dataset then we only need//.........这里部分代码省略.........
开发者ID:NanXiao,项目名称:illumos-joyent,代码行数:101,



注:本文中的zfs_get_type函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


C++ zfs_open函数代码示例
C++ zfs_error_fmt函数代码示例
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。