char *osd_obj_tag = "osd_object";
static int osd_object_sync_delay_us = -1;
-static struct dt_object_operations osd_obj_ops;
-static struct lu_object_operations osd_lu_obj_ops;
-static struct dt_object_operations osd_obj_otable_it_ops;
+static const struct dt_object_operations osd_obj_ops;
+static const struct lu_object_operations osd_lu_obj_ops;
+static const struct dt_object_operations osd_obj_otable_it_ops;
static void
osd_object_sa_fini(struct osd_object *obj)
dt_object_fini(&obj->oo_dt);
/* obj doesn't contain an lu_object_header, so we don't need call_rcu */
OBD_SLAB_FREE_PTR(obj, osd_object_kmem);
- if (unlikely(h)) {
- lu_object_header_fini(h);
- OBD_FREE_PRE(h, sizeof(*h), "kfreed");
- kfree_rcu(h, loh_rcu);
- }
+ if (unlikely(h))
+ lu_object_header_free(h);
}
static int
/* we may fix some attributes, better do not change the source */
obj->oo_attr = *attr;
+ obj->oo_attr.la_size = 0;
+ obj->oo_attr.la_nlink = 0;
obj->oo_attr.la_valid |= LA_SIZE | LA_NLINK | LA_TYPE;
#ifdef ZFS_PROJINHERIT
zde->zde_pad = 0;
zde->zde_dnode = dn->dn_object;
- zde->zde_type = IFTODT(attr->la_mode & S_IFMT);
+ zde->zde_type = S_DT(attr->la_mode & S_IFMT);
zapid = osd_get_name_n_idx(env, osd, fid, buf,
sizeof(info->oti_str), &zdn);
__u64 start, __u64 end)
{
struct osd_device *osd = osd_obj2dev(osd_dt_obj(dt));
- struct dmu_buf_impl *db = osd_dt_obj(dt)->oo_dn->dn_dbuf;
uint64_t txg = 0;
ENTRY;
if (osd->od_dt_dev.dd_rdonly)
RETURN(0);
- mutex_enter(&db->db_mtx);
- if (db->db_last_dirty)
- txg = db->db_last_dirty->dr_txg;
- mutex_exit(&db->db_mtx);
-
+ txg = osd_db_dirty_txg(osd_dt_obj(dt)->oo_dn->dn_dbuf);
if (txg) {
/* the object is dirty or being synced */
if (osd_object_sync_delay_us < 0)
return 0;
}
-static struct dt_object_operations osd_obj_ops = {
+static bool osd_check_stale(struct dt_object *dt)
+{
+ return false;
+}
+
+static const struct dt_object_operations osd_obj_ops = {
.do_read_lock = osd_read_lock,
.do_write_lock = osd_write_lock,
.do_read_unlock = osd_read_unlock,
.do_xattr_list = osd_xattr_list,
.do_object_sync = osd_object_sync,
.do_invalidate = osd_invalidate,
+ .do_check_stale = osd_check_stale,
};
-static struct lu_object_operations osd_lu_obj_ops = {
+static const struct lu_object_operations osd_lu_obj_ops = {
.loo_object_init = osd_object_init,
.loo_object_delete = osd_object_delete,
.loo_object_release = osd_object_release,
return 0;
}
-static struct dt_object_operations osd_obj_otable_it_ops = {
+static const struct dt_object_operations osd_obj_otable_it_ops = {
.do_attr_get = osd_otable_it_attr_get,
.do_index_try = osd_index_try,
};