#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 */
#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,
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;
};
/* 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;
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)
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;
/* 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);
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,
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;
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
info->fti_env = env;
info->fti_exp = exp;
info->fti_pre_version = 0;
- info->fti_transno = 0;
- info->fti_has_trans = 0;
return info;
}
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 */
__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;
}
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;
}
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;
}