nfs-ganesha 1.4
|
00001 00012 #include "fsal.h" 00013 #include "FSAL/common_functions.h" 00014 00015 #include <libzfswrap.h> 00016 00017 /* libzfswrap handler, used only when the FSAL is created and destroyed */ 00018 extern libzfswrap_handle_t *p_zhd; 00019 00020 typedef struct 00021 { 00022 char *psz_name; 00023 libzfswrap_vfs_t *p_vfs; 00024 unsigned int index; 00025 } snapshot_t; 00026 00027 /* defined the set of attributes supported with POSIX */ 00028 #define POSIX_SUPPORTED_ATTRIBUTES ( \ 00029 FSAL_ATTR_SUPPATTR | FSAL_ATTR_TYPE | FSAL_ATTR_SIZE | \ 00030 FSAL_ATTR_FSID | FSAL_ATTR_FILEID | \ 00031 FSAL_ATTR_MODE | FSAL_ATTR_NUMLINKS | FSAL_ATTR_OWNER | \ 00032 FSAL_ATTR_GROUP | FSAL_ATTR_ATIME | FSAL_ATTR_RAWDEV | \ 00033 FSAL_ATTR_CTIME | FSAL_ATTR_MTIME | FSAL_ATTR_SPACEUSED | \ 00034 FSAL_ATTR_CHGTIME ) 00035 00036 00037 /* the following variables must not be defined in fsal_internal.c */ 00038 #ifndef FSAL_INTERNAL_C 00039 00040 /* static filesystem info. 00041 * read access only. 00042 */ 00043 extern fsal_staticfsinfo_t global_fs_info; 00044 00045 #endif 00046 00050 fsal_status_t fsal_internal_init_global(fsal_init_info_t * fsal_info, 00051 fs_common_initinfo_t * fs_common_info, 00052 fs_specific_initinfo_t * fs_specific_info); 00053 00057 void fsal_increment_nbcall(int function_index, fsal_status_t status); 00058 00062 void fsal_internal_getstats(fsal_statistics_t * output_stats); 00063 00067 void TakeTokenFSCall(); 00068 void ReleaseTokenFSCall(); 00069 00070 /* All the call to FSAL to be wrapped */ 00071 fsal_status_t ZFSFSAL_access(fsal_handle_t * p_object_handle, /* IN */ 00072 fsal_op_context_t * p_context, /* IN */ 00073 fsal_accessflags_t access_type, /* IN */ 00074 fsal_attrib_list_t * p_object_attributes /* [ IN/OUT ] */ ); 00075 00076 fsal_status_t ZFSFSAL_getattrs(fsal_handle_t * p_filehandle, /* IN */ 00077 fsal_op_context_t * p_context, /* IN */ 00078 fsal_attrib_list_t * p_object_attributes /* IN/OUT */ ); 00079 00080 fsal_status_t ZFSFSAL_setattrs(fsal_handle_t * p_filehandle, /* IN */ 00081 fsal_op_context_t * p_context, /* IN */ 00082 fsal_attrib_list_t * p_attrib_set, /* IN */ 00083 fsal_attrib_list_t * 00084 p_object_attributes /* [ IN/OUT ] */ ); 00085 00086 fsal_status_t ZFSFSAL_BuildExportContext(fsal_export_context_t * p_export_context, /* OUT */ 00087 fsal_path_t * p_export_path, /* IN */ 00088 char *fs_specific_options /* IN */ ); 00089 00090 fsal_status_t ZFSFSAL_create(fsal_handle_t * p_parent_directory_handle, /* IN */ 00091 fsal_name_t * p_filename, /* IN */ 00092 fsal_op_context_t * p_context, /* IN */ 00093 fsal_accessmode_t accessmode, /* IN */ 00094 fsal_handle_t * p_object_handle, /* OUT */ 00095 fsal_attrib_list_t * p_object_attributes /* [ IN/OUT ] */ ); 00096 00097 fsal_status_t ZFSFSAL_mkdir(fsal_handle_t * p_parent_directory_handle, /* IN */ 00098 fsal_name_t * p_dirname, /* IN */ 00099 fsal_op_context_t * p_context, /* IN */ 00100 fsal_accessmode_t accessmode, /* IN */ 00101 fsal_handle_t * p_object_handle, /* OUT */ 00102 fsal_attrib_list_t * p_object_attributes /* [ IN/OUT ] */ ); 00103 00104 fsal_status_t ZFSFSAL_link(fsal_handle_t * p_target_handle, /* IN */ 00105 fsal_handle_t * p_dir_handle, /* IN */ 00106 fsal_name_t * p_link_name, /* IN */ 00107 fsal_op_context_t * p_context, /* IN */ 00108 fsal_attrib_list_t * p_attributes /* [ IN/OUT ] */ ); 00109 00110 fsal_status_t ZFSFSAL_mknode(fsal_handle_t * parentdir_handle, /* IN */ 00111 fsal_name_t * p_node_name, /* IN */ 00112 fsal_op_context_t * p_context, /* IN */ 00113 fsal_accessmode_t accessmode, /* IN */ 00114 fsal_nodetype_t nodetype, /* IN */ 00115 fsal_dev_t * dev, /* IN */ 00116 fsal_handle_t * p_object_handle, /* OUT (handle to the created node) */ 00117 fsal_attrib_list_t * node_attributes /* [ IN/OUT ] */ ); 00118 00119 fsal_status_t ZFSFSAL_opendir(fsal_handle_t * p_dir_handle, /* IN */ 00120 fsal_op_context_t * p_context, /* IN */ 00121 fsal_dir_t * p_dir_descriptor, /* OUT */ 00122 fsal_attrib_list_t * p_dir_attributes /* [ IN/OUT ] */ ); 00123 00124 fsal_status_t ZFSFSAL_readdir(fsal_dir_t * p_dir_descriptor, /* IN */ 00125 fsal_cookie_t start_position, /* IN */ 00126 fsal_attrib_mask_t get_attr_mask, /* IN */ 00127 fsal_mdsize_t buffersize, /* IN */ 00128 fsal_dirent_t * p_pdirent, /* OUT */ 00129 fsal_cookie_t * p_end_position, /* OUT */ 00130 fsal_count_t * p_nb_entries, /* OUT */ 00131 fsal_boolean_t * p_end_of_dir /* OUT */ ); 00132 00133 fsal_status_t ZFSFSAL_closedir(fsal_dir_t * p_dir_descriptor /* IN */ ); 00134 00135 fsal_status_t ZFSFSAL_open_by_name(fsal_handle_t * dirhandle, /* IN */ 00136 fsal_name_t * filename, /* IN */ 00137 fsal_op_context_t * p_context, /* IN */ 00138 fsal_openflags_t openflags, /* IN */ 00139 fsal_file_t * file_descriptor, /* OUT */ 00140 fsal_attrib_list_t * 00141 file_attributes /* [ IN/OUT ] */ ); 00142 00143 fsal_status_t ZFSFSAL_open(fsal_handle_t * p_filehandle, /* IN */ 00144 fsal_op_context_t * p_context, /* IN */ 00145 fsal_openflags_t openflags, /* IN */ 00146 fsal_file_t * p_file_descriptor, /* OUT */ 00147 fsal_attrib_list_t * p_file_attributes /* [ IN/OUT ] */ ); 00148 00149 fsal_status_t ZFSFSAL_read(fsal_file_t * p_file_descriptor, /* IN */ 00150 fsal_seek_t * p_seek_descriptor, /* [IN] */ 00151 fsal_size_t buffer_size, /* IN */ 00152 caddr_t buffer, /* OUT */ 00153 fsal_size_t * p_read_amount, /* OUT */ 00154 fsal_boolean_t * p_end_of_file /* OUT */ ); 00155 00156 fsal_status_t ZFSFSAL_write(fsal_file_t * p_file_descriptor, /* IN */ 00157 fsal_op_context_t * p_context, /* IN */ 00158 fsal_seek_t * p_seek_descriptor, /* IN */ 00159 fsal_size_t buffer_size, /* IN */ 00160 caddr_t buffer, /* IN */ 00161 fsal_size_t * p_write_amount /* OUT */ ); 00162 00163 fsal_status_t ZFSFSAL_close(fsal_file_t * p_file_descriptor /* IN */ ); 00164 00165 fsal_status_t ZFSFSAL_dynamic_fsinfo(fsal_handle_t * p_filehandle, /* IN */ 00166 fsal_op_context_t * p_context, /* IN */ 00167 fsal_dynamicfsinfo_t * p_dynamicinfo /* OUT */ ); 00168 00169 fsal_status_t ZFSFSAL_Init(fsal_parameter_t * init_info /* IN */ ); 00170 00171 fsal_status_t ZFSFSAL_terminate(); 00172 00173 fsal_status_t ZFSFSAL_test_access(fsal_op_context_t * p_context, /* IN */ 00174 fsal_accessflags_t access_type, /* IN */ 00175 fsal_attrib_list_t * p_object_attributes /* IN */ ); 00176 00177 fsal_status_t ZFSFSAL_lookup(fsal_handle_t * p_parent_directory_handle, /* IN */ 00178 fsal_name_t * p_filename, /* IN */ 00179 fsal_op_context_t * p_context, /* IN */ 00180 fsal_handle_t * p_object_handle, /* OUT */ 00181 fsal_attrib_list_t * p_object_attributes /* [ IN/OUT ] */ ); 00182 00183 fsal_status_t ZFSFSAL_lookupPath(fsal_path_t * p_path, /* IN */ 00184 fsal_op_context_t * p_context, /* IN */ 00185 fsal_handle_t * object_handle, /* OUT */ 00186 fsal_attrib_list_t * 00187 p_object_attributes /* [ IN/OUT ] */ ); 00188 00189 fsal_status_t ZFSFSAL_lookupJunction(fsal_handle_t * p_junction_handle, /* IN */ 00190 fsal_op_context_t * p_context, /* IN */ 00191 fsal_handle_t * p_fsoot_handle, /* OUT */ 00192 fsal_attrib_list_t * 00193 p_fsroot_attributes /* [ IN/OUT ] */ ); 00194 00195 fsal_status_t ZFSFSAL_rcp(fsal_handle_t * filehandle, /* IN */ 00196 fsal_op_context_t * p_context, /* IN */ 00197 fsal_path_t * p_local_path, /* IN */ 00198 fsal_rcpflag_t transfer_opt /* IN */ ); 00199 00200 fsal_status_t ZFSFSAL_rename(fsal_handle_t * p_old_parentdir_handle, /* IN */ 00201 fsal_name_t * p_old_name, /* IN */ 00202 fsal_handle_t * p_new_parentdir_handle, /* IN */ 00203 fsal_name_t * p_new_name, /* IN */ 00204 fsal_op_context_t * p_context, /* IN */ 00205 fsal_attrib_list_t * p_src_dir_attributes, /* [ IN/OUT ] */ 00206 fsal_attrib_list_t * p_tgt_dir_attributes /* [ IN/OUT ] */ ); 00207 00208 void ZFSFSAL_get_stats(fsal_statistics_t * stats, /* OUT */ 00209 fsal_boolean_t reset /* IN */ ); 00210 00211 fsal_status_t ZFSFSAL_readlink(fsal_handle_t * p_linkhandle, /* IN */ 00212 fsal_op_context_t * p_context, /* IN */ 00213 fsal_path_t * p_link_content, /* OUT */ 00214 fsal_attrib_list_t * p_link_attributes /* [ IN/OUT ] */ ); 00215 00216 fsal_status_t ZFSFSAL_symlink(fsal_handle_t * p_parent_directory_handle, /* IN */ 00217 fsal_name_t * p_linkname, /* IN */ 00218 fsal_path_t * p_linkcontent, /* IN */ 00219 fsal_op_context_t * p_context, /* IN */ 00220 fsal_accessmode_t accessmode, /* IN (ignored) */ 00221 fsal_handle_t * p_link_handle, /* OUT */ 00222 fsal_attrib_list_t * p_link_attributes /* [ IN/OUT ] */ ); 00223 00224 int ZFSFSAL_handlecmp(fsal_handle_t * handle1, fsal_handle_t * handle2, 00225 fsal_status_t * status); 00226 00227 unsigned int ZFSFSAL_Handle_to_HashIndex(fsal_handle_t * p_handle, 00228 unsigned int cookie, 00229 unsigned int alphabet_len, 00230 unsigned int index_size); 00231 00232 unsigned int ZFSFSAL_Handle_to_RBTIndex(fsal_handle_t * p_handle, unsigned int cookie); 00233 00234 fsal_status_t ZFSFSAL_DigestHandle(fsal_export_context_t * exp_context, /* IN */ 00235 fsal_digesttype_t output_type, /* IN */ 00236 fsal_handle_t *in_fsal_handle, /* IN */ 00237 struct fsal_handle_desc *fh_desc /* IN/OUT */ ) ; 00238 00239 fsal_status_t ZFSFSAL_ExpandHandle(fsal_export_context_t * p_expcontext, /* IN not used */ 00240 fsal_digesttype_t in_type, /* IN */ 00241 struct fsal_handle_desc *fh_desc /* IN/OUT */ ) ; 00242 00243 fsal_status_t ZFSFSAL_SetDefault_FS_specific_parameter(fsal_parameter_t * out_parameter); 00244 00245 fsal_status_t ZFSFSAL_load_FS_specific_parameter_from_conf(config_file_t in_config, 00246 fsal_parameter_t * 00247 out_parameter); 00248 00249 fsal_status_t ZFSFSAL_truncate(fsal_handle_t * p_filehandle, /* IN */ 00250 fsal_op_context_t * p_context, /* IN */ 00251 fsal_size_t length, /* IN */ 00252 fsal_file_t * file_descriptor, /* Unused in this FSAL */ 00253 fsal_attrib_list_t * 00254 p_object_attributes /* [ IN/OUT ] */ ); 00255 00256 fsal_status_t ZFSFSAL_unlink(fsal_handle_t * p_parent_directory_handle, /* IN */ 00257 fsal_name_t * p_object_name, /* IN */ 00258 fsal_op_context_t * p_context, /* IN */ 00259 fsal_attrib_list_t * 00260 p_parent_directory_attributes /* [IN/OUT ] */ ); 00261 00262 char *ZFSFSAL_GetFSName(); 00263 00264 fsal_status_t ZFSFSAL_GetXAttrAttrs(fsal_handle_t * p_objecthandle, /* IN */ 00265 fsal_op_context_t * p_context, /* IN */ 00266 unsigned int xattr_id, /* IN */ 00267 fsal_attrib_list_t * p_attrs); 00268 00269 fsal_status_t ZFSFSAL_ListXAttrs(fsal_handle_t * p_objecthandle, /* IN */ 00270 unsigned int cookie, /* IN */ 00271 fsal_op_context_t * p_context, /* IN */ 00272 fsal_xattrent_t * xattrs_tab, /* IN/OUT */ 00273 unsigned int xattrs_tabsize, /* IN */ 00274 unsigned int *p_nb_returned, /* OUT */ 00275 int *end_of_list /* OUT */ ); 00276 00277 fsal_status_t ZFSFSAL_GetXAttrValueById(fsal_handle_t * p_objecthandle, /* IN */ 00278 unsigned int xattr_id, /* IN */ 00279 fsal_op_context_t * p_context, /* IN */ 00280 caddr_t buffer_addr, /* IN/OUT */ 00281 size_t buffer_size, /* IN */ 00282 size_t * p_output_size /* OUT */ ); 00283 00284 fsal_status_t ZFSFSAL_GetXAttrIdByName(fsal_handle_t * p_objecthandle, /* IN */ 00285 const fsal_name_t * xattr_name, /* IN */ 00286 fsal_op_context_t * p_context, /* IN */ 00287 unsigned int *pxattr_id /* OUT */ ); 00288 00289 fsal_status_t ZFSFSAL_GetXAttrValueByName(fsal_handle_t * p_objecthandle, /* IN */ 00290 const fsal_name_t * xattr_name, /* IN */ 00291 fsal_op_context_t * p_context, /* IN */ 00292 caddr_t buffer_addr, /* IN/OUT */ 00293 size_t buffer_size, /* IN */ 00294 size_t * p_output_size /* OUT */ ); 00295 00296 fsal_status_t ZFSFSAL_SetXAttrValue(fsal_handle_t * p_objecthandle, /* IN */ 00297 const fsal_name_t * xattr_name, /* IN */ 00298 fsal_op_context_t * p_context, /* IN */ 00299 caddr_t buffer_addr, /* IN */ 00300 size_t buffer_size, /* IN */ 00301 int create /* IN */ ); 00302 00303 fsal_status_t ZFSFSAL_SetXAttrValueById(fsal_handle_t * p_objecthandle, /* IN */ 00304 unsigned int xattr_id, /* IN */ 00305 fsal_op_context_t * p_context, /* IN */ 00306 caddr_t buffer_addr, /* IN */ 00307 size_t buffer_size /* IN */ ); 00308 00309 fsal_status_t ZFSFSAL_RemoveXAttrById(fsal_handle_t * p_objecthandle, /* IN */ 00310 fsal_op_context_t * p_context, /* IN */ 00311 unsigned int xattr_id) /* IN */ ; 00312 00313 fsal_status_t ZFSFSAL_RemoveXAttrByName(fsal_handle_t * p_objecthandle, /* IN */ 00314 fsal_op_context_t * p_context, /* IN */ 00315 const fsal_name_t * xattr_name) /* IN */ ; 00316 00317 int ZFSFSAL_GetXattrOffsetSetable( void ) ; 00318 00319 unsigned int ZFSFSAL_GetFileno(fsal_file_t * pfile); 00320 00321 fsal_status_t ZFSFSAL_getextattrs(fsal_handle_t * p_filehandle, /* IN */ 00322 fsal_op_context_t * p_context, /* IN */ 00323 fsal_extattrib_list_t * p_object_attributes /* OUT */) ; 00324 00325 fsal_status_t ZFSFSAL_commit( fsal_file_t * p_file_descriptor, 00326 fsal_off_t offset, 00327 fsal_size_t size ) ; 00328 00329