Whamcloud - gitweb
LU-3951 lfsck: LWP connection from OST-x to MDT-y
[fs/lustre-release.git] / lustre / ofd / ofd_internal.h
index 1667d0d..b22ceec 100644 (file)
@@ -49,7 +49,7 @@
 #define OFD_ROCOMPAT_SUPP (0)
 #define OFD_INCOMPAT_SUPP (OBD_INCOMPAT_GROUPS | OBD_INCOMPAT_OST | \
                           OBD_INCOMPAT_COMMON_LR)
-#define OFD_PRECREATE_BATCH_DEFAULT (FILTER_SUBDIR_COUNT * 4)
+#define OFD_PRECREATE_BATCH_DEFAULT (OBJ_SUBDIR_COUNT * 4)
 
 /* on small filesystems we should not precreate too many objects in
  * a single transaction, otherwise we can overflow transactions */
@@ -72,6 +72,8 @@ struct ofd_mod_data {
 #define OFD_FMD_MAX_NUM_DEFAULT 128
 #define OFD_FMD_MAX_AGE_DEFAULT ((obd_timeout + 10) * HZ)
 
+#define OFD_SOFT_SYNC_LIMIT_DEFAULT 16
+
 /* request stats */
 enum {
        LPROC_OFD_STATS_READ = 0,
@@ -111,7 +113,7 @@ struct ofd_seq {
        struct ost_id           os_oi;
        spinlock_t              os_last_oid_lock;
        struct mutex            os_create_lock;
-       cfs_atomic_t            os_refc;
+       atomic_t                os_refc;
        struct dt_object        *os_lastid_obj;
        unsigned long           os_destroys_in_progress:1;
 };
@@ -124,9 +126,6 @@ struct ofd_device {
        /* DLM name-space for meta-data locks maintained by this server */
        struct ldlm_namespace   *ofd_namespace;
 
-       /* transaction callbacks */
-       struct dt_txn_callback   ofd_txn_cb;
-
        /* last_rcvd file */
        struct lu_target         ofd_lut;
        struct dt_object        *ofd_health_check_file;
@@ -182,8 +181,15 @@ struct ofd_device {
                                 ofd_syncjournal:1,
                                 /* shall we grant space to clients not
                                  * supporting OBD_CONNECT_GRANT_PARAM? */
-                                ofd_grant_compat_disable:1;
+                                ofd_grant_compat_disable:1,
+                                /* Protected by ofd_lastid_rwsem. */
+                                ofd_lastid_rebuilding:1;
        struct seq_server_site   ofd_seq_site;
+       /* the limit of SOFT_SYNC RPCs that will trigger a soft sync */
+       unsigned int             ofd_soft_sync_limit;
+       /* Protect ::ofd_lastid_rebuilding */
+       struct rw_semaphore      ofd_lastid_rwsem;
+       __u64                    ofd_lastid_gen;
 };
 
 static inline struct ofd_device *ofd_dev(struct lu_device *d)
@@ -290,10 +296,7 @@ struct ofd_thread_info {
 
        struct obd_export               *fti_exp;
        __u64                            fti_xid;
-       __u64                            fti_transno;
        __u64                            fti_pre_version;
-       __u32                            fti_has_trans:1, /* has txn already */
-                                        fti_mult_trans:1;
 
        struct lu_fid                    fti_fid;
        struct lu_attr                   fti_attr;
@@ -323,25 +326,26 @@ extern void target_recovery_init(struct lu_target *lut, svc_handler_t handler);
 
 /* ofd_capa.c */
 int ofd_update_capa_key(struct ofd_device *ofd, struct lustre_capa_key *key);
-int ofd_auth_capa(struct obd_export *exp, struct lu_fid *fid, obd_seq seq,
-                 struct lustre_capa *capa, __u64 opc);
+int ofd_auth_capa(struct obd_export *exp, const struct lu_fid *fid,
+                 obd_seq seq, struct lustre_capa *capa, __u64 opc);
 void ofd_free_capa_keys(struct ofd_device *ofd);
 
 /* ofd_dev.c */
 extern struct lu_context_key ofd_thread_key;
 int ofd_postrecov(const struct lu_env *env, struct ofd_device *ofd);
+int ofd_fiemap_get(const struct lu_env *env, struct ofd_device *ofd,
+                  struct lu_fid *fid, struct ll_user_fiemap *fiemap);
 
 /* ofd_obd.c */
 extern struct obd_ops ofd_obd_ops;
 int ofd_statfs_internal(const struct lu_env *env, struct ofd_device *ofd,
                        struct obd_statfs *osfs, __u64 max_age,
                        int *from_cache);
-int ofd_orphans_destroy(const struct lu_env *env, struct obd_export *exp,
-                       struct ofd_device *ofd, struct obdo *oa);
 int ofd_destroy_by_fid(const struct lu_env *env, struct ofd_device *ofd,
                       const struct lu_fid *fid, int orphan);
 int ofd_statfs(const struct lu_env *env,  struct obd_export *exp,
               struct obd_statfs *osfs, __u64 max_age, __u32 flags);
+int ofd_obd_disconnect(struct obd_export *exp);
 
 /* ofd_fs.c */
 obd_id ofd_seq_last_oid(struct ofd_seq *oseq);
@@ -359,6 +363,7 @@ int ofd_precreate_batch(struct ofd_device *ofd, int batch);
 struct ofd_seq *ofd_seq_load(const struct lu_env *env, struct ofd_device *ofd,
                             obd_seq seq);
 void ofd_seqs_fini(const struct lu_env *env, struct ofd_device *ofd);
+void ofd_seqs_free(const struct lu_env *env, struct ofd_device *ofd);
 
 /* ofd_io.c */
 int ofd_preprw(const struct lu_env *env,int cmd, struct obd_export *exp,
@@ -422,7 +427,7 @@ int ofd_attr_handle_ugid(const struct lu_env *env, struct ofd_object *fo,
 static inline
 struct ofd_object *ofd_object_find_exists(const struct lu_env *env,
                                          struct ofd_device *ofd,
-                                         struct lu_fid *fid)
+                                         const struct lu_fid *fid)
 {
        struct ofd_object *fo;
 
@@ -492,14 +497,14 @@ int ofd_grant_create(const struct lu_env *env, struct obd_export *exp, int *nr);
 int ofd_fmd_init(void);
 void ofd_fmd_exit(void);
 struct ofd_mod_data *ofd_fmd_find(struct obd_export *exp,
-                                 struct lu_fid *fid);
+                                 const struct lu_fid *fid);
 struct ofd_mod_data *ofd_fmd_get(struct obd_export *exp,
-                                struct lu_fid *fid);
+                                const struct lu_fid *fid);
 void ofd_fmd_put(struct obd_export *exp, struct ofd_mod_data *fmd);
 void ofd_fmd_expire(struct obd_export *exp);
 void ofd_fmd_cleanup(struct obd_export *exp);
 #ifdef DO_FMD_DROP
-void ofd_fmd_drop(struct obd_export *exp, struct lu_fid *fid);
+void ofd_fmd_drop(struct obd_export *exp, const struct lu_fid *fid);
 #else
 #define ofd_fmd_drop(exp, fid) do {} while (0)
 #endif
@@ -541,8 +546,6 @@ static inline struct ofd_thread_info *ofd_info_init(const struct lu_env *env,
        info->fti_env = env;
        info->fti_exp = exp;
        info->fti_pre_version = 0;
-       info->fti_transno = 0;
-       info->fti_has_trans = 0;
        return info;
 }
 
@@ -558,7 +561,6 @@ static inline struct ofd_thread_info *tsi2ofd_info(struct tgt_session_info *tsi)
 
        info->fti_env = tsi->tsi_env;
        info->fti_exp = tsi->tsi_exp;
-       info->fti_has_trans = 0;
 
        info->fti_xid = req->rq_xid;
        /** VBR: take versions from request */
@@ -567,7 +569,6 @@ static inline struct ofd_thread_info *tsi2ofd_info(struct tgt_session_info *tsi)
                __u64 *pre_version = lustre_msg_get_versions(req->rq_reqmsg);
 
                info->fti_pre_version = pre_version ? pre_version[0] : 0;
-               info->fti_transno = lustre_msg_get_transno(req->rq_reqmsg);
        }
        return info;
 }
@@ -576,7 +577,6 @@ static inline void ofd_oti2info(struct ofd_thread_info *info,
                                struct obd_trans_info *oti)
 {
        info->fti_xid = oti->oti_xid;
-       info->fti_transno = oti->oti_transno;
        info->fti_pre_version = oti->oti_pre_version;
 }
 
@@ -584,11 +584,6 @@ static inline void ofd_info2oti(struct ofd_thread_info *info,
                                 struct obd_trans_info *oti)
 {
        oti->oti_xid = info->fti_xid;
-       LASSERTF(ergo(oti->oti_transno > 0,
-                     oti->oti_transno == info->fti_transno),
-                "Overwrite replay transno "LPX64" by "LPX64"\n",
-                oti->oti_transno, info->fti_transno);
-       oti->oti_transno = info->fti_transno;
        oti->oti_pre_version = info->fti_pre_version;
 }