-/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
- * vim:expandtab:shiftwidth=8:tabstop=8:
- *
+/*
* GPL HEADER START
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
/*
* Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
+ *
+ * Copyright (c) 2011, 2012, Whamcloud, Inc.
*/
/*
* This file is part of Lustre, http://www.lustre.org/
#include <dt_object.h>
#include <lvfs.h>
+/* LU-1051, temperary solution to reduce llog credits */
+#define DECLARE_LLOG_REWRITE 0
+#define DECLARE_LLOG_WRITE INT_MAX
+
struct md_device;
struct md_device_operations;
struct md_object;
struct md_capainfo {
__u32 mc_auth;
__u32 mc_padding;
- const struct lu_fid *mc_fid[MD_CAPAINFO_MAX];
+ struct lu_fid mc_fid[MD_CAPAINFO_MAX];
struct lustre_capa *mc_capa[MD_CAPAINFO_MAX];
};
MA_LMV = (1 << 4),
MA_ACL_DEF = (1 << 5),
MA_LOV_DEF = (1 << 6),
-/* (Layout lock will used #7 here) */
+ MA_LAY_GEN = (1 << 7),
MA_HSM = (1 << 8),
MA_SOM = (1 << 9),
MA_PFID = (1 << 10)
__u64 ma_need;
__u64 ma_attr_flags;
struct lu_attr ma_attr;
+ struct lu_fid ma_pfid;
+ struct md_hsm ma_hsm;
struct lov_mds_md *ma_lmm;
- int ma_lmm_size;
struct lmv_stripe_md *ma_lmv;
- int ma_lmv_size;
void *ma_acl;
- int ma_acl_size;
struct llog_cookie *ma_cookie;
- int ma_cookie_size;
struct lustre_capa *ma_capa;
- struct md_hsm ma_hsm;
struct md_som_data *ma_som;
- struct lu_fid ma_pfid;
+ int ma_lmm_size;
+ int ma_big_lmm_used:1;
+ int ma_lmv_size;
+ int ma_acl_size;
+ int ma_cookie_size;
+ __u16 ma_layout_gen;
};
/** Additional parameters for create */
int (*moo_xattr_del)(const struct lu_env *env, struct md_object *obj,
const char *name);
+ /** \retval number of bytes actually read upon success */
int (*moo_readpage)(const struct lu_env *env, struct md_object *obj,
const struct lu_rdpg *rdpg);
struct md_object *obj, int flag);
int (*moo_close)(const struct lu_env *env, struct md_object *obj,
- struct md_attr *ma);
+ struct md_attr *ma, int mode);
int (*moo_capa_get)(const struct lu_env *, struct md_object *,
struct lustre_capa *, int renewal);
int (*moo_object_sync)(const struct lu_env *, struct md_object *);
- dt_obj_version_t (*moo_version_get)(const struct lu_env *,
- struct md_object *);
- void (*moo_version_set)(const struct lu_env *, struct md_object *,
- dt_obj_version_t);
int (*moo_path)(const struct lu_env *env, struct md_object *obj,
char *path, int pathlen, __u64 *recno, int *linkno);
int (*moo_file_lock)(const struct lu_env *env, struct md_object *obj,
struct md_object *cobj, const struct lu_name *lname,
struct md_attr *ma);
+ /** This method is used to compare a requested layout to an existing
+ * layout (struct lov_mds_md_v1/3 vs struct lov_mds_md_v1/3) */
+ int (*mdo_lum_lmm_cmp)(const struct lu_env *env,
+ struct md_object *cobj,
+ const struct md_op_spec *spec,
+ struct md_attr *ma);
+
/** partial ops for cross-ref case */
int (*mdo_name_insert)(const struct lu_env *env,
struct md_object *obj,
int *md_size, int *cookie_size);
int (*mdo_statfs)(const struct lu_env *env, struct md_device *m,
- cfs_kstatfs_t *sfs);
+ struct obd_statfs *sfs);
int (*mdo_init_capa_ctxt)(const struct lu_env *env, struct md_device *m,
int mode, unsigned long timeout, __u32 alg,
static inline int mo_close(const struct lu_env *env,
struct md_object *m,
- struct md_attr *ma)
+ struct md_attr *ma,
+ int mode)
{
LASSERT(m->mo_ops->moo_close);
- return m->mo_ops->moo_close(env, m, ma);
+ return m->mo_ops->moo_close(env, m, ma, mode);
}
static inline int mo_readpage(const struct lu_env *env,
return m->mo_ops->moo_object_sync(env, m);
}
-static inline dt_obj_version_t mo_version_get(const struct lu_env *env,
- struct md_object *m)
-{
- LASSERT(m->mo_ops->moo_version_get);
- return m->mo_ops->moo_version_get(env, m);
-}
-
-static inline void mo_version_set(const struct lu_env *env,
- struct md_object *m, dt_obj_version_t ver)
-{
- LASSERT(m->mo_ops->moo_version_set);
- return m->mo_ops->moo_version_set(env, m, ver);
-}
-
static inline int mo_file_lock(const struct lu_env *env, struct md_object *m,
struct lov_mds_md *lmm,
struct ldlm_extent *extent,
return c->mo_dir_ops->mdo_unlink(env, p, c, lname, ma);
}
+static inline int mdo_lum_lmm_cmp(const struct lu_env *env,
+ struct md_object *c,
+ const struct md_op_spec *spec,
+ struct md_attr *ma)
+{
+ LASSERT(c->mo_dir_ops->mdo_lum_lmm_cmp);
+ return c->mo_dir_ops->mdo_lum_lmm_cmp(env, c, spec, ma);
+}
+
static inline int mdo_name_insert(const struct lu_env *env,
struct md_object *p,
const struct lu_name *lname,