1fa9e4066Sahrens /* 2fa9e4066Sahrens * CDDL HEADER START 3fa9e4066Sahrens * 4fa9e4066Sahrens * The contents of this file are subject to the terms of the 5*ea8dc4b6Seschrock * Common Development and Distribution License (the "License"). 6*ea8dc4b6Seschrock * You may not use this file except in compliance with the License. 7fa9e4066Sahrens * 8fa9e4066Sahrens * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9fa9e4066Sahrens * or http://www.opensolaris.org/os/licensing. 10fa9e4066Sahrens * See the License for the specific language governing permissions 11fa9e4066Sahrens * and limitations under the License. 12fa9e4066Sahrens * 13fa9e4066Sahrens * When distributing Covered Code, include this CDDL HEADER in each 14fa9e4066Sahrens * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15fa9e4066Sahrens * If applicable, add the following below this CDDL HEADER, with the 16fa9e4066Sahrens * fields enclosed by brackets "[]" replaced with your own identifying 17fa9e4066Sahrens * information: Portions Copyright [yyyy] [name of copyright owner] 18fa9e4066Sahrens * 19fa9e4066Sahrens * CDDL HEADER END 20fa9e4066Sahrens */ 21fa9e4066Sahrens /* 226b90ca48Slling * Copyright 2006 Sun Microsystems, Inc. All rights reserved. 23fa9e4066Sahrens * Use is subject to license terms. 24fa9e4066Sahrens */ 25fa9e4066Sahrens 26fa9e4066Sahrens #ifndef _SYS_ZFS_IOCTL_H 27fa9e4066Sahrens #define _SYS_ZFS_IOCTL_H 28fa9e4066Sahrens 29fa9e4066Sahrens #pragma ident "%Z%%M% %I% %E% SMI" 30fa9e4066Sahrens 31fa9e4066Sahrens #include <sys/cred.h> 32fa9e4066Sahrens #include <sys/dmu.h> 33*ea8dc4b6Seschrock #include <sys/zio.h> 34fa9e4066Sahrens 35fa9e4066Sahrens #ifdef __cplusplus 36fa9e4066Sahrens extern "C" { 37fa9e4066Sahrens #endif 38fa9e4066Sahrens 39fa9e4066Sahrens /* 40fa9e4066Sahrens * Property values for snapdir 41fa9e4066Sahrens */ 42a0965f35Sbonwick #define ZFS_SNAPDIR_HIDDEN 0 43a0965f35Sbonwick #define ZFS_SNAPDIR_VISIBLE 1 44fa9e4066Sahrens 45fa9e4066Sahrens #define DMU_BACKUP_VERSION (1ULL) 46fa9e4066Sahrens #define DMU_BACKUP_MAGIC 0x2F5bacbacULL 47fa9e4066Sahrens 48fa9e4066Sahrens /* 49fa9e4066Sahrens * zfs ioctl command structure 50fa9e4066Sahrens */ 51fa9e4066Sahrens typedef struct dmu_replay_record { 52fa9e4066Sahrens enum { 53fa9e4066Sahrens DRR_BEGIN, DRR_OBJECT, DRR_FREEOBJECTS, 54fa9e4066Sahrens DRR_WRITE, DRR_FREE, DRR_END, 55fa9e4066Sahrens } drr_type; 56fa9e4066Sahrens uint32_t drr_pad; 57fa9e4066Sahrens union { 58fa9e4066Sahrens struct drr_begin { 59fa9e4066Sahrens uint64_t drr_magic; 60fa9e4066Sahrens uint64_t drr_version; 61fa9e4066Sahrens uint64_t drr_creation_time; 62fa9e4066Sahrens dmu_objset_type_t drr_type; 63fa9e4066Sahrens uint32_t drr_pad; 64fa9e4066Sahrens uint64_t drr_toguid; 65fa9e4066Sahrens uint64_t drr_fromguid; 66fa9e4066Sahrens char drr_toname[MAXNAMELEN]; 67fa9e4066Sahrens } drr_begin; 68fa9e4066Sahrens struct drr_end { 69*ea8dc4b6Seschrock zio_cksum_t drr_checksum; 70fa9e4066Sahrens } drr_end; 71fa9e4066Sahrens struct drr_object { 72fa9e4066Sahrens uint64_t drr_object; 73fa9e4066Sahrens dmu_object_type_t drr_type; 74fa9e4066Sahrens dmu_object_type_t drr_bonustype; 75fa9e4066Sahrens uint32_t drr_blksz; 76fa9e4066Sahrens uint32_t drr_bonuslen; 77fa9e4066Sahrens uint8_t drr_checksum; 78fa9e4066Sahrens uint8_t drr_compress; 79fa9e4066Sahrens uint8_t drr_pad[6]; 80fa9e4066Sahrens } drr_object; 81fa9e4066Sahrens struct drr_freeobjects { 82fa9e4066Sahrens uint64_t drr_firstobj; 83fa9e4066Sahrens uint64_t drr_numobjs; 84fa9e4066Sahrens } drr_freeobjects; 85fa9e4066Sahrens struct drr_write { 86fa9e4066Sahrens uint64_t drr_object; 87fa9e4066Sahrens dmu_object_type_t drr_type; 88fa9e4066Sahrens uint32_t drr_pad; 89fa9e4066Sahrens uint64_t drr_offset; 90fa9e4066Sahrens uint64_t drr_length; 91fa9e4066Sahrens } drr_write; 92fa9e4066Sahrens struct drr_free { 93fa9e4066Sahrens uint64_t drr_object; 94fa9e4066Sahrens uint64_t drr_offset; 95fa9e4066Sahrens uint64_t drr_length; 96fa9e4066Sahrens } drr_free; 97fa9e4066Sahrens } drr_u; 98fa9e4066Sahrens } dmu_replay_record_t; 99fa9e4066Sahrens 100*ea8dc4b6Seschrock typedef struct zinject_record { 101*ea8dc4b6Seschrock uint64_t zi_objset; 102*ea8dc4b6Seschrock uint64_t zi_object; 103*ea8dc4b6Seschrock uint64_t zi_start; 104*ea8dc4b6Seschrock uint64_t zi_end; 105*ea8dc4b6Seschrock uint64_t zi_guid; 106*ea8dc4b6Seschrock uint32_t zi_level; 107*ea8dc4b6Seschrock uint32_t zi_error; 108*ea8dc4b6Seschrock uint64_t zi_type; 109*ea8dc4b6Seschrock uint32_t zi_freq; 110*ea8dc4b6Seschrock } zinject_record_t; 111*ea8dc4b6Seschrock 112*ea8dc4b6Seschrock #define ZINJECT_NULL 0x1 113*ea8dc4b6Seschrock #define ZINJECT_FLUSH_ARC 0x2 114*ea8dc4b6Seschrock #define ZINJECT_UNLOAD_SPA 0x4 115*ea8dc4b6Seschrock 116fa9e4066Sahrens typedef struct zfs_cmd { 117fa9e4066Sahrens char zc_name[MAXNAMELEN]; 118fa9e4066Sahrens char zc_prop_name[MAXNAMELEN]; 119fa9e4066Sahrens char zc_prop_value[MAXPATHLEN]; 120fa9e4066Sahrens char zc_root[MAXPATHLEN]; 121*ea8dc4b6Seschrock char zc_filename[MAXNAMELEN]; 122fa9e4066Sahrens uint32_t zc_intsz; 123fa9e4066Sahrens uint32_t zc_numints; 124*ea8dc4b6Seschrock uint64_t zc_guid; 125fa9e4066Sahrens uint64_t zc_config_src; /* really (char *) */ 126fa9e4066Sahrens uint64_t zc_config_src_size; 127fa9e4066Sahrens uint64_t zc_config_dst; /* really (char *) */ 128fa9e4066Sahrens uint64_t zc_config_dst_size; 129fa9e4066Sahrens uint64_t zc_cookie; 130fa9e4066Sahrens uint64_t zc_cred; 131fa9e4066Sahrens uint64_t zc_dev; 132fa9e4066Sahrens uint64_t zc_volsize; 133fa9e4066Sahrens uint64_t zc_volblocksize; 134fa9e4066Sahrens uint64_t zc_objset_type; 135fa9e4066Sahrens dmu_objset_stats_t zc_objset_stats; 136fa9e4066Sahrens struct drr_begin zc_begin_record; 137*ea8dc4b6Seschrock zinject_record_t zc_inject_record; 138*ea8dc4b6Seschrock zbookmark_t zc_bookmark; 139fa9e4066Sahrens } zfs_cmd_t; 140fa9e4066Sahrens 141a0965f35Sbonwick #define ZVOL_MAX_MINOR (1 << 16) 142a0965f35Sbonwick #define ZFS_MIN_MINOR (ZVOL_MAX_MINOR + 1) 143a0965f35Sbonwick 144fa9e4066Sahrens #ifdef _KERNEL 145fa9e4066Sahrens 146fa9e4066Sahrens extern dev_info_t *zfs_dip; 147fa9e4066Sahrens 148fa9e4066Sahrens extern int zfs_secpolicy_write(const char *dataset, const char *, cred_t *cr); 149fa9e4066Sahrens extern int zfs_busy(void); 150fa9e4066Sahrens 1515c5460e9Seschrock extern int zvol_check_volsize(zfs_cmd_t *zc, uint64_t blocksize); 152fa9e4066Sahrens extern int zvol_check_volblocksize(zfs_cmd_t *zc); 153fa9e4066Sahrens extern int zvol_get_stats(zfs_cmd_t *zc, objset_t *os); 154fa9e4066Sahrens extern void zvol_create_cb(objset_t *os, void *arg, dmu_tx_t *tx); 155fa9e4066Sahrens extern int zvol_create_minor(zfs_cmd_t *zc); 156fa9e4066Sahrens extern int zvol_remove_minor(zfs_cmd_t *zc); 157fa9e4066Sahrens extern int zvol_set_volsize(zfs_cmd_t *zc); 158fa9e4066Sahrens extern int zvol_set_volblocksize(zfs_cmd_t *zc); 159fa9e4066Sahrens extern int zvol_open(dev_t *devp, int flag, int otyp, cred_t *cr); 160fa9e4066Sahrens extern int zvol_close(dev_t dev, int flag, int otyp, cred_t *cr); 161fa9e4066Sahrens extern int zvol_strategy(buf_t *bp); 162fa9e4066Sahrens extern int zvol_read(dev_t dev, uio_t *uiop, cred_t *cr); 163fa9e4066Sahrens extern int zvol_write(dev_t dev, uio_t *uiop, cred_t *cr); 164fa9e4066Sahrens extern int zvol_aread(dev_t dev, struct aio_req *aio, cred_t *cr); 165fa9e4066Sahrens extern int zvol_awrite(dev_t dev, struct aio_req *aio, cred_t *cr); 166fa9e4066Sahrens extern int zvol_ioctl(dev_t dev, int cmd, intptr_t arg, int flag, cred_t *cr, 167fa9e4066Sahrens int *rvalp); 168fa9e4066Sahrens extern int zvol_busy(void); 169fa9e4066Sahrens extern void zvol_init(void); 170fa9e4066Sahrens extern void zvol_fini(void); 171fa9e4066Sahrens 172fa9e4066Sahrens #endif /* _KERNEL */ 173fa9e4066Sahrens 174fa9e4066Sahrens #ifdef __cplusplus 175fa9e4066Sahrens } 176fa9e4066Sahrens #endif 177fa9e4066Sahrens 178fa9e4066Sahrens #endif /* _SYS_ZFS_IOCTL_H */ 179