nfs-ganesha 1.4
|
00001 00012 #include "fsal.h" 00013 #include <sys/stat.h> 00014 #include "FSAL/common_functions.h" 00015 00016 #ifdef _PNFS 00017 #include "fsal_pnfs.h" 00018 #endif /* _PNFS */ 00019 00020 /* defined the set of attributes supported with POSIX */ 00021 #define POSIX_SUPPORTED_ATTRIBUTES ( \ 00022 FSAL_ATTR_SUPPATTR | FSAL_ATTR_TYPE | FSAL_ATTR_SIZE | \ 00023 FSAL_ATTR_FSID | FSAL_ATTR_FILEID | \ 00024 FSAL_ATTR_MODE | FSAL_ATTR_NUMLINKS | FSAL_ATTR_OWNER | \ 00025 FSAL_ATTR_GROUP | FSAL_ATTR_ATIME | FSAL_ATTR_RAWDEV | \ 00026 FSAL_ATTR_CTIME | FSAL_ATTR_MTIME | FSAL_ATTR_SPACEUSED | \ 00027 FSAL_ATTR_CHGTIME ) 00028 00029 /* the following variables must not be defined in fsal_internal.c */ 00030 #ifndef FSAL_INTERNAL_C 00031 00032 /* static filesystem info. 00033 * read access only. 00034 */ 00035 extern fsal_staticfsinfo_t global_fs_info; 00036 00037 00038 #endif 00039 00043 fsal_status_t fsal_internal_init_global(fsal_init_info_t * fsal_info, 00044 fs_common_initinfo_t * fs_common_info, 00045 fs_specific_initinfo_t * fs_specific_info); 00046 00050 void fsal_increment_nbcall(int function_index, fsal_status_t status); 00051 00055 void fsal_internal_getstats(fsal_statistics_t * output_stats); 00056 00060 void TakeTokenFSCall(); 00061 void ReleaseTokenFSCall(); 00062 00066 fsal_status_t fsal_internal_appendNameToPath(fsal_path_t * p_path, 00067 const fsal_name_t * p_name); 00068 00072 fsal_status_t fsal_internal_Handle2FidPath(fsal_op_context_t * p_context, /* IN */ 00073 fsal_handle_t * p_handle, /* IN */ 00074 fsal_path_t * p_fsalpath /* OUT */ ); 00075 00079 fsal_status_t fsal_internal_Path2Handle(fsal_op_context_t * p_context, /* IN */ 00080 fsal_path_t * p_fsalpath, /* IN */ 00081 fsal_handle_t * p_handle /* OUT */ ); 00082 00087 fsal_status_t fsal_internal_testAccess(fsal_op_context_t * p_context, /* IN */ 00088 fsal_accessflags_t access_type, /* IN */ 00089 struct stat *p_buffstat, /* IN, optional */ 00090 fsal_attrib_list_t * 00091 p_object_attributes /* IN, optional */ ); 00092 00093 /* All the call to FSAL to be wrapped */ 00094 fsal_status_t LUSTREFSAL_access(fsal_handle_t * p_object_handle, /* IN */ 00095 fsal_op_context_t * p_context, /* IN */ 00096 fsal_accessflags_t access_type, /* IN */ 00097 fsal_attrib_list_t * 00098 p_object_attributes /* [ IN/OUT ] */ ); 00099 00100 fsal_status_t LUSTREFSAL_getattrs(fsal_handle_t * p_filehandle, /* IN */ 00101 fsal_op_context_t * p_context, /* IN */ 00102 fsal_attrib_list_t * p_object_attributes /* IN/OUT */ ); 00103 00104 fsal_status_t LUSTREFSAL_setattrs(fsal_handle_t * p_filehandle, /* IN */ 00105 fsal_op_context_t * p_context, /* IN */ 00106 fsal_attrib_list_t * p_attrib_set, /* IN */ 00107 fsal_attrib_list_t * 00108 p_object_attributes /* [ IN/OUT ] */ ); 00109 00110 fsal_status_t LUSTREFSAL_BuildExportContext(fsal_export_context_t * p_export_context, /* OUT */ 00111 fsal_path_t * p_export_path, /* IN */ 00112 char *fs_specific_options /* IN */ ); 00113 00114 fsal_status_t LUSTREFSAL_create(fsal_handle_t * p_parent_directory_handle, /* IN */ 00115 fsal_name_t * p_filename, /* IN */ 00116 fsal_op_context_t * p_context, /* IN */ 00117 fsal_accessmode_t accessmode, /* IN */ 00118 fsal_handle_t * p_object_handle, /* OUT */ 00119 fsal_attrib_list_t * 00120 p_object_attributes /* [ IN/OUT ] */ ); 00121 00122 fsal_status_t LUSTREFSAL_mkdir(fsal_handle_t * p_parent_directory_handle, /* IN */ 00123 fsal_name_t * p_dirname, /* IN */ 00124 fsal_op_context_t * p_context, /* IN */ 00125 fsal_accessmode_t accessmode, /* IN */ 00126 fsal_handle_t * p_object_handle, /* OUT */ 00127 fsal_attrib_list_t * 00128 p_object_attributes /* [ IN/OUT ] */ ); 00129 00130 fsal_status_t LUSTREFSAL_link(fsal_handle_t * p_target_handle, /* IN */ 00131 fsal_handle_t * p_dir_handle, /* IN */ 00132 fsal_name_t * p_link_name, /* IN */ 00133 fsal_op_context_t * p_context, /* IN */ 00134 fsal_attrib_list_t * p_attributes /* [ IN/OUT ] */ ); 00135 00136 fsal_status_t LUSTREFSAL_mknode(fsal_handle_t * parentdir_handle, /* IN */ 00137 fsal_name_t * p_node_name, /* IN */ 00138 fsal_op_context_t * p_context, /* IN */ 00139 fsal_accessmode_t accessmode, /* IN */ 00140 fsal_nodetype_t nodetype, /* IN */ 00141 fsal_dev_t * dev, /* IN */ 00142 fsal_handle_t * p_object_handle, /* OUT (handle to the created node) */ 00143 fsal_attrib_list_t * node_attributes /* [ IN/OUT ] */ ); 00144 00145 fsal_status_t LUSTREFSAL_opendir(fsal_handle_t * p_dir_handle, /* IN */ 00146 fsal_op_context_t * p_context, /* IN */ 00147 fsal_dir_t * p_dir_descriptor, /* OUT */ 00148 fsal_attrib_list_t * p_dir_attributes /* [ IN/OUT ] */ ); 00149 00150 fsal_status_t LUSTREFSAL_readdir(fsal_dir_t * p_dir_descriptor, /* IN */ 00151 fsal_cookie_t start_position, /* IN */ 00152 fsal_attrib_mask_t get_attr_mask, /* IN */ 00153 fsal_mdsize_t buffersize, /* IN */ 00154 fsal_dirent_t * p_pdirent, /* OUT */ 00155 fsal_cookie_t * p_end_position, /* OUT */ 00156 fsal_count_t * p_nb_entries, /* OUT */ 00157 fsal_boolean_t * p_end_of_dir /* OUT */ ); 00158 00159 fsal_status_t LUSTREFSAL_closedir(fsal_dir_t * p_dir_descriptor /* IN */ ); 00160 00161 fsal_status_t LUSTREFSAL_open_by_name(fsal_handle_t * dirhandle, /* IN */ 00162 fsal_name_t * filename, /* IN */ 00163 fsal_op_context_t * p_context, /* IN */ 00164 fsal_openflags_t openflags, /* IN */ 00165 fsal_file_t * file_descriptor, /* OUT */ 00166 fsal_attrib_list_t * 00167 file_attributes /* [ IN/OUT ] */ ); 00168 00169 fsal_status_t LUSTREFSAL_open(fsal_handle_t * p_filehandle, /* IN */ 00170 fsal_op_context_t * p_context, /* IN */ 00171 fsal_openflags_t openflags, /* IN */ 00172 fsal_file_t * p_file_descriptor, /* OUT */ 00173 fsal_attrib_list_t * p_file_attributes /* [ IN/OUT ] */ ); 00174 00175 fsal_status_t LUSTREFSAL_read(fsal_file_t * p_file_descriptor, /* IN */ 00176 fsal_seek_t * p_seek_descriptor, /* [IN] */ 00177 fsal_size_t buffer_size, /* IN */ 00178 caddr_t buffer, /* OUT */ 00179 fsal_size_t * p_read_amount, /* OUT */ 00180 fsal_boolean_t * p_end_of_file /* OUT */ ); 00181 00182 fsal_status_t LUSTREFSAL_write(fsal_file_t * p_file_descriptor, /* IN */ 00183 fsal_op_context_t * p_context, /* IN */ 00184 fsal_seek_t * p_seek_descriptor, /* IN */ 00185 fsal_size_t buffer_size, /* IN */ 00186 caddr_t buffer, /* IN */ 00187 fsal_size_t * p_write_amount /* OUT */ ); 00188 00189 fsal_status_t LUSTREFSAL_commit( fsal_file_t * p_file_descriptor, 00190 fsal_off_t offset, 00191 fsal_size_t size ) ; 00192 00193 fsal_status_t LUSTREFSAL_close(fsal_file_t * p_file_descriptor /* IN */ ); 00194 00195 fsal_status_t LUSTREFSAL_dynamic_fsinfo(fsal_handle_t * p_filehandle, /* IN */ 00196 fsal_op_context_t * p_context, /* IN */ 00197 fsal_dynamicfsinfo_t * p_dynamicinfo /* OUT */ ); 00198 00199 fsal_status_t LUSTREFSAL_Init(fsal_parameter_t * init_info /* IN */ ); 00200 00201 fsal_status_t LUSTREFSAL_test_access(fsal_op_context_t * p_context, /* IN */ 00202 fsal_accessflags_t access_type, /* IN */ 00203 fsal_attrib_list_t * p_object_attributes /* IN */ ); 00204 00205 fsal_status_t LUSTREFSAL_lookup(fsal_handle_t * p_parent_directory_handle, /* IN */ 00206 fsal_name_t * p_filename, /* IN */ 00207 fsal_op_context_t * p_context, /* IN */ 00208 fsal_handle_t * p_object_handle, /* OUT */ 00209 fsal_attrib_list_t * 00210 p_object_attributes /* [ IN/OUT ] */ ); 00211 00212 fsal_status_t LUSTREFSAL_lookupPath(fsal_path_t * p_path, /* IN */ 00213 fsal_op_context_t * p_context, /* IN */ 00214 fsal_handle_t * object_handle, /* OUT */ 00215 fsal_attrib_list_t * 00216 p_object_attributes /* [ IN/OUT ] */ ); 00217 00218 fsal_status_t LUSTREFSAL_lookupJunction(fsal_handle_t * p_junction_handle, /* IN */ 00219 fsal_op_context_t * p_context, /* IN */ 00220 fsal_handle_t * p_fsoot_handle, /* OUT */ 00221 fsal_attrib_list_t * 00222 p_fsroot_attributes /* [ IN/OUT ] */ ); 00223 00224 fsal_status_t LUSTREFSAL_rcp(fsal_handle_t * filehandle, /* IN */ 00225 fsal_op_context_t * p_context, /* IN */ 00226 fsal_path_t * p_local_path, /* IN */ 00227 fsal_rcpflag_t transfer_opt /* IN */ ); 00228 00229 fsal_status_t LUSTREFSAL_rename(fsal_handle_t * p_old_parentdir_handle, /* IN */ 00230 fsal_name_t * p_old_name, /* IN */ 00231 fsal_handle_t * p_new_parentdir_handle, /* IN */ 00232 fsal_name_t * p_new_name, /* IN */ 00233 fsal_op_context_t * p_context, /* IN */ 00234 fsal_attrib_list_t * p_src_dir_attributes, /* [ IN/OUT ] */ 00235 fsal_attrib_list_t * 00236 p_tgt_dir_attributes /* [ IN/OUT ] */ ); 00237 00238 void LUSTREFSAL_get_stats(fsal_statistics_t * stats, /* OUT */ 00239 fsal_boolean_t reset /* IN */ ); 00240 00241 fsal_status_t LUSTREFSAL_readlink(fsal_handle_t * p_linkhandle, /* IN */ 00242 fsal_op_context_t * p_context, /* IN */ 00243 fsal_path_t * p_link_content, /* OUT */ 00244 fsal_attrib_list_t * 00245 p_link_attributes /* [ IN/OUT ] */ ); 00246 00247 fsal_status_t LUSTREFSAL_symlink(fsal_handle_t * p_parent_directory_handle, /* IN */ 00248 fsal_name_t * p_linkname, /* IN */ 00249 fsal_path_t * p_linkcontent, /* IN */ 00250 fsal_op_context_t * p_context, /* IN */ 00251 fsal_accessmode_t accessmode, /* IN (ignored) */ 00252 fsal_handle_t * p_link_handle, /* OUT */ 00253 fsal_attrib_list_t * 00254 p_link_attributes /* [ IN/OUT ] */ ); 00255 00256 int LUSTREFSAL_handlecmp(fsal_handle_t * handle1, fsal_handle_t * handle2, 00257 fsal_status_t * status); 00258 00259 unsigned int LUSTREFSAL_Handle_to_HashIndex(fsal_handle_t * p_handle, 00260 unsigned int cookie, 00261 unsigned int alphabet_len, 00262 unsigned int index_size); 00263 00264 unsigned int LUSTREFSAL_Handle_to_RBTIndex(fsal_handle_t * p_handle, 00265 unsigned int cookie); 00266 00267 fsal_status_t LUSTREFSAL_DigestHandle(fsal_export_context_t * exp_context, /* IN */ 00268 fsal_digesttype_t output_type, /* IN */ 00269 fsal_handle_t *in_fsal_handle, /* IN */ 00270 struct fsal_handle_desc *fh_desc /* IN/OUT */ ) ; 00271 00272 fsal_status_t LUSTREFSAL_ExpandHandle(fsal_export_context_t * p_expcontext, /* IN not used */ 00273 fsal_digesttype_t in_type, /* IN */ 00274 struct fsal_handle_desc *fh_desc /* IN/OUT */ ) ; 00275 00276 fsal_status_t LUSTREFSAL_SetDefault_FS_specific_parameter(fsal_parameter_t * 00277 out_parameter); 00278 00279 fsal_status_t LUSTREFSAL_load_FS_specific_parameter_from_conf(config_file_t in_config, 00280 fsal_parameter_t * 00281 out_parameter); 00282 00283 fsal_status_t LUSTREFSAL_truncate(fsal_handle_t * p_filehandle, /* IN */ 00284 fsal_op_context_t * p_context, /* IN */ 00285 fsal_size_t length, /* IN */ 00286 fsal_file_t * file_descriptor, /* Unused in this FSAL */ 00287 fsal_attrib_list_t * 00288 p_object_attributes /* [ IN/OUT ] */ ); 00289 00290 fsal_status_t LUSTREFSAL_unlink(fsal_handle_t * p_parent_directory_handle, /* IN */ 00291 fsal_name_t * p_object_name, /* IN */ 00292 fsal_op_context_t * p_context, /* IN */ 00293 fsal_attrib_list_t * 00294 p_parent_directory_attributes /* [IN/OUT ] */ ); 00295 00296 char *LUSTREFSAL_GetFSName(); 00297 00298 fsal_status_t LUSTREFSAL_GetXAttrAttrs(fsal_handle_t * p_objecthandle, /* IN */ 00299 fsal_op_context_t * p_context, /* IN */ 00300 unsigned int xattr_id, /* IN */ 00301 fsal_attrib_list_t * p_attrs); 00302 00303 fsal_status_t LUSTREFSAL_ListXAttrs(fsal_handle_t * p_objecthandle, /* IN */ 00304 unsigned int cookie, /* IN */ 00305 fsal_op_context_t * p_context, /* IN */ 00306 fsal_xattrent_t * xattrs_tab, /* IN/OUT */ 00307 unsigned int xattrs_tabsize, /* IN */ 00308 unsigned int *p_nb_returned, /* OUT */ 00309 int *end_of_list /* OUT */ ); 00310 00311 fsal_status_t LUSTREFSAL_GetXAttrValueById(fsal_handle_t * p_objecthandle, /* IN */ 00312 unsigned int xattr_id, /* IN */ 00313 fsal_op_context_t * p_context, /* IN */ 00314 caddr_t buffer_addr, /* IN/OUT */ 00315 size_t buffer_size, /* IN */ 00316 size_t * p_output_size /* OUT */ ); 00317 00318 fsal_status_t LUSTREFSAL_GetXAttrIdByName(fsal_handle_t * p_objecthandle, /* IN */ 00319 const fsal_name_t * xattr_name, /* IN */ 00320 fsal_op_context_t * p_context, /* IN */ 00321 unsigned int *pxattr_id /* OUT */ ); 00322 00323 fsal_status_t LUSTREFSAL_GetXAttrValueByName(fsal_handle_t * p_objecthandle, /* IN */ 00324 const fsal_name_t * xattr_name, /* IN */ 00325 fsal_op_context_t * p_context, /* IN */ 00326 caddr_t buffer_addr, /* IN/OUT */ 00327 size_t buffer_size, /* IN */ 00328 size_t * p_output_size /* OUT */ ); 00329 00330 fsal_status_t LUSTREFSAL_SetXAttrValue(fsal_handle_t * p_objecthandle, /* IN */ 00331 const fsal_name_t * xattr_name, /* IN */ 00332 fsal_op_context_t * p_context, /* IN */ 00333 caddr_t buffer_addr, /* IN */ 00334 size_t buffer_size, /* IN */ 00335 int create /* IN */ ); 00336 00337 fsal_status_t LUSTREFSAL_SetXAttrValueById(fsal_handle_t * p_objecthandle, /* IN */ 00338 unsigned int xattr_id, /* IN */ 00339 fsal_op_context_t * p_context, /* IN */ 00340 caddr_t buffer_addr, /* IN */ 00341 size_t buffer_size /* IN */ ); 00342 00343 fsal_status_t LUSTREFSAL_RemoveXAttrById(fsal_handle_t * p_objecthandle, /* IN */ 00344 fsal_op_context_t * p_context, /* IN */ 00345 unsigned int xattr_id) /* IN */ ; 00346 00347 fsal_status_t LUSTREFSAL_RemoveXAttrByName(fsal_handle_t * p_objecthandle, /* IN */ 00348 fsal_op_context_t * p_context, /* IN */ 00349 const fsal_name_t * xattr_name) /* IN */ ; 00350 00351 int LUSTREFSAL_GetXattrOffsetSetable( void ) ; 00352 00353 fsal_status_t LUSTREFSAL_lock_op( fsal_file_t * p_file_descriptor, /* IN */ 00354 fsal_handle_t * p_filehandle, /* IN */ 00355 fsal_op_context_t * p_context, /* IN */ 00356 void * p_owner, /* IN (opaque to FSAL) */ 00357 fsal_lock_op_t lock_op, /* IN */ 00358 fsal_lock_param_t request_lock, /* IN */ 00359 fsal_lock_param_t * conflicting_lock) /* OUT */ ; 00360 00361 fsal_status_t LUSTREFSAL_set_quota(fsal_path_t * pfsal_path, /* IN */ 00362 int quota_type, /* IN */ 00363 fsal_uid_t fsal_uid, /* IN */ 00364 fsal_quota_t * pquota, /* IN */ 00365 fsal_quota_t * presquota) ; /* OUT */ 00366 00367 fsal_status_t LUSTREFSAL_get_quota(fsal_path_t * pfsal_path, /* IN */ 00368 int quota_type, /* IN */ 00369 fsal_uid_t fsal_uid, /* IN */ 00370 fsal_quota_t * pquota) ; /* OUT */ 00371 00372 fsal_status_t LUSTREFSAL_check_quota( char *path, /* IN */ 00373 fsal_quota_type_t quota_type, 00374 fsal_uid_t fsal_uid); /* IN */ 00375 00376 unsigned int LUSTREFSAL_GetFileno(fsal_file_t * pfile); 00377 #ifdef _PNFS_MDS 00378 nfsstat4 LUSTREFSAL_MDS_init( ) ; 00379 nfsstat4 LUSTREFSAL_MDS_terminate( ) ; 00380 00381 nfsstat4 LUSTREFSAL_layoutget(fsal_handle_t *exhandle, 00382 fsal_op_context_t *excontext, 00383 XDR *loc_body, 00384 const struct fsal_layoutget_arg *arg, 00385 struct fsal_layoutget_res *res); 00386 nfsstat4 LUSTREFSAL_layoutreturn(fsal_handle_t* handle, 00387 fsal_op_context_t* context, 00388 XDR *lrf_body, 00389 const struct fsal_layoutreturn_arg *arg); 00390 nfsstat4 LUSTREFSAL_layoutcommit(fsal_handle_t *handle, 00391 fsal_op_context_t *context, 00392 XDR *lou_body, 00393 const struct fsal_layoutcommit_arg *arg, 00394 struct fsal_layoutcommit_res *res); 00395 nfsstat4 LUSTREFSAL_getdeviceinfo(fsal_op_context_t *context, 00396 XDR* da_addr_body, 00397 layouttype4 type, 00398 const struct pnfs_deviceid *deviceid); 00399 nfsstat4 LUSTREFSAL_getdevicelist(fsal_handle_t *handle, 00400 fsal_op_context_t *context, 00401 const struct fsal_getdevicelist_arg *arg, 00402 struct fsal_getdevicelist_res *res); 00403 #endif /* _PNFS_MDS */ 00404 00405 #ifdef _PNFS_DS 00406 00407 fsal_status_t LUSTREFSAL_load_pnfs_parameter_from_conf(config_file_t in_config, 00408 lustre_pnfs_parameter_t * out_parameter); 00409 00410 nfsstat4 LUSTREFSAL_DS_init( lustre_pnfs_parameter_t *pparam ) ; 00411 00412 nfsstat4 LUSTREFSAL_DS_terminate( void ) ; 00413 00414 nfsstat4 LUSTREFSAL_DS_read(fsal_handle_t *handle, 00415 fsal_op_context_t *context, 00416 const stateid4 *stateid, 00417 offset4 offset, 00418 count4 requested_length, 00419 caddr_t buffer, 00420 count4 *supplied_length, 00421 fsal_boolean_t *end_of_file); 00422 00423 nfsstat4 LUSTREFSAL_DS_write(fsal_handle_t *handle, 00424 fsal_op_context_t *context, 00425 const stateid4 *stateid, 00426 offset4 offset, 00427 count4 write_length, 00428 caddr_t buffer, 00429 stable_how4 stability_wanted, 00430 count4 *written_length, 00431 verifier4 writeverf, 00432 stable_how4 *stability_got); 00433 00434 nfsstat4 LUSTREFSAL_DS_commit(fsal_handle_t *handle, 00435 fsal_op_context_t *context, 00436 offset4 offset, 00437 count4 count, 00438 verifier4 writeverf); 00439 #endif /* _PNFS_DS */