* Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
*
- * Copyright (c) 2012, Intel Corporation.
+ * Copyright (c) 2012, 2013, Intel Corporation.
*/
/*
* This file is part of Lustre, http://www.lustre.org/
* Author: Mikhail Pershin <mike.tappro@intel.com>
*/
-#ifndef EXPORT_SYMTAB
-# define EXPORT_SYMTAB
-#endif
#define DEBUG_SUBSYSTEM S_MDS
#include "osp_internal.h"
if (attr == NULL)
RETURN(0);
- if (attr->la_valid & LA_SIZE && attr->la_size > 0) {
+ if (attr->la_valid & LA_SIZE && attr->la_size > 0 &&
+ fid_is_zero(lu_object_fid(&o->opo_obj.do_lu))) {
LASSERT(!dt_object_exists(dt));
osp_object_assign_fid(env, d, o);
rc = osp_object_truncate(env, dt, attr->la_size);
memcpy(fid, lu_object_fid(&dt->do_lu), sizeof(*fid));
- LASSERTF(fid_is_sane(fid), "fid for osp_obj %p is insane"DFID"!\n",
- osp_obj, PFID(fid));
+ LASSERTF(fid_is_sane(fid), "fid for osp_object %p is insane"DFID"!\n",
+ o, PFID(fid));
if (!o->opo_reserved) {
/* special case, id was assigned outside of transaction
* see comments in osp_declare_attr_set */
+ LASSERT(d->opd_pre != NULL);
spin_lock(&d->opd_pre_lock);
osp_update_last_fid(d, fid);
spin_unlock(&d->opd_pre_lock);
}
- CDEBUG(D_INODE, "fid for osp_obj %p is "DFID"!\n", osp_obj, PFID(fid));
+ CDEBUG(D_INODE, "fid for osp_object %p is "DFID"\n", o, PFID(fid));
/* If the precreate ends, it means it will be ready to rollover to
* the new sequence soon, all the creation should be synchronized,
/* we might have lost precreated objects */
if (unlikely(d->opd_gap_count) > 0) {
+ LASSERT(d->opd_pre != NULL);
spin_lock(&d->opd_pre_lock);
if (d->opd_gap_count > 0) {
int count = d->opd_gap_count;
- osi->osi_oi.oi_id = fid_oid(&d->opd_gap_start_fid);
+
+ ostid_set_id(&osi->osi_oi,
+ fid_oid(&d->opd_gap_start_fid));
d->opd_gap_count = 0;
spin_unlock(&d->opd_pre_lock);
po->opo_obj.do_ops = &osp_md_obj_ops;
o->lo_header->loh_attr |= LOHA_REMOTE;
- po->opo_obj.do_lock_ops = &osp_md_lock_ops;
rc = po->opo_obj.do_ops->do_attr_get(env, lu2dt_obj(o),
la, NULL);
if (rc == 0)
* this may require lu_object_put() in LOD
*/
if (unlikely(po->opo_reserved)) {
+ LASSERT(d->opd_pre != NULL);
LASSERT(d->opd_pre_reserved > 0);
spin_lock(&d->opd_pre_lock);
d->opd_pre_reserved--;
/* not needed in cache any more */
set_bit(LU_OBJECT_HEARD_BANSHEE, &o->lo_header->loh_flags);
}
+
+ if (is_ost_obj(o))
+ /* XXX: Currently, NOT cache OST-object on MDT because:
+ * 1. it is not often accessed on MDT.
+ * 2. avoid up layer (such as LFSCK) to load too many
+ * once-used OST-objects. */
+ set_bit(LU_OBJECT_HEARD_BANSHEE, &o->lo_header->loh_flags);
+
EXIT;
}