-/* -*- 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 Whamcloud, Inc.
- *
+ * Copyright (c) 2011, 2012, Whamcloud, Inc.
*/
/*
* This file is part of Lustre, http://www.lustre.org/
struct obd_device *mdd_obd_dev;
struct lu_fid mdd_root_fid;
struct dt_device_param mdd_dt_conf;
- struct dt_object *mdd_orphans;
+ struct dt_object *mdd_orphans; /* PENDING directory */
struct dt_object *mdd_capa;
struct dt_txn_callback mdd_txn_cb;
cfs_proc_dir_entry_t *mdd_proc_entry;
extern const struct dt_index_features orph_index_features;
+struct lov_mds_md *mdd_max_lmm_buffer(const struct lu_env *env, int size);
struct lov_mds_md *mdd_max_lmm_get(const struct lu_env *env,
struct mdd_device *mdd);
int mdd_data_get(const struct lu_env *env, struct mdd_object *obj, void **data);
int mdd_la_get(const struct lu_env *env, struct mdd_object *obj,
struct lu_attr *la, struct lustre_capa *capa);
+int mdd_attr_get(const struct lu_env *env, struct md_object *obj,
+ struct md_attr *ma);
+int mdd_attr_set(const struct lu_env *env, struct md_object *obj,
+ const struct md_attr *ma);
int mdd_attr_set_internal(const struct lu_env *env,
struct mdd_object *obj,
struct lu_attr *attr,
int mdd_lov_setattr_async(const struct lu_env *env, struct mdd_object *obj,
struct lov_mds_md *lmm, int lmm_size,
struct llog_cookie *logcookies);
+int mdd_lovobj_unlink(const struct lu_env *env, struct mdd_device *mdd,
+ struct mdd_object *obj, struct lu_attr *la,
+ struct lov_mds_md *lmm, int lmm_size,
+ struct llog_cookie *logcookies,
+ int log_unlink);
struct mdd_thread_info *mdd_env_info(const struct lu_env *env);
ci->mc_capa[offset] = capa;
}
+static inline const char *mdd_obj_dev_name(const struct mdd_object *obj)
+{
+ return lu_dev_name(obj->mod_obj.mo_lu.lo_dev);
+}
+
#define MAX_ATIME_DIFF 60
enum {
struct lustre_capa *capa)
{
struct dt_object *next = mdd_object_child(obj);
- LASSERT(mdd_object_exists(obj));
+ if (mdd_object_exists(obj) == 0) {
+ CERROR("%s: object "DFID" not found: rc = -2\n",
+ mdd_obj_dev_name(obj), PFID(mdd_object_fid(obj)));
+ return -ENOENT;
+ }
return next->do_ops->do_attr_set(env, next, la, handle, capa);
}
struct lustre_capa *capa)
{
struct dt_object *next = mdd_object_child(obj);
- LASSERT(mdd_object_exists(obj));
+ if (mdd_object_exists(obj) == 0) {
+ CERROR("%s: object "DFID" not found: rc = -2\n",
+ mdd_obj_dev_name(obj), PFID(mdd_object_fid(obj)));
+ return -ENOENT;
+ }
return next->do_ops->do_xattr_set(env, next, buf, name, fl, handle,
capa);
}
struct lustre_capa *capa)
{
struct dt_object *next = mdd_object_child(obj);
- LASSERT(mdd_object_exists(obj));
+ if (mdd_object_exists(obj) == 0) {
+ CERROR("%s: object "DFID" not found: rc = -2\n",
+ mdd_obj_dev_name(obj), PFID(mdd_object_fid(obj)));
+ return -ENOENT;
+ }
return next->do_ops->do_xattr_del(env, next, name, handle, capa);
}
struct lu_buf *buf, struct lustre_capa *capa)
{
struct dt_object *next = mdd_object_child(obj);
- LASSERT(mdd_object_exists(obj));
+ if (mdd_object_exists(obj) == 0) {
+ CERROR("%s: object "DFID" not found: rc = -2\n",
+ mdd_obj_dev_name(obj), PFID(mdd_object_fid(obj)));
+ return -ENOENT;
+ }
return next->do_ops->do_xattr_list(env, next, buf, capa);
}
struct thandle *handle)
{
struct dt_object *next = mdd_object_child(obj);
- LASSERT(mdd_object_exists(obj));
+ if (mdd_object_exists(obj) == 0) {
+ CERROR("%s: object "DFID" not found: rc = -2\n",
+ mdd_obj_dev_name(obj), PFID(mdd_object_fid(obj)));
+ return -ENOENT;
+ }
return next->do_ops->do_ref_add(env, next, handle);
}
struct thandle *handle)
{
struct dt_object *next = mdd_object_child(obj);
- LASSERT(mdd_object_exists(obj));
+ if (mdd_object_exists(obj) == 0) {
+ CERROR("%s: object "DFID" not found: rc = -2\n",
+ mdd_obj_dev_name(obj), PFID(mdd_object_fid(obj)));
+ return -ENOENT;
+ }
return next->do_ops->do_ref_del(env, next, handle);
}
__u64 opc)
{
struct dt_object *next = mdd_object_child(obj);
- LASSERT(mdd_object_exists(obj));
+ if (mdd_object_exists(obj) == 0) {
+ CERROR("%s: object "DFID" not found: rc = -2\n",
+ mdd_obj_dev_name(obj), PFID(mdd_object_fid(obj)));
+ return ERR_PTR(-ENOENT);
+ }
return next->do_ops->do_capa_get(env, next, old, opc);
}