Merge branch 'stable/drivers' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/xen
[pandora-kernel.git] / fs / dlm / dlm_internal.h
index 0262451..fe2860c 100644 (file)
@@ -37,6 +37,7 @@
 #include <linux/jhash.h>
 #include <linux/miscdevice.h>
 #include <linux/mutex.h>
+#include <linux/idr.h>
 #include <asm/uaccess.h>
 
 #include <linux/dlm.h>
@@ -52,7 +53,6 @@ struct dlm_ls;
 struct dlm_lkb;
 struct dlm_rsb;
 struct dlm_member;
-struct dlm_lkbtable;
 struct dlm_rsbtable;
 struct dlm_dirtable;
 struct dlm_direntry;
@@ -108,11 +108,6 @@ struct dlm_rsbtable {
        spinlock_t              lock;
 };
 
-struct dlm_lkbtable {
-       struct list_head        list;
-       rwlock_t                lock;
-       uint16_t                counter;
-};
 
 /*
  * Lockspace member (per node in a ls)
@@ -248,17 +243,18 @@ struct dlm_lkb {
        int8_t                  lkb_wait_count;
        int                     lkb_wait_nodeid; /* for debugging */
 
-       struct list_head        lkb_idtbl_list; /* lockspace lkbtbl */
        struct list_head        lkb_statequeue; /* rsb g/c/w list */
        struct list_head        lkb_rsb_lookup; /* waiting for rsb lookup */
        struct list_head        lkb_wait_reply; /* waiting for remote reply */
-       struct list_head        lkb_astqueue;   /* need ast to be sent */
        struct list_head        lkb_ownqueue;   /* list of locks for a process */
        struct list_head        lkb_time_list;
        ktime_t                 lkb_timestamp;
        ktime_t                 lkb_wait_time;
        unsigned long           lkb_timeout_cs;
 
+       struct mutex            lkb_cb_mutex;
+       struct work_struct      lkb_cb_work;
+       struct list_head        lkb_cb_list; /* for ls_cb_delay or proc->asts */
        struct dlm_callback     lkb_callbacks[DLM_CALLBACKS_SIZE];
        struct dlm_callback     lkb_last_cast;
        struct dlm_callback     lkb_last_bast;
@@ -299,7 +295,7 @@ struct dlm_rsb {
        int                     res_recover_locks_count;
 
        char                    *res_lvbptr;
-       char                    res_name[1];
+       char                    res_name[DLM_RESNAME_MAXLEN+1];
 };
 
 /* find_rsb() flags */
@@ -465,12 +461,12 @@ struct dlm_ls {
        unsigned long           ls_scan_time;
        struct kobject          ls_kobj;
 
+       struct idr              ls_lkbidr;
+       spinlock_t              ls_lkbidr_spin;
+
        struct dlm_rsbtable     *ls_rsbtbl;
        uint32_t                ls_rsbtbl_size;
 
-       struct dlm_lkbtable     *ls_lkbtbl;
-       uint32_t                ls_lkbtbl_size;
-
        struct dlm_dirtable     *ls_dirtbl;
        uint32_t                ls_dirtbl_size;
 
@@ -483,6 +479,10 @@ struct dlm_ls {
        struct mutex            ls_timeout_mutex;
        struct list_head        ls_timeout;
 
+       spinlock_t              ls_new_rsb_spin;
+       int                     ls_new_rsb_count;
+       struct list_head        ls_new_rsb;     /* new rsb structs */
+
        struct list_head        ls_nodes;       /* current nodes in ls */
        struct list_head        ls_nodes_gone;  /* dead node list, recovery */
        int                     ls_num_nodes;   /* number of nodes in ls */
@@ -506,8 +506,12 @@ struct dlm_ls {
 
        struct miscdevice       ls_device;
 
+       struct workqueue_struct *ls_callback_wq;
+
        /* recovery related */
 
+       struct mutex            ls_cb_mutex;
+       struct list_head        ls_cb_delay; /* save for queue_work later */
        struct timer_list       ls_timer;
        struct task_struct      *ls_recoverd_task;
        struct mutex            ls_recoverd_active;
@@ -544,6 +548,7 @@ struct dlm_ls {
 #define LSFL_RCOM_WAIT         4
 #define LSFL_UEVENT_WAIT       5
 #define LSFL_TIMEWARN          6
+#define LSFL_CB_DELAY          7
 
 /* much of this is just saving user space pointers associated with the
    lock that we pass back to the user lib with an ast */