diff options
Diffstat (limited to 'fs/gfs2/glock.h')
| -rw-r--r-- | fs/gfs2/glock.h | 124 | 
1 files changed, 55 insertions, 69 deletions
diff --git a/fs/gfs2/glock.h b/fs/gfs2/glock.h index db1c26d6d22..32572f71f02 100644 --- a/fs/gfs2/glock.h +++ b/fs/gfs2/glock.h @@ -87,11 +87,10 @@ enum {  #define GL_ASYNC		0x00000040  #define GL_EXACT		0x00000080  #define GL_SKIP			0x00000100 -#define GL_ATIME		0x00000200  #define GL_NOCACHE		0x00000400  /* - * lm_lock() and lm_async_cb return flags + * lm_async_cb return flags   *   * LM_OUT_ST_MASK   * Masks the lower two bits of lock state in the returned value. @@ -99,15 +98,11 @@ enum {   * LM_OUT_CANCELED   * The lock request was canceled.   * - * LM_OUT_ASYNC - * The result of the request will be returned in an LM_CB_ASYNC callback. - *   */  #define LM_OUT_ST_MASK		0x00000003  #define LM_OUT_CANCELED		0x00000008 -#define LM_OUT_ASYNC		0x00000080 -#define LM_OUT_ERROR		0x00000100 +#define LM_OUT_ERROR		0x00000004  /*   * lm_recovery_done() messages @@ -118,31 +113,27 @@ enum {  #define GLR_TRYFAILED		13 +#define GL_GLOCK_MAX_HOLD        (long)(HZ / 5) +#define GL_GLOCK_DFT_HOLD        (long)(HZ / 5) +#define GL_GLOCK_MIN_HOLD        (long)(10) +#define GL_GLOCK_HOLD_INCR       (long)(HZ / 20) +#define GL_GLOCK_HOLD_DECR       (long)(HZ / 40) +  struct lm_lockops {  	const char *lm_proto_name; -	int (*lm_mount) (struct gfs2_sbd *sdp, const char *fsname); - 	void (*lm_unmount) (struct gfs2_sbd *sdp); +	int (*lm_mount) (struct gfs2_sbd *sdp, const char *table); +	void (*lm_first_done) (struct gfs2_sbd *sdp); +	void (*lm_recovery_result) (struct gfs2_sbd *sdp, unsigned int jid, +				    unsigned int result); +	void (*lm_unmount) (struct gfs2_sbd *sdp);  	void (*lm_withdraw) (struct gfs2_sbd *sdp); -	void (*lm_put_lock) (struct kmem_cache *cachep, struct gfs2_glock *gl); -	unsigned int (*lm_lock) (struct gfs2_glock *gl, -				 unsigned int req_state, unsigned int flags); +	void (*lm_put_lock) (struct gfs2_glock *gl); +	int (*lm_lock) (struct gfs2_glock *gl, unsigned int req_state, +			unsigned int flags);  	void (*lm_cancel) (struct gfs2_glock *gl);  	const match_table_t *lm_tokens;  }; -#define LM_FLAG_TRY		0x00000001 -#define LM_FLAG_TRY_1CB		0x00000002 -#define LM_FLAG_NOEXP		0x00000004 -#define LM_FLAG_ANY		0x00000008 -#define LM_FLAG_PRIORITY	0x00000010 - -#define GL_ASYNC		0x00000040 -#define GL_EXACT		0x00000080 -#define GL_SKIP			0x00000100 -#define GL_NOCACHE		0x00000400 - -#define GLR_TRYFAILED		13 -  extern struct workqueue_struct *gfs2_delete_workqueue;  static inline struct gfs2_holder *gfs2_glock_is_locked_by_me(struct gfs2_glock *gl)  { @@ -187,31 +178,30 @@ static inline struct address_space *gfs2_glock2aspace(struct gfs2_glock *gl)  	return NULL;  } -int gfs2_glock_get(struct gfs2_sbd *sdp, -		   u64 number, const struct gfs2_glock_operations *glops, -		   int create, struct gfs2_glock **glp); -void gfs2_glock_hold(struct gfs2_glock *gl); -void gfs2_glock_put_nolock(struct gfs2_glock *gl); -int gfs2_glock_put(struct gfs2_glock *gl); -void gfs2_holder_init(struct gfs2_glock *gl, unsigned int state, unsigned flags, -		      struct gfs2_holder *gh); -void gfs2_holder_reinit(unsigned int state, unsigned flags, -			struct gfs2_holder *gh); -void gfs2_holder_uninit(struct gfs2_holder *gh); -int gfs2_glock_nq(struct gfs2_holder *gh); -int gfs2_glock_poll(struct gfs2_holder *gh); -int gfs2_glock_wait(struct gfs2_holder *gh); -void gfs2_glock_dq(struct gfs2_holder *gh); -void gfs2_glock_dq_wait(struct gfs2_holder *gh); - -void gfs2_glock_dq_uninit(struct gfs2_holder *gh); -int gfs2_glock_nq_num(struct gfs2_sbd *sdp, -		      u64 number, const struct gfs2_glock_operations *glops, -		      unsigned int state, int flags, struct gfs2_holder *gh); - -int gfs2_glock_nq_m(unsigned int num_gh, struct gfs2_holder *ghs); -void gfs2_glock_dq_m(unsigned int num_gh, struct gfs2_holder *ghs); -void gfs2_glock_dq_uninit_m(unsigned int num_gh, struct gfs2_holder *ghs); +extern int gfs2_glock_get(struct gfs2_sbd *sdp, u64 number, +			  const struct gfs2_glock_operations *glops, +			  int create, struct gfs2_glock **glp); +extern void gfs2_glock_put(struct gfs2_glock *gl); +extern void gfs2_holder_init(struct gfs2_glock *gl, unsigned int state, +			     unsigned flags, struct gfs2_holder *gh); +extern void gfs2_holder_reinit(unsigned int state, unsigned flags, +			       struct gfs2_holder *gh); +extern void gfs2_holder_uninit(struct gfs2_holder *gh); +extern int gfs2_glock_nq(struct gfs2_holder *gh); +extern int gfs2_glock_poll(struct gfs2_holder *gh); +extern int gfs2_glock_wait(struct gfs2_holder *gh); +extern void gfs2_glock_dq(struct gfs2_holder *gh); +extern void gfs2_glock_dq_wait(struct gfs2_holder *gh); +extern void gfs2_glock_dq_uninit(struct gfs2_holder *gh); +extern int gfs2_glock_nq_num(struct gfs2_sbd *sdp, u64 number, +			     const struct gfs2_glock_operations *glops, +			     unsigned int state, int flags, +			     struct gfs2_holder *gh); +extern int gfs2_glock_nq_m(unsigned int num_gh, struct gfs2_holder *ghs); +extern void gfs2_glock_dq_m(unsigned int num_gh, struct gfs2_holder *ghs); +extern void gfs2_dump_glock(struct seq_file *seq, const struct gfs2_glock *gl); +#define GLOCK_BUG_ON(gl,x) do { if (unlikely(x)) { gfs2_dump_glock(NULL, gl); BUG(); } } while(0) +extern __printf(2, 3)  void gfs2_print_dbg(struct seq_file *seq, const char *fmt, ...);  /** @@ -239,25 +229,21 @@ static inline int gfs2_glock_nq_init(struct gfs2_glock *gl,  	return error;  } -/*  Lock Value Block functions  */ - -int gfs2_lvb_hold(struct gfs2_glock *gl); -void gfs2_lvb_unhold(struct gfs2_glock *gl); - -void gfs2_glock_cb(struct gfs2_glock *gl, unsigned int state); -void gfs2_glock_complete(struct gfs2_glock *gl, int ret); -void gfs2_reclaim_glock(struct gfs2_sbd *sdp); -void gfs2_gl_hash_clear(struct gfs2_sbd *sdp); -void gfs2_glock_finish_truncate(struct gfs2_inode *ip); -void gfs2_glock_thaw(struct gfs2_sbd *sdp); - -int __init gfs2_glock_init(void); -void gfs2_glock_exit(void); - -int gfs2_create_debugfs_file(struct gfs2_sbd *sdp); -void gfs2_delete_debugfs_file(struct gfs2_sbd *sdp); -int gfs2_register_debugfs(void); -void gfs2_unregister_debugfs(void); +extern void gfs2_glock_cb(struct gfs2_glock *gl, unsigned int state); +extern void gfs2_glock_complete(struct gfs2_glock *gl, int ret); +extern void gfs2_gl_hash_clear(struct gfs2_sbd *sdp); +extern void gfs2_glock_finish_truncate(struct gfs2_inode *ip); +extern void gfs2_glock_thaw(struct gfs2_sbd *sdp); +extern void gfs2_glock_add_to_lru(struct gfs2_glock *gl); +extern void gfs2_glock_free(struct gfs2_glock *gl); + +extern int __init gfs2_glock_init(void); +extern void gfs2_glock_exit(void); + +extern int gfs2_create_debugfs_file(struct gfs2_sbd *sdp); +extern void gfs2_delete_debugfs_file(struct gfs2_sbd *sdp); +extern int gfs2_register_debugfs(void); +extern void gfs2_unregister_debugfs(void);  extern const struct lm_lockops gfs2_dlm_ops;  | 
