~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/fs/ocfs2/stackglue.h

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /fs/ocfs2/stackglue.h (Version linux-6.12-rc7) and /fs/ocfs2/stackglue.h (Version linux-2.6.0)


  1 /* SPDX-License-Identifier: GPL-2.0-only */         1 
  2 /*                                                
  3  * stackglue.h                                    
  4  *                                                
  5  * Glue to the underlying cluster stack.          
  6  *                                                
  7  * Copyright (C) 2007 Oracle.  All rights rese    
  8  */                                               
  9                                                   
 10                                                   
 11 #ifndef STACKGLUE_H                               
 12 #define STACKGLUE_H                               
 13                                                   
 14 #include <linux/types.h>                          
 15 #include <linux/list.h>                           
 16 #include <linux/dlmconstants.h>                   
 17                                                   
 18 #include "dlm/dlmapi.h"                           
 19 #include <linux/dlm.h>                            
 20                                                   
 21 /* Needed for plock-related prototypes */         
 22 struct file;                                      
 23 struct file_lock;                                 
 24                                                   
 25 /*                                                
 26  * dlmconstants.h does not have a LOCAL flag.     
 27  * some day, but right now we need it.  Let's     
 28  * than any flag in dlmconstants.h.               
 29  */                                               
 30 #define DLM_LKF_LOCAL           0x00100000        
 31                                                   
 32 /*                                                
 33  * This shadows DLM_LOCKSPACE_LEN in fs/dlm/dl    
 34  * wants to be in a public header.                
 35  */                                               
 36 #define GROUP_NAME_MAX          64                
 37                                                   
 38 /* This shadows  OCFS2_CLUSTER_NAME_LEN */        
 39 #define CLUSTER_NAME_MAX        16                
 40                                                   
 41                                                   
 42 /*                                                
 43  * ocfs2_protocol_version changes when ocfs2 d    
 44  * its inter-node behavior.  See dlmglue.c for    
 45  */                                               
 46 struct ocfs2_protocol_version {                   
 47         u8 pv_major;                              
 48         u8 pv_minor;                              
 49 };                                                
 50                                                   
 51 /*                                                
 52  * The dlm_lockstatus struct includes lvb spac    
 53  * has a pointer to separately allocated lvb s    
 54  * include in the lksb union to make space for    
 55  */                                               
 56 struct fsdlm_lksb_plus_lvb {                      
 57         struct dlm_lksb lksb;                     
 58         char lvb[DLM_LVB_LEN];                    
 59 };                                                
 60                                                   
 61 /*                                                
 62  * A union of all lock status structures.  We     
 63  * size of the union is known.  Lock status st    
 64  * ocfs2 inodes.                                  
 65  */                                               
 66 struct ocfs2_cluster_connection;                  
 67 struct ocfs2_dlm_lksb {                           
 68          union {                                  
 69                  struct dlm_lockstatus lksb_o2    
 70                  struct dlm_lksb lksb_fsdlm;      
 71                  struct fsdlm_lksb_plus_lvb pa    
 72          };                                       
 73          struct ocfs2_cluster_connection *lksb    
 74 };                                                
 75                                                   
 76 /*                                                
 77  * The ocfs2_locking_protocol defines the hand    
 78  */                                               
 79 struct ocfs2_locking_protocol {                   
 80         struct ocfs2_protocol_version lp_max_v    
 81         void (*lp_lock_ast)(struct ocfs2_dlm_l    
 82         void (*lp_blocking_ast)(struct ocfs2_d    
 83         void (*lp_unlock_ast)(struct ocfs2_dlm    
 84 };                                                
 85                                                   
 86                                                   
 87 /*                                                
 88  * A cluster connection.  Mostly opaque to ocf    
 89  * state for the underlying stack.  ocfs2 does    
 90  * locking compatibility.                         
 91  */                                               
 92 struct ocfs2_cluster_connection {                 
 93         char cc_name[GROUP_NAME_MAX + 1];         
 94         int cc_namelen;                           
 95         char cc_cluster_name[CLUSTER_NAME_MAX     
 96         int cc_cluster_name_len;                  
 97         struct ocfs2_protocol_version cc_versi    
 98         struct ocfs2_locking_protocol *cc_prot    
 99         void (*cc_recovery_handler)(int node_n    
100         void *cc_recovery_data;                   
101         void *cc_lockspace;                       
102         void *cc_private;                         
103 };                                                
104                                                   
105 /*                                                
106  * Each cluster stack implements the stack ope    
107  * in the ocfs2 code, the stackglue code trans    
108  * into stack operations.                         
109  */                                               
110 struct ocfs2_stack_operations {                   
111         /*                                        
112          * The fs code calls ocfs2_cluster_con    
113          * filesystem to the cluster stack.  T    
114          * an ocfs2_cluster_connection with th    
115          * filled in.                             
116          *                                        
117          * The stack must set up any notificat    
118          * the filesystem lockspace in the DLM    
119          * stored on cc_lockspace.  Any other     
120          * cc_private.                            
121          *                                        
122          * ->connect() must not return until i    
123          *                                        
124          *  - Node down notifications for the     
125          *    and passed to conn->cc_recovery_    
126          *  - Locking requests for the filesys    
127          */                                       
128         int (*connect)(struct ocfs2_cluster_co    
129                                                   
130         /*                                        
131          * The fs code calls ocfs2_cluster_dis    
132          * no longer needs cluster services.      
133          * dropped, and recovery notification     
134          * fs code.  The stack must disengage     
135          * recovery notification.                 
136          *                                        
137          * Once ->disconnect() has returned, t    
138          * be freed.  Thus, a stack must not r    
139          * until it will no longer reference t    
140          *                                        
141          * Once this call returns, the stack g    
142          * connection's reference on the modul    
143          */                                       
144         int (*disconnect)(struct ocfs2_cluster    
145                                                   
146         /*                                        
147          * ->this_node() returns the cluster's    
148          * local node.                            
149          */                                       
150         int (*this_node)(struct ocfs2_cluster_    
151                          unsigned int *node);     
152                                                   
153         /*                                        
154          * Call the underlying dlm lock functi    
155          * callback should convert the flags a    
156          *                                        
157          * ast and bast functions are not part    
158          * stack will likely want to wrap ast     
159          * them to stack->sp_proto.  There is     
160          * be passed back to the ast and bast     
161          * use this to find their object.         
162          */                                       
163         int (*dlm_lock)(struct ocfs2_cluster_c    
164                         int mode,                 
165                         struct ocfs2_dlm_lksb     
166                         u32 flags,                
167                         void *name,               
168                         unsigned int namelen);    
169                                                   
170         /*                                        
171          * Call the underlying dlm unlock func    
172          * function should convert the flags a    
173          *                                        
174          * The unlock ast is not passed, as th    
175          * it before calling stack->sp_proto->    
176          * no astarg.  The lksb will be passed    
177          * function.  The caller can use this     
178          */                                       
179         int (*dlm_unlock)(struct ocfs2_cluster    
180                           struct ocfs2_dlm_lks    
181                           u32 flags);             
182                                                   
183         /*                                        
184          * Return the status of the current lo    
185          * code should never dereference the u    
186          * callback pulls out the stack-specif    
187          * to a proper errno, and returns it.     
188          */                                       
189         int (*lock_status)(struct ocfs2_dlm_lk    
190                                                   
191         /*                                        
192          * Return non-zero if the LVB is valid    
193          */                                       
194         int (*lvb_valid)(struct ocfs2_dlm_lksb    
195                                                   
196         /*                                        
197          * Pull the lvb pointer off of the sta    
198          */                                       
199         void *(*lock_lvb)(struct ocfs2_dlm_lks    
200                                                   
201         /*                                        
202          * Cluster-aware posix locks              
203          *                                        
204          * This is NULL for stacks which do no    
205          */                                       
206         int (*plock)(struct ocfs2_cluster_conn    
207                      u64 ino,                     
208                      struct file *file,           
209                      int cmd,                     
210                      struct file_lock *fl);       
211                                                   
212         /*                                        
213          * This is an optoinal debugging hook.    
214          * stack can dump debugging informatio    
215          */                                       
216         void (*dump_lksb)(struct ocfs2_dlm_lks    
217 };                                                
218                                                   
219 /*                                                
220  * Each stack plugin must describe itself by r    
221  * ocfs2_stack_plugin structure.  This is only    
222  * stack driver.                                  
223  */                                               
224 struct ocfs2_stack_plugin {                       
225         char *sp_name;                            
226         const struct ocfs2_stack_operations *s    
227         struct module *sp_owner;                  
228                                                   
229         /* These are managed by the stackglue     
230         struct list_head sp_list;                 
231         unsigned int sp_count;                    
232         struct ocfs2_protocol_version sp_max_p    
233 };                                                
234                                                   
235                                                   
236 /* Used by the filesystem */                      
237 int ocfs2_cluster_connect(const char *stack_na    
238                           const char *cluster_    
239                           int cluster_name_len    
240                           const char *group,      
241                           int grouplen,           
242                           struct ocfs2_locking    
243                           void (*recovery_hand    
244                                                   
245                           void *recovery_data,    
246                           struct ocfs2_cluster    
247 /*                                                
248  * Used by callers that don't store their stac    
249  * all nodes have the same stack.                 
250  */                                               
251 int ocfs2_cluster_connect_agnostic(const char     
252                                    int grouple    
253                                    struct ocfs    
254                                    void (*reco    
255                                                   
256                                    void *recov    
257                                    struct ocfs    
258 int ocfs2_cluster_disconnect(struct ocfs2_clus    
259                              int hangup_pendin    
260 void ocfs2_cluster_hangup(const char *group, i    
261 int ocfs2_cluster_this_node(struct ocfs2_clust    
262                             unsigned int *node    
263                                                   
264 struct ocfs2_lock_res;                            
265 int ocfs2_dlm_lock(struct ocfs2_cluster_connec    
266                    int mode,                      
267                    struct ocfs2_dlm_lksb *lksb    
268                    u32 flags,                     
269                    void *name,                    
270                    unsigned int namelen);         
271 int ocfs2_dlm_unlock(struct ocfs2_cluster_conn    
272                      struct ocfs2_dlm_lksb *lk    
273                      u32 flags);                  
274                                                   
275 int ocfs2_dlm_lock_status(struct ocfs2_dlm_lks    
276 int ocfs2_dlm_lvb_valid(struct ocfs2_dlm_lksb     
277 void *ocfs2_dlm_lvb(struct ocfs2_dlm_lksb *lks    
278 void ocfs2_dlm_dump_lksb(struct ocfs2_dlm_lksb    
279                                                   
280 int ocfs2_stack_supports_plocks(void);            
281 int ocfs2_plock(struct ocfs2_cluster_connectio    
282                 struct file *file, int cmd, st    
283                                                   
284 void ocfs2_stack_glue_set_max_proto_version(st    
285                                                   
286                                                   
287 /* Used by stack plugins */                       
288 int ocfs2_stack_glue_register(struct ocfs2_sta    
289 void ocfs2_stack_glue_unregister(struct ocfs2_    
290                                                   
291 extern struct kset *ocfs2_kset;                   
292                                                   
293 #endif  /* STACKGLUE_H */                         
294                                                   

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php