* Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
*
- * Copyright (c) 2011, 2012, Intel Corporation.
+ * Copyright (c) 2011, 2013, Intel Corporation.
*/
/*
* This file is part of Lustre, http://www.lustre.org/
*/
extern const struct dt_index_features dt_directory_features;
extern const struct dt_index_features dt_otable_features;
+extern const struct dt_index_features dt_lfsck_features;
/* index features supported by the accounting objects */
extern const struct dt_index_features dt_acct_features;
*/
int (*do_data_get)(const struct lu_env *env, struct dt_object *dt,
void **data);
+
+ /**
+ * Lock object.
+ */
+ int (*do_object_lock)(const struct lu_env *env, struct dt_object *dt,
+ struct lustre_handle *lh,
+ struct ldlm_enqueue_info *einfo,
+ void *policy);
};
/**
* Punch object's content
* precondition: regular object, not index
*/
- int (*do_declare_punch)(const struct lu_env *, struct dt_object *,
+ int (*dbo_declare_punch)(const struct lu_env *, struct dt_object *,
__u64, __u64, struct thandle *th);
- int (*do_punch)(const struct lu_env *env, struct dt_object *dt,
+ int (*dbo_punch)(const struct lu_env *env, struct dt_object *dt,
__u64 start, __u64 end, struct thandle *th,
struct lustre_capa *capa);
};
-struct dt_lock_operations {
- int (*do_object_lock)(const struct lu_env *env, struct dt_object *dt,
- struct lustre_handle *lh,
- struct ldlm_enqueue_info *einfo,
- void *policy);
-};
/**
* Incomplete type of index record.
*/
const struct dt_object_operations *do_ops;
const struct dt_body_operations *do_body_ops;
const struct dt_index_operations *do_index_ops;
- const struct dt_lock_operations *do_lock_ops;
};
/*
__u32 los_last_oid;
};
+static inline struct lu_device *dt2lu_dev(struct dt_device *d)
+{
+ return &d->dd_lu_dev;
+}
+
static inline struct dt_object *lu2dt(struct lu_object *l)
{
LASSERT(l == NULL || IS_ERR(l) || lu_device_is_dt(l->lo_dev));
return lu_object_exists(&dt->do_lu);
}
+static inline int dt_object_remote(const struct dt_object *dt)
+{
+ return lu_object_remote(&dt->do_lu);
+}
+
static inline struct dt_object *lu2dt_obj(struct lu_object *o)
{
LASSERT(ergo(o != NULL, lu_device_is_dt(o->lo_dev)));
__s32 th_result;
/** whether we need sync commit */
- int th_sync:1;
+ unsigned int th_sync:1;
/* local transation, no need to inform other layers */
- int th_local:1;
+ unsigned int th_local:1;
/* In DNE, one transaction can be disassemblied into
* updates on several different MDTs, and these updates
char *local, dt_entry_func_t entry_func,
void *data);
+struct dt_object *
+dt_store_resolve(const struct lu_env *env, struct dt_device *dt,
+ const char *path, struct lu_fid *fid);
+
struct dt_object *dt_store_open(const struct lu_env *env,
struct dt_device *dt,
const char *dirname,
struct dt_object *parent,
const char *name, __u32 mode,
const struct dt_index_features *ft);
+int local_object_unlink(const struct lu_env *env, struct dt_device *dt,
+ struct dt_object *parent, const char *name);
static inline int dt_object_lock(const struct lu_env *env,
struct dt_object *o, struct lustre_handle *lh,
void *policy)
{
LASSERT(o);
- LASSERT(o->do_lock_ops);
- LASSERT(o->do_lock_ops->do_object_lock);
- return o->do_lock_ops->do_object_lock(env, o, lh, einfo, policy);
+ LASSERT(o->do_ops);
+ LASSERT(o->do_ops->do_object_lock);
+ return o->do_ops->do_object_lock(env, o, lh, einfo, policy);
}
int dt_lookup_dir(const struct lu_env *env, struct dt_object *dir,
{
LASSERT(dt);
LASSERT(dt->do_body_ops);
- LASSERT(dt->do_body_ops->do_declare_punch);
- return dt->do_body_ops->do_declare_punch(env, dt, start, end, th);
+ LASSERT(dt->do_body_ops->dbo_declare_punch);
+ return dt->do_body_ops->dbo_declare_punch(env, dt, start, end, th);
}
static inline int dt_punch(const struct lu_env *env, struct dt_object *dt,
{
LASSERT(dt);
LASSERT(dt->do_body_ops);
- LASSERT(dt->do_body_ops->do_punch);
- return dt->do_body_ops->do_punch(env, dt, start, end, th, capa);
+ LASSERT(dt->do_body_ops->dbo_punch);
+ return dt->do_body_ops->dbo_punch(env, dt, start, end, th, capa);
}
static inline int dt_fiemap_get(const struct lu_env *env, struct dt_object *d,
return dti;
}
+int dt_global_init(void);
+void dt_global_fini(void);
+
+# ifdef LPROCFS
+int lprocfs_dt_rd_blksize(char *page, char **start, off_t off,
+ int count, int *eof, void *data);
+int lprocfs_dt_rd_kbytestotal(char *page, char **start, off_t off,
+ int count, int *eof, void *data);
+int lprocfs_dt_rd_kbytesfree(char *page, char **start, off_t off,
+ int count, int *eof, void *data);
+int lprocfs_dt_rd_kbytesavail(char *page, char **start, off_t off,
+ int count, int *eof, void *data);
+int lprocfs_dt_rd_filestotal(char *page, char **start, off_t off,
+ int count, int *eof, void *data);
+int lprocfs_dt_rd_filesfree(char *page, char **start, off_t off,
+ int count, int *eof, void *data);
+# endif /* LPROCFS */
+
#endif /* __LUSTRE_DT_OBJECT_H */