#define OSD_MAX_CACHE_SIZE OBD_OBJECT_EOF
+#ifndef HAVE_ZFS_REFCOUNT_ADD
+#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 struct kmem_cache *osd_object_kmem;
/**
* Iterator's in-memory data structure for quota file.
unsigned oiq_reset:1; /* 1 -- no need to advance */
};
+enum osd_zap_pos {
+ OZI_POS_INIT = 0,
+ OZI_POS_DOT = 1, /* cursor at . */
+ OZI_POS_DOTDOT = 2, /* cursor at .. */
+ OZI_POS_REAL = 3, /* cursor at real entries */
+};
+
/**
* Iterator's in-memory data structure for ZAPs
*
zap_cursor_t *ozi_zc;
struct osd_object *ozi_obj;
unsigned ozi_reset:1; /* 1 -- no need to advance */
- /* ozi_pos - position of the cursor:
- * 0 - before any record
- * 1 - "."
- * 2 - ".."
- * 3 - real records */
- unsigned ozi_pos:3;
+ /* ozi_pos - position of the cursor */
+ enum osd_zap_pos ozi_pos;
union {
char ozi_name[MAXNAMELEN]; /* file name for dir */
__u64 ozi_key; /* binary key for index files */
const struct lu_env *oti_env;
struct lu_fid oti_fid;
- /*
- * XXX temporary: for ->i_op calls.
- */
- struct timespec oti_time;
struct ost_id oti_ostid;
struct list_head ot_sa_list;
dmu_tx_t *ot_tx;
struct lquota_trans ot_quota_trans;
- __u32 ot_write_commit:1,
- ot_assigned:1;
+ __u32 ot_assigned:1;
};
#define OSD_OI_NAME_SIZE 24
od_xattr_in_sa:1,
od_is_ost:1,
od_in_init:1,
- od_posix_acl:1;
+ od_posix_acl:1,
+ od_nonrotational:1;
unsigned int od_dnsize;
int od_index_backup_stop;
enum lustre_index_backup_policy od_index_backup_policy;
char od_mntdev[128];
char od_svname[128];
- char od_uuid[16];
+ uuid_t od_uuid;
int od_connects;
int od_index;
dnode_t *od_projectused_dn;
#endif
- /* quota slave instance */
- struct qsd_instance *od_quota_slave;
+ /* quota slave instance for inode */
+ struct qsd_instance *od_quota_slave_md;
+
+ /* quota slave instance for block */
+ struct qsd_instance *od_quota_slave_dt;
struct brw_stats od_brw_stats;
atomic_t od_r_in_flight;
unsigned long long od_readcache_max_filesize;
};
+static inline struct qsd_instance *osd_def_qsd(struct osd_device *osd)
+{
+ if (osd->od_is_ost)
+ return osd->od_quota_slave_dt;
+ else
+ return osd->od_quota_slave_md;
+}
+
enum osd_destroy_type {
OSD_DESTROY_NONE = 0,
OSD_DESTROY_SYNC = 1,
struct lu_object_header *oo_header;
};
-int osd_statfs(const struct lu_env *, struct dt_device *, struct obd_statfs *);
+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;
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, int *flags,
+ struct osd_thandle *oh,
+ enum osd_quota_local_flags *local_flags,
enum osd_qid_declare_flags osd_qid_declare_flags);
uint64_t osd_objs_count_estimate(uint64_t refdbytes, uint64_t usedobjs,
uint64_t nrblocks, uint64_t est_maxblockshift);
#endif
#ifndef HAVE_DSL_POOL_CONFIG
-static inline void dsl_pool_config_enter(dsl_pool_t *dp, char *name)
+static inline void dsl_pool_config_enter(dsl_pool_t *dp, void *name)
{
}
-static inline void dsl_pool_config_exit(dsl_pool_t *dp, char *name)
+static inline void dsl_pool_config_exit(dsl_pool_t *dp, void *name)
{
}
#endif
int dnodesize, dmu_tx_t *tx)
{
if (dnodesize == 0)
- dnodesize = MAX(dmu_objset_dnodesize(os), DNODE_MIN_SIZE);
+ dnodesize = max_t(int, dmu_objset_dnodesize(os),
+ DNODE_MIN_SIZE);
return dmu_object_alloc_dnsize(os, objtype, blocksize, DMU_OT_SA,
DN_BONUS_SIZE(dnodesize), dnodesize, tx);
int indirect_blockshift, int dnodesize, dmu_tx_t *tx)
{
if (dnodesize == 0)
- dnodesize = MAX(dmu_objset_dnodesize(os), DNODE_MIN_SIZE);
+ dnodesize = max_t(int, dmu_objset_dnodesize(os),
+ DNODE_MIN_SIZE);
return zap_create_flags_dnsize(os, normflags, flags, ot,
leaf_blockshift, indirect_blockshift,
SA_HDL_PRIVATE, &obj->oo_sa_hdl);
if (rc)
return rc;
- refcount_add(&dn->dn_bonus->db_holds, osd_obj_tag);
+ zfs_refcount_add(&dn->dn_bonus->db_holds, osd_obj_tag);
return 0;
}
LASSERT(dn->dn_bonus);
db = dn->dn_bonus;
- DB_DNODE_EXIT(db);
dmu_buf_rele(&db->db, osd_obj_tag);
}
#define dmu_tx_mark_netfree(tx)
#endif
+#ifndef HAVE_ZFS_INODE_TIMESPEC
+#define inode_timespec_t timestruc_t
+#endif
+
#endif /* _OSD_INTERNAL_H */