47         SBD_RET_ZFS_META_CREATE_FAILED,
  48         SBD_ZVOL_META_NAME_MISMATCH,
  49         SBD_RET_DATA_FILE_LOOKUP_FAILED,
  50         SBD_RET_WRONG_META_FILE_TYPE,
  51         SBD_RET_WRONG_DATA_FILE_TYPE,
  52         SBD_RET_DATA_FILE_OPEN_FAILED,
  53         SBD_RET_META_FILE_OPEN_FAILED,
  54         SBD_RET_DATA_FILE_GETATTR_FAILED,
  55         SBD_RET_META_FILE_GETATTR_FAILED,
  56         SBD_RET_FILE_SIZE_ERROR,
  57         SBD_RET_FILE_ALIGN_ERROR,
  58         SBD_RET_SIZE_OUT_OF_RANGE,
  59         SBD_RET_SIZE_NOT_SUPPORTED_BY_FS,
  60         SBD_RET_NO_META,
  61         SBD_RET_VERSION_NOT_SUPPORTED,
  62         SBD_RET_LU_BUSY,
  63         SBD_RET_NOT_FOUND,
  64         SBD_RET_INSUFFICIENT_BUF_SPACE,
  65         SBD_RET_WRITE_CACHE_SET_FAILED,
  66         SBD_RET_ACCESS_STATE_FAILED,
  67 
  68         SBD_RET_MAX_VAL
  69 } sbd_ret_t;
  70 
  71 #define SBD_IOCTL_DEF(n)        ((((int)0x5B) << 16) | (n))
  72 #define SBD_IOCTL_CREATE_AND_REGISTER_LU                SBD_IOCTL_DEF(1)
  73 #define SBD_IOCTL_IMPORT_LU                             SBD_IOCTL_DEF(2)
  74 #define SBD_IOCTL_DELETE_LU                             SBD_IOCTL_DEF(3)
  75 #define SBD_IOCTL_MODIFY_LU                             SBD_IOCTL_DEF(4)
  76 #define SBD_IOCTL_GET_LU_PROPS                          SBD_IOCTL_DEF(5)
  77 #define SBD_IOCTL_GET_LU_LIST                           SBD_IOCTL_DEF(6)
  78 #define SBD_IOCTL_SET_LU_STANDBY                        SBD_IOCTL_DEF(7)
  79 #define SBD_IOCTL_SET_GLOBAL_LU                         SBD_IOCTL_DEF(8)
  80 #define SBD_IOCTL_GET_GLOBAL_LU                         SBD_IOCTL_DEF(9)
  81 #define SBD_IOCTL_GET_UNMAP_PROPS                       SBD_IOCTL_DEF(10)
  82 
  83 typedef struct sbd_create_and_reg_lu {
  84         uint32_t        slu_struct_size;
  85         uint16_t        slu_meta_fname_valid:1,
  86                         slu_lu_size_valid:1,
  87                         slu_blksize_valid:1,
  88                         slu_vid_valid:1,
  89                         slu_pid_valid:1,
  90                         slu_rev_valid:1,
  91                         slu_serial_valid:1,
  92                         slu_alias_valid:1,
  93                         slu_mgmt_url_valid:1,
  94                         slu_guid_valid:1,
  95                         slu_company_id_valid:1,
  96                         slu_host_id_valid:1,
  97                         slu_writeback_cache_disable_valid:1,
  98                         slu_writeback_cache_disable:1,
  99                         slu_write_protected:1;
 100         uint16_t        slu_meta_fname_off;
 101         uint64_t        slu_lu_size;
 102         uint16_t        slu_data_fname_off;
 103         uint16_t        slu_serial_off;
 104         uint8_t         slu_serial_size;
 105         uint8_t         slu_ret_filesize_nbits;
 106         uint16_t        slu_blksize;
 107         uint32_t        slu_company_id;
 108         uint16_t        slu_alias_off;
 109         uint16_t        slu_mgmt_url_off;
 110         uint32_t        slu_host_id;
 111         char            slu_rev[4];
 112         char            slu_vid[8];
 113         char            slu_pid[16];
 114         uint8_t         slu_guid[16];
 115         char            slu_buf[8];     /* likely more than 8 */
 116 } sbd_create_and_reg_lu_t;
 117 
 118 typedef struct sbd_global_props {
 119         uint32_t        mlu_struct_size;
 
 146 typedef struct sbd_import_lu {
 147         uint32_t        ilu_struct_size;
 148         uint32_t        ilu_rsvd;
 149         uint8_t         ilu_ret_guid[16];
 150         char            ilu_meta_fname[8]; /* Can be more than 8 */
 151 } sbd_import_lu_t;
 152 
 153 typedef struct sbd_modify_lu {
 154         uint32_t        mlu_struct_size;
 155         uint32_t        mlu_lu_size_valid:1,
 156                         mlu_serial_valid:1,
 157                         mlu_alias_valid:1,
 158                         mlu_mgmt_url_valid:1,
 159                         mlu_writeback_cache_disable_valid:1,
 160                         mlu_writeback_cache_disable:1,
 161                         mlu_write_protected_valid:1,
 162                         mlu_write_protected:1,
 163                         mlu_by_guid:1,
 164                         mlu_by_fname:1,
 165                         mlu_standby_valid:1,
 166                         mlu_standby:1;
 167         uint64_t        mlu_lu_size;
 168         uint16_t        mlu_alias_off;
 169         uint16_t        mlu_mgmt_url_off;
 170         uint16_t        mlu_serial_off;
 171         uint16_t        mlu_serial_size;
 172         uint16_t        mlu_fname_off;
 173         uint16_t        mlu_rsvd1;
 174         uint32_t        mlu_rsvd2;
 175         uint8_t         mlu_input_guid[16];
 176         char            mlu_buf[8]; /* can be more than 8 */
 177 } sbd_modify_lu_t;
 178 
 179 typedef struct sbd_delete_lu {
 180         uint32_t        dlu_struct_size;
 181         uint16_t        dlu_by_guid:1,
 182                         dlu_by_meta_name:1;
 183         uint16_t        dlu_rsvd;
 184         uint8_t         dlu_guid[16];
 185         uint8_t         dlu_meta_name[8];
 186 } sbd_delete_lu_t;
 
 188 /*
 189  * sbd access states
 190  */
 191 #define SBD_LU_ACTIVE                   1
 192 #define SBD_LU_TRANSITION_TO_ACTIVE     2
 193 #define SBD_LU_STANDBY                  3
 194 #define SBD_LU_TRANSITION_TO_STANDBY    4
 195 
 196 typedef struct sbd_lu_props {
 197         uint32_t        slp_input_guid:1,       /* GUID or meta filename */
 198                         slp_separate_meta:1,
 199                         slp_meta_fname_valid:1,
 200                         slp_data_fname_valid:1,
 201                         slp_zfs_meta:1,
 202                         slp_alias_valid:1,
 203                         slp_mgmt_url_valid:1,
 204                         slp_lu_vid:1,
 205                         slp_lu_pid:1,
 206                         slp_lu_rev:1,
 207                         slp_serial_valid:1,
 208                         slp_writeback_cache_disable_cur:1,
 209                         slp_writeback_cache_disable_saved:1,
 210                         slp_write_protected:1;
 211         uint16_t        slp_meta_fname_off;
 212         uint16_t        slp_data_fname_off;
 213         uint64_t        slp_lu_size;
 214         uint16_t        slp_serial_off;
 215         uint16_t        slp_blksize;
 216         uint16_t        slp_alias_off;
 217         uint16_t        slp_mgmt_url_off;
 218         uint32_t        slp_buf_size_needed;    /* Upon return */
 219         uint16_t        slp_serial_size;
 220         uint16_t        slp_access_state;
 221         char            slp_rev[4];
 222         char            slp_vid[8];
 223         char            slp_pid[16];
 224         uint8_t         slp_guid[16];
 225         uint8_t         slp_buf[8];     /* likely more than 8 */
 226 } sbd_lu_props_t;
 227 
 | 
 
 
  47         SBD_RET_ZFS_META_CREATE_FAILED,
  48         SBD_ZVOL_META_NAME_MISMATCH,
  49         SBD_RET_DATA_FILE_LOOKUP_FAILED,
  50         SBD_RET_WRONG_META_FILE_TYPE,
  51         SBD_RET_WRONG_DATA_FILE_TYPE,
  52         SBD_RET_DATA_FILE_OPEN_FAILED,
  53         SBD_RET_META_FILE_OPEN_FAILED,
  54         SBD_RET_DATA_FILE_GETATTR_FAILED,
  55         SBD_RET_META_FILE_GETATTR_FAILED,
  56         SBD_RET_FILE_SIZE_ERROR,
  57         SBD_RET_FILE_ALIGN_ERROR,
  58         SBD_RET_SIZE_OUT_OF_RANGE,
  59         SBD_RET_SIZE_NOT_SUPPORTED_BY_FS,
  60         SBD_RET_NO_META,
  61         SBD_RET_VERSION_NOT_SUPPORTED,
  62         SBD_RET_LU_BUSY,
  63         SBD_RET_NOT_FOUND,
  64         SBD_RET_INSUFFICIENT_BUF_SPACE,
  65         SBD_RET_WRITE_CACHE_SET_FAILED,
  66         SBD_RET_ACCESS_STATE_FAILED,
  67         SBD_RET_UNMAP_SET_FAILED,
  68 
  69         SBD_RET_MAX_VAL
  70 } sbd_ret_t;
  71 
  72 #define SBD_IOCTL_DEF(n)        ((((int)0x5B) << 16) | (n))
  73 #define SBD_IOCTL_CREATE_AND_REGISTER_LU                SBD_IOCTL_DEF(1)
  74 #define SBD_IOCTL_IMPORT_LU                             SBD_IOCTL_DEF(2)
  75 #define SBD_IOCTL_DELETE_LU                             SBD_IOCTL_DEF(3)
  76 #define SBD_IOCTL_MODIFY_LU                             SBD_IOCTL_DEF(4)
  77 #define SBD_IOCTL_GET_LU_PROPS                          SBD_IOCTL_DEF(5)
  78 #define SBD_IOCTL_GET_LU_LIST                           SBD_IOCTL_DEF(6)
  79 #define SBD_IOCTL_SET_LU_STANDBY                        SBD_IOCTL_DEF(7)
  80 #define SBD_IOCTL_SET_GLOBAL_LU                         SBD_IOCTL_DEF(8)
  81 #define SBD_IOCTL_GET_GLOBAL_LU                         SBD_IOCTL_DEF(9)
  82 #define SBD_IOCTL_GET_UNMAP_PROPS                       SBD_IOCTL_DEF(10)
  83 
  84 typedef struct sbd_create_and_reg_lu {
  85         uint32_t        slu_struct_size;
  86         uint32_t        slu_meta_fname_valid:1,
  87                         slu_lu_size_valid:1,
  88                         slu_blksize_valid:1,
  89                         slu_vid_valid:1,
  90                         slu_pid_valid:1,
  91                         slu_rev_valid:1,
  92                         slu_serial_valid:1,
  93                         slu_alias_valid:1,
  94                         slu_mgmt_url_valid:1,
  95                         slu_guid_valid:1,
  96                         slu_company_id_valid:1,
  97                         slu_host_id_valid:1,
  98                         slu_writeback_cache_disable_valid:1,
  99                         slu_writeback_cache_disable:1,
 100                         slu_write_protected:1,
 101                         slu_unmap_valid:1,
 102                         slu_unmap:1;
 103         uint32_t        slu_pad1;       /* To preserve 64-bit alignment */
 104         uint16_t        slu_pad2;       /* for the following fields. */
 105         uint16_t        slu_meta_fname_off;
 106         uint64_t        slu_lu_size;
 107         uint16_t        slu_data_fname_off;
 108         uint16_t        slu_serial_off;
 109         uint8_t         slu_serial_size;
 110         uint8_t         slu_ret_filesize_nbits;
 111         uint16_t        slu_blksize;
 112         uint32_t        slu_company_id;
 113         uint16_t        slu_alias_off;
 114         uint16_t        slu_mgmt_url_off;
 115         uint32_t        slu_host_id;
 116         char            slu_rev[4];
 117         char            slu_vid[8];
 118         char            slu_pid[16];
 119         uint8_t         slu_guid[16];
 120         char            slu_buf[8];     /* likely more than 8 */
 121 } sbd_create_and_reg_lu_t;
 122 
 123 typedef struct sbd_global_props {
 124         uint32_t        mlu_struct_size;
 
 151 typedef struct sbd_import_lu {
 152         uint32_t        ilu_struct_size;
 153         uint32_t        ilu_rsvd;
 154         uint8_t         ilu_ret_guid[16];
 155         char            ilu_meta_fname[8]; /* Can be more than 8 */
 156 } sbd_import_lu_t;
 157 
 158 typedef struct sbd_modify_lu {
 159         uint32_t        mlu_struct_size;
 160         uint32_t        mlu_lu_size_valid:1,
 161                         mlu_serial_valid:1,
 162                         mlu_alias_valid:1,
 163                         mlu_mgmt_url_valid:1,
 164                         mlu_writeback_cache_disable_valid:1,
 165                         mlu_writeback_cache_disable:1,
 166                         mlu_write_protected_valid:1,
 167                         mlu_write_protected:1,
 168                         mlu_by_guid:1,
 169                         mlu_by_fname:1,
 170                         mlu_standby_valid:1,
 171                         mlu_standby:1,
 172                         mlu_unmap_valid:1,
 173                         mlu_unmap:1;
 174         uint64_t        mlu_lu_size;
 175         uint16_t        mlu_alias_off;
 176         uint16_t        mlu_mgmt_url_off;
 177         uint16_t        mlu_serial_off;
 178         uint16_t        mlu_serial_size;
 179         uint16_t        mlu_fname_off;
 180         uint16_t        mlu_rsvd1;
 181         uint32_t        mlu_rsvd2;
 182         uint8_t         mlu_input_guid[16];
 183         char            mlu_buf[8]; /* can be more than 8 */
 184 } sbd_modify_lu_t;
 185 
 186 typedef struct sbd_delete_lu {
 187         uint32_t        dlu_struct_size;
 188         uint16_t        dlu_by_guid:1,
 189                         dlu_by_meta_name:1;
 190         uint16_t        dlu_rsvd;
 191         uint8_t         dlu_guid[16];
 192         uint8_t         dlu_meta_name[8];
 193 } sbd_delete_lu_t;
 
 195 /*
 196  * sbd access states
 197  */
 198 #define SBD_LU_ACTIVE                   1
 199 #define SBD_LU_TRANSITION_TO_ACTIVE     2
 200 #define SBD_LU_STANDBY                  3
 201 #define SBD_LU_TRANSITION_TO_STANDBY    4
 202 
 203 typedef struct sbd_lu_props {
 204         uint32_t        slp_input_guid:1,       /* GUID or meta filename */
 205                         slp_separate_meta:1,
 206                         slp_meta_fname_valid:1,
 207                         slp_data_fname_valid:1,
 208                         slp_zfs_meta:1,
 209                         slp_alias_valid:1,
 210                         slp_mgmt_url_valid:1,
 211                         slp_lu_vid:1,
 212                         slp_lu_pid:1,
 213                         slp_lu_rev:1,
 214                         slp_serial_valid:1,
 215                         slp_unmap_cur:1,
 216                         slp_unmap_saved:1,
 217                         slp_writeback_cache_disable_cur:1,
 218                         slp_writeback_cache_disable_saved:1,
 219                         slp_write_protected:1;
 220         uint16_t        slp_meta_fname_off;
 221         uint16_t        slp_data_fname_off;
 222         uint64_t        slp_lu_size;
 223         uint16_t        slp_serial_off;
 224         uint16_t        slp_blksize;
 225         uint16_t        slp_alias_off;
 226         uint16_t        slp_mgmt_url_off;
 227         uint32_t        slp_buf_size_needed;    /* Upon return */
 228         uint16_t        slp_serial_size;
 229         uint16_t        slp_access_state;
 230         char            slp_rev[4];
 231         char            slp_vid[8];
 232         char            slp_pid[16];
 233         uint8_t         slp_guid[16];
 234         uint8_t         slp_buf[8];     /* likely more than 8 */
 235 } sbd_lu_props_t;
 236 
 |