nfs-ganesha 1.4

fsal_up.h

Go to the documentation of this file.
00001 /*
00002  * This program is free software; you can redistribute it and/or
00003  * modify it under the terms of the GNU Lesser General Public
00004  * License as published by the Free Software Foundation; either
00005  * version 3 of the License, or (at your option) any later version.
00006  *
00007  * This program is distributed in the hope that it will be useful,
00008  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00009  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00010  * Lesser General Public License for more details.
00011  *
00012  * You should have received a copy of the GNU Lesser General Public
00013  * License along with this library; if not, write to the Free Software
00014  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
00015  *
00016  *---------------------------------------
00017  */
00018 
00024 #ifndef _FSAL_UP_H
00025 #define _FSAL_UP_H
00026 
00027 #ifdef _USE_FSAL_UP
00028 
00029 #include "fsal_types.h"
00030 #include "cache_inode.h"
00031 #include "nfs_exports.h"
00032 
00033 /* In the "static" case, original types are used, this is safer */
00034 #define MAX_FILTER_NAMELEN 255
00035 
00036 #define FSAL_UP_EVENT_CREATE     1
00037 #define FSAL_UP_EVENT_UNLINK     2
00038 #define FSAL_UP_EVENT_RENAME     3
00039 #define FSAL_UP_EVENT_COMMIT     4
00040 #define FSAL_UP_EVENT_WRITE      5
00041 #define FSAL_UP_EVENT_LINK       6
00042 #define FSAL_UP_EVENT_LOCK_GRANT 7
00043 #define FSAL_UP_EVENT_LOCK_AVAIL 8
00044 #define FSAL_UP_EVENT_OPEN       9
00045 #define FSAL_UP_EVENT_CLOSE      10
00046 #define FSAL_UP_EVENT_SETATTR    11
00047 #define FSAL_UP_EVENT_UPDATE     12
00048 #define FSAL_UP_EVENT_INVALIDATE 13
00049 
00050 /* Defines for the flags in callback_arg, keep up to date with CXIUP_xxx */
00051 #define FSAL_UP_NLINK        0x00000001   /* update nlink */
00052 #define FSAL_UP_MODE         0x00000002   /* update mode and ctime */
00053 #define FSAL_UP_OWN          0x00000004   /* update mode,uid,gid and ctime */
00054 #define FSAL_UP_SIZE         0x00000008   /* update fsize */
00055 #define FSAL_UP_SIZE_BIG     0x00000010   /* update fsize if bigger */
00056 #define FSAL_UP_TIMES        0x00000020   /* update all times */
00057 #define FSAL_UP_ATIME        0x00000040   /* update atime only */
00058 #define FSAL_UP_PERM         0x00000080   /* update fields needed for permission checking*/
00059 #define FSAL_UP_RENAME       0x00000100   /* this is a rename op */
00060 
00061 
00062 typedef struct fsal_up_filter_list_t_
00063 {
00064   char name[MAX_FILTER_NAMELEN];
00065   struct fsal_up_filter_list_t_ *next;
00066 } fsal_up_filter_list_t;
00067 
00068 typedef struct fsal_up_event_bus_parameter_t_
00069 {
00070 } fsal_up_event_bus_parameter_t;
00071 
00072 typedef struct fsal_up_event_bus_context_t_
00073 {
00074   fsal_export_context_t FS_export_context;
00075   pool_t *event_pool;
00076   pthread_mutex_t *event_pool_lock;
00077 } fsal_up_event_bus_context_t;
00078 
00079 typedef struct fsal_up_event_data_context_t_
00080 {
00081   cache_inode_fsal_data_t fsal_data;
00082 } fsal_up_event_data_context_t;
00083 
00084 typedef struct fsal_up_arg_t_
00085 {
00086   struct exportlist__ *export_entry;
00087 } fsal_up_arg_t;
00088 
00089 typedef struct fsal_up_event_bus_filter_t_
00090 {
00091 } fsal_up_event_bus_filter_t;
00092 
00093 typedef struct fsal_up_event_data_create_t_
00094 {
00095 } fsal_up_event_data_create_t;
00096 
00097 typedef struct fsal_up_event_data_unlink_t_
00098 {
00099 } fsal_up_event_data_unlink_t;
00100 
00101 typedef struct fsal_up_event_data_rename_t_
00102 {
00103 } fsal_up_event_data_rename_t;
00104 
00105 typedef struct fsal_up_event_data_commit_t_
00106 {
00107 } fsal_up_event_data_commit_t;
00108 
00109 typedef struct fsal_up_event_data_write_t_
00110 {
00111 } fsal_up_event_data_write_t;
00112 
00113 typedef struct fsal_up_event_data_link_t_
00114 {
00115 } fsal_up_event_data_link_t;
00116 
00117 typedef struct fsal_up_event_data_lock_grant_t_
00118 {
00119   void              * lock_owner;
00120   fsal_lock_param_t   lock_param;
00121 } fsal_up_event_data_lock_grant_t;
00122 
00123 typedef struct fsal_up_event_data_open_t_
00124 {
00125 } fsal_up_event_data_open_t;
00126 
00127 typedef struct fsal_up_event_data_close_t_
00128 {
00129 } fsal_up_event_data_close_t;
00130 
00131 typedef struct fsal_up_event_data_setattr_
00132 {
00133 } fsal_up_event_data_setattr_t;
00134 
00135 typedef struct fsal_up_event_data_invalidate_
00136 {
00137 } fsal_up_event_data_invalidate_t;
00138 
00139 typedef struct fsal_up_event_data_update_
00140 {
00141   struct stat upu_stat_buf;
00142   int upu_flags;
00143 } fsal_up_event_data_update_t;
00144 
00145 typedef struct fsal_up_event_data__
00146 {
00147   union {
00148     fsal_up_event_data_create_t create;
00149     fsal_up_event_data_unlink_t unlink;
00150     fsal_up_event_data_rename_t rename;
00151     fsal_up_event_data_commit_t commit;
00152     fsal_up_event_data_write_t write;
00153     fsal_up_event_data_link_t link;
00154     fsal_up_event_data_lock_grant_t lock_grant;
00155     fsal_up_event_data_open_t open;
00156     fsal_up_event_data_close_t close;
00157     fsal_up_event_data_setattr_t setattr;
00158     fsal_up_event_data_update_t update;
00159     fsal_up_event_data_invalidate_t invalidate;
00160   } type;
00161   /* Common data most functions will need. */
00162   fsal_up_event_data_context_t event_context;
00163 } fsal_up_event_data_t;
00164 
00165 typedef fsal_status_t (fsal_up_event_process_func_t) (fsal_up_event_data_t * arg);
00166 
00167 typedef struct fsal_up_event_t_
00168 {
00169   struct glist_head event_list;
00170   fsal_up_event_process_func_t   * event_process_func;
00171   unsigned int event_type;
00172   fsal_up_event_data_t event_data;
00173 } fsal_up_event_t;
00174 
00175 typedef struct fsal_up_event_functions__
00176 {
00177   fsal_status_t (*fsal_up_create) (fsal_up_event_data_t * pevdata );
00178   fsal_status_t (*fsal_up_unlink) (fsal_up_event_data_t * pevdata );
00179   fsal_status_t (*fsal_up_rename) (fsal_up_event_data_t * pevdata );
00180   fsal_status_t (*fsal_up_commit) (fsal_up_event_data_t * pevdata );
00181   fsal_status_t (*fsal_up_write) (fsal_up_event_data_t * pevdata );
00182   fsal_status_t (*fsal_up_link) (fsal_up_event_data_t * pevdata );
00183   fsal_status_t (*fsal_up_lock_grant) (fsal_up_event_data_t * pevdata );
00184   fsal_status_t (*fsal_up_lock_avail) (fsal_up_event_data_t * pevdata );
00185   fsal_status_t (*fsal_up_open) (fsal_up_event_data_t * pevdata );
00186   fsal_status_t (*fsal_up_close) (fsal_up_event_data_t * pevdata );
00187   fsal_status_t (*fsal_up_setattr) (fsal_up_event_data_t * pevdata );
00188   fsal_status_t (*fsal_up_update) (fsal_up_event_data_t * pevdata );
00189   fsal_status_t (*fsal_up_invalidate) (fsal_up_event_data_t * pevdata );
00190 } fsal_up_event_functions_t;
00191 
00192 #define FSAL_UP_DUMB_TYPE "DUMB"
00193 fsal_up_event_functions_t *get_fsal_up_dumb_functions();
00194 
00195 #endif /* _USE_FSAL_UP */
00196 #endif /* _FSAL_UP_H */