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