Whamcloud - gitweb
LU-4456 osp: extra check for opd_pre
[fs/lustre-release.git] / lustre / osp / osp_internal.h
index 1658e58..0871d8d 100644 (file)
@@ -44,6 +44,7 @@
 #include <obd.h>
 #include <obd_class.h>
 #include <dt_object.h>
+#include <md_object.h>
 #include <lustre_fid.h>
 
 /*
@@ -64,6 +65,32 @@ struct osp_id_tracker {
        cfs_atomic_t             otr_refcount;
 };
 
+struct osp_precreate {
+       /*
+        * Precreation pool
+        */
+       spinlock_t                       osp_pre_lock;
+
+       /* last fid to assign in creation */
+       struct lu_fid                    osp_pre_used_fid;
+       /* last created id OST reported, next-created - available id's */
+       struct lu_fid                    osp_pre_last_created_fid;
+       /* how many ids are reserved in declare, we shouldn't block in create */
+       __u64                            osp_pre_reserved;
+       /* consumers (who needs new ids) wait here */
+       wait_queue_head_t                osp_pre_user_waitq;
+       /* current precreation status: working, failed, stopping? */
+       int                              osp_pre_status;
+       /* how many to precreate next time */
+       int                              osp_pre_grow_count;
+       int                              osp_pre_min_grow_count;
+       int                              osp_pre_max_grow_count;
+       /* whether to grow precreation window next time or not */
+       int                              osp_pre_grow_slow;
+       /* cleaning up orphans or recreating missing objects */
+       int                              osp_pre_recovering;
+};
+
 struct osp_device {
        struct dt_device                 opd_dt_dev;
        /* corresponded OST index */
@@ -104,33 +131,12 @@ struct osp_device {
         * reported via ->ldo_recovery_complete() */
        int                              opd_recovery_completed;
 
-       /*
-        * Precreation pool
-        */
-       spinlock_t                       opd_pre_lock;
-
-       /* last fid to assign in creation */
-       struct lu_fid                    opd_pre_used_fid;
-       /* last created id OST reported, next-created - available id's */
-       struct lu_fid                    opd_pre_last_created_fid;
-       /* how many ids are reserved in declare, we shouldn't block in create */
-       __u64                            opd_pre_reserved;
+       /* precreate structure for OSP */
+       struct osp_precreate            *opd_pre;
        /* dedicate precreate thread */
        struct ptlrpc_thread             opd_pre_thread;
        /* thread waits for signals about pool going empty */
-       cfs_waitq_t                      opd_pre_waitq;
-       /* consumers (who needs new ids) wait here */
-       cfs_waitq_t                      opd_pre_user_waitq;
-       /* current precreation status: working, failed, stopping? */
-       int                              opd_pre_status;
-       /* how many to precreate next time */
-       int                              opd_pre_grow_count;
-       int                              opd_pre_min_grow_count;
-       int                              opd_pre_max_grow_count;
-       /* whether to grow precreation window next time or not */
-       int                              opd_pre_grow_slow;
-       /* cleaning up orphans or recreating missing objects */
-       int                              opd_pre_recovering;
+       wait_queue_head_t                opd_pre_waitq;
 
        /*
         * OST synchronization
@@ -144,7 +150,7 @@ struct osp_device {
        int                              opd_syn_prev_done;
        /* found records */
        struct ptlrpc_thread             opd_syn_thread;
-       cfs_waitq_t                      opd_syn_waitq;
+       wait_queue_head_t                opd_syn_waitq;
        /* list of remotely committed rpc */
        cfs_list_t                       opd_syn_committed_there;
        /* number of changes being under sync */
@@ -172,7 +178,7 @@ struct osp_device {
         */
        struct obd_statfs                opd_statfs;
        cfs_time_t                       opd_statfs_fresh_till;
-       cfs_timer_t                      opd_statfs_timer;
+       struct timer_list                        opd_statfs_timer;
        int                              opd_statfs_update_in_progress;
        /* how often to update statfs data */
        int                              opd_statfs_maxage;
@@ -180,7 +186,19 @@ struct osp_device {
        cfs_proc_dir_entry_t            *opd_symlink;
 };
 
-extern cfs_mem_cache_t *osp_object_kmem;
+#define opd_pre_lock                   opd_pre->osp_pre_lock
+#define opd_pre_used_fid               opd_pre->osp_pre_used_fid
+#define opd_pre_last_created_fid       opd_pre->osp_pre_last_created_fid
+#define opd_pre_reserved               opd_pre->osp_pre_reserved
+#define opd_pre_user_waitq             opd_pre->osp_pre_user_waitq
+#define opd_pre_status                 opd_pre->osp_pre_status
+#define opd_pre_grow_count             opd_pre->osp_pre_grow_count
+#define opd_pre_min_grow_count         opd_pre->osp_pre_min_grow_count
+#define opd_pre_max_grow_count         opd_pre->osp_pre_max_grow_count
+#define opd_pre_grow_slow              opd_pre->osp_pre_grow_slow
+#define opd_pre_recovering             opd_pre->osp_pre_recovering
+
+extern struct kmem_cache *osp_object_kmem;
 
 /* this is a top object */
 struct osp_object {
@@ -324,6 +342,11 @@ static inline struct dt_object *osp_object_child(struct osp_object *o)
                              struct dt_object, do_lu);
 }
 
+static inline struct seq_server_site *osp_seq_site(struct osp_device *osp)
+{
+       return osp->opd_dt_dev.dd_lu_dev.ld_site->ld_seq_site;
+}
+
 #define osp_init_rpc_lock(lck) mdc_init_rpc_lock(lck)
 #define osp_get_rpc_lock(lck, it)  mdc_get_rpc_lock(lck, it)
 #define osp_put_rpc_lock(lck, it) mdc_put_rpc_lock(lck, it)
@@ -407,6 +430,7 @@ void osp_statfs_need_now(struct osp_device *d);
 int osp_reset_last_used(const struct lu_env *env, struct osp_device *osp);
 int osp_write_last_oid_seq_files(struct lu_env *env, struct osp_device *osp,
                                 struct lu_fid *fid, int sync);
+int osp_init_pre_fid(struct osp_device *osp);
 
 /* lproc_osp.c */
 void lprocfs_osp_init_vars(struct lprocfs_static_vars *lvars);