X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fosd-zfs%2Fosd_internal.h;h=498756aaa8d75bc703080ca1ed9f21cd90d2766e;hb=f37bce8a573dfc5aac1b9f51f4d5c8314ba05d30;hp=dde36de5c204d5fe0f2d3fd65fe55e6bca9b6fbc;hpb=4c4c327b25f3414f20a9ae600e7311f1aa3a866d;p=fs%2Flustre-release.git diff --git a/lustre/osd-zfs/osd_internal.h b/lustre/osd-zfs/osd_internal.h index dde36de..498756a 100644 --- a/lustre/osd-zfs/osd_internal.h +++ b/lustre/osd-zfs/osd_internal.h @@ -103,8 +103,8 @@ #define zfs_refcount_add refcount_add #endif -extern struct dt_body_operations osd_body_scrub_ops; -extern struct dt_body_operations osd_body_ops; +extern const struct dt_body_operations osd_body_scrub_ops; +extern const struct dt_body_operations osd_body_ops; extern struct kmem_cache *osd_object_kmem; /** @@ -181,6 +181,7 @@ struct osa_attr { uint64_t atime[2]; uint64_t mtime[2]; uint64_t ctime[2]; + uint64_t btime[2]; }; @@ -470,8 +471,8 @@ struct osd_object { int osd_statfs(const struct lu_env *, struct dt_device *, struct obd_statfs *, struct obd_statfs_info *); extern const struct dt_index_operations osd_acct_index_ops; -extern struct lu_device_operations osd_lu_ops; -extern struct dt_index_operations osd_dir_ops; +extern const struct lu_device_operations osd_lu_ops; +extern const struct dt_index_operations osd_dir_ops; int osd_declare_quota(const struct lu_env *env, struct osd_device *osd, qid_t uid, qid_t gid, qid_t projid, long long space, struct osd_thandle *oh, @@ -493,19 +494,19 @@ static inline int lu_device_is_osd(const struct lu_device *d) static inline struct osd_object *osd_obj(const struct lu_object *o) { LASSERT(lu_device_is_osd(o->lo_dev)); - return container_of0(o, struct osd_object, oo_dt.do_lu); + return container_of(o, struct osd_object, oo_dt.do_lu); } static inline struct osd_device *osd_dt_dev(const struct dt_device *d) { LASSERT(lu_device_is_osd(&d->dd_lu_dev)); - return container_of0(d, struct osd_device, od_dt_dev); + return container_of(d, struct osd_device, od_dt_dev); } static inline struct osd_device *osd_dev(const struct lu_device *d) { LASSERT(lu_device_is_osd(d)); - return osd_dt_dev(container_of0(d, struct dt_device, dd_lu_dev)); + return osd_dt_dev(container_of(d, struct dt_device, dd_lu_dev)); } static inline struct osd_object *osd_dt_obj(const struct dt_object *d) @@ -632,7 +633,7 @@ int osd_find_new_dnode(const struct lu_env *env, dmu_tx_t *tx, uint64_t oid, dnode_t **dnp); /* osd_oi.c */ -int osd_oi_init(const struct lu_env *env, struct osd_device *o); +int osd_oi_init(const struct lu_env *env, struct osd_device *o, bool reset); void osd_oi_fini(const struct lu_env *env, struct osd_device *o); int osd_fid_lookup(const struct lu_env *env, struct osd_device *, const struct lu_fid *, uint64_t *); @@ -689,7 +690,8 @@ int __osd_xattr_load_by_oid(struct osd_device *osd, uint64_t oid, nvlist_t **sa); /* osd_scrub.c */ -int osd_scrub_setup(const struct lu_env *env, struct osd_device *dev); +int osd_scrub_setup(const struct lu_env *env, struct osd_device *dev, + bool resetoi); void osd_scrub_cleanup(const struct lu_env *env, struct osd_device *dev); int osd_scrub_start(const struct lu_env *env, struct osd_device *dev, __u32 flags); @@ -699,6 +701,23 @@ int osd_oii_insert(const struct lu_env *env, struct osd_device *dev, int osd_oii_lookup(struct osd_device *dev, const struct lu_fid *fid, uint64_t *oid); +/** + * Basic transaction credit op + */ +enum dt_txn_op { + DTO_INDEX_INSERT, + DTO_INDEX_DELETE, + DTO_INDEX_UPDATE, + DTO_NR +}; + +int osd_scrub_refresh_mapping(const struct lu_env *env, + struct osd_device *dev, + const struct lu_fid *fid, + uint64_t oid, enum dt_txn_op ops, + bool force, const char *name); + + /* osd_xattr.c */ int __osd_sa_xattr_schedule_update(const struct lu_env *env, struct osd_object *obj, @@ -714,6 +733,8 @@ int __osd_xattr_get_large(const struct lu_env *env, struct osd_device *osd, const char *name, int *sizep); int osd_xattr_get_internal(const struct lu_env *env, struct osd_object *obj, struct lu_buf *buf, const char *name, int *sizep); +int osd_xattr_get_lma(const struct lu_env *env, struct osd_object *obj, + struct lu_buf *buf); int osd_xattr_get(const struct lu_env *env, struct dt_object *dt, struct lu_buf *buf, const char *name); int osd_declare_xattr_set(const struct lu_env *env, struct dt_object *dt, @@ -960,6 +981,24 @@ static inline void osd_dnode_rele(dnode_t *dn) dmu_buf_rele(&db->db, osd_obj_tag); } +static inline uint64_t osd_db_dirty_txg(dmu_buf_impl_t *db) +{ + dbuf_dirty_record_t *dr; + uint64_t txg = 0; + + mutex_enter(&db->db_mtx); +#ifdef HAVE_DB_DIRTY_RECORDS_LIST + dr = list_head(&db->db_dirty_records); +#else + dr = db->db_last_dirty; +#endif + if (dr != NULL) + txg = dr->dr_txg; + mutex_exit(&db->db_mtx); + + return txg; +} + #ifdef HAVE_DMU_USEROBJ_ACCOUNTING #define OSD_DMU_USEROBJ_PREFIX DMU_OBJACCT_PREFIX @@ -1120,4 +1159,11 @@ osd_index_backup(const struct lu_env *env, struct osd_device *osd, bool backup) #define inode_timespec_t timestruc_t #endif +#ifdef HAVE_DMU_OFFSET_NEXT +#define osd_dmu_offset_next(os, obj, hole, res) \ + dmu_offset_next((os), (obj), (hole), (res)) +#else +#define osd_dmu_offset_next(os, obj, hole, res) (EBUSY) +#endif + #endif /* _OSD_INTERNAL_H */