*
* You should have received a copy of the GNU General Public License
* version 2 along with this program; If not, see
- * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf
- *
- * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
- * CA 95054 USA or visit www.sun.com if you need additional information or
- * have any questions.
+ * http://www.gnu.org/licenses/gpl-2.0.html
*
* GPL HEADER END
*/
ma->ma_need = MA_INODE | MA_LOV;
ma->ma_valid = 0;
mutex_lock(&o->mot_lov_mutex);
- if (!(o->mot_flags & MOF_LOV_CREATED)) {
+ if (!o->mot_lov_created) {
rc = mdo_create_data(info->mti_env,
p ? mdt_object_child(p) : NULL,
mdt_object_child(o), spec, ma);
rc = mdt_attr_get_complex(info, o, ma);
if (rc == 0 && ma->ma_valid & MA_LOV)
- o->mot_flags |= MOF_LOV_CREATED;
+ o->mot_lov_created = 1;
}
mutex_unlock(&o->mot_lov_mutex);
if (info->mti_transno != 0) {
struct obd_export *exp = req->rq_export;
- CERROR("%s: replay trans "LPU64" NID %s: rc = %d\n",
+ CERROR("%s: replay trans %llu NID %s: rc = %d\n",
mdt_obd_name(mdt), info->mti_transno,
libcfs_nid2str(exp->exp_connection->c_peer.nid),
rc);
}
spin_unlock(&mdt->mdt_lut.lut_translock);
- CDEBUG(D_INODE, "transno = "LPU64", last_committed = "LPU64"\n",
+ CDEBUG(D_INODE, "transno = %llu, last_committed = %llu\n",
info->mti_transno,
req->rq_export->exp_obd->obd_last_committed);
* otherwise the following resend(after replay) can not
* be checked correctly by xid */
mutex_unlock(&ted->ted_lcd_lock);
- CDEBUG(D_HA, "%s: transno = "LPU64" < last_transno = "LPU64"\n",
+ CDEBUG(D_HA, "%s: transno = %llu < last_transno = %llu\n",
mdt_obd_name(mdt), info->mti_transno,
lcd->lcd_last_transno);
RETURN_EXIT;
{
LASSERT(mfd != NULL);
- CDEBUG(D_HA, DFID " Change mfd mode "LPO64" -> "LPO64".\n",
+ CDEBUG(D_HA, DFID " Change mfd mode %#llo -> %#llo.\n",
PFID(mdt_object_fid(mfd->mfd_object)), mfd->mfd_mode, mode);
mfd->mfd_mode = mode;
mdt_set_disposition(info, rep, DISP_OPEN_STRIPE);
}
- CDEBUG(D_INODE, "after open, ma_valid bit = "LPX64" lmm_size = %d\n",
- ma->ma_valid, ma->ma_lmm_size);
+ CDEBUG(D_INODE, "after open, ma_valid bit = %#llx lmm_size = %d\n",
+ ma->ma_valid, ma->ma_lmm_size);
if (ma->ma_valid & MA_LOV) {
LASSERT(ma->ma_lmm_size != 0);
old_mfd = mdt_handle2mfd(med, info->mti_rr.rr_handle, true);
if (old_mfd != NULL) {
CDEBUG(D_HA, "delete orphan mfd = %p, fid = "DFID", "
- "cookie = "LPX64"\n", mfd,
+ "cookie = %#llx\n", mfd,
PFID(mdt_object_fid(mfd->mfd_object)),
info->mti_rr.rr_handle->cookie);
class_handle_unhash(&old_mfd->mfd_handle);
} else {
spin_unlock(&med->med_open_lock);
CDEBUG(D_HA, "orphan mfd not found, fid = "DFID", "
- "cookie = "LPX64"\n",
+ "cookie = %#llx\n",
PFID(mdt_object_fid(mfd->mfd_object)),
info->mti_rr.rr_handle->cookie);
}
- CDEBUG(D_HA, "Store old cookie "LPX64" in new mfd\n",
+ CDEBUG(D_HA, "Store old cookie %#llx in new mfd\n",
info->mti_rr.rr_handle->cookie);
mfd->mfd_old_handle.cookie = info->mti_rr.rr_handle->cookie;
opdata = mdt_req_from_lrd(req, info->mti_reply_data);
mdt_set_disposition(info, ldlm_rep, opdata);
- CDEBUG(D_INODE, "This is reconstruct open: disp="LPX64", result=%d\n",
+ CDEBUG(D_INODE, "This is reconstruct open: disp=%#llx, result=%d\n",
ldlm_rep->lock_policy_res1, req->rq_status);
if (mdt_get_disposition(ldlm_rep, DISP_OPEN_CREATE) &&
/* Lease must be with open lock */
if (!(open_flags & MDS_OPEN_LOCK)) {
- CERROR("Request lease for file:"DFID ", but open lock "
- "is missed, open_flags = "LPO64".\n",
- PFID(mdt_object_fid(obj)), open_flags);
+ CERROR("%s: Request lease for file:"DFID ", but open lock "
+ "is missed, open_flags = %#llo : rc = %d\n",
+ mdt_obd_name(info->mti_mdt),
+ PFID(mdt_object_fid(obj)), open_flags, -EPROTO);
GOTO(out, rc = -EPROTO);
}
rc = mdt_object_lock(info, obj, lhc, *ibits);
}
- CDEBUG(D_INODE, "Requested bits lock:"DFID ", ibits = "LPX64
- ", open_flags = "LPO64", try_layout = %d, rc = %d\n",
- PFID(mdt_object_fid(obj)), *ibits, open_flags, try_layout, rc);
+ CDEBUG(D_INODE, "%s: Requested bits lock:"DFID ", ibits = %#llx"
+ ", open_flags = %#llo, try_layout = %d : rc = %d\n",
+ mdt_obd_name(info->mti_mdt), PFID(mdt_object_fid(obj)),
+ *ibits, open_flags, try_layout, rc);
/* will change layout, revoke layout locks by enqueuing EX lock. */
if (rc == 0 && create_layout) {
struct mdt_lock_handle *ll = &info->mti_lh[MDT_LH_LAYOUT];
CDEBUG(D_INODE, "Will create layout, get EX layout lock:"DFID
- ", open_flags = "LPO64"\n",
+ ", open_flags = %#llo\n",
PFID(mdt_object_fid(obj)), open_flags);
/* We cannot enqueue another lock for the same resource we
RETURN(rc);
}
+/*
+ * find root object and take its xattr lock if it's on remote MDT, later create
+ * may use fs default striping (which is stored in root xattr).
+ */
+static int mdt_lock_root_xattr(struct mdt_thread_info *info,
+ struct mdt_device *mdt)
+{
+ struct mdt_object *md_root = mdt->mdt_md_root;
+ struct lustre_handle lhroot;
+ int rc;
+
+ if (md_root == NULL) {
+ lu_root_fid(&info->mti_tmp_fid1);
+ md_root = mdt_object_find(info->mti_env, mdt,
+ &info->mti_tmp_fid1);
+ if (IS_ERR(md_root))
+ return PTR_ERR(md_root);
+
+ spin_lock(&mdt->mdt_lock);
+ if (mdt->mdt_md_root != NULL) {
+ spin_unlock(&mdt->mdt_lock);
+
+ LASSERTF(mdt->mdt_md_root == md_root,
+ "Different root object ("
+ DFID") instances, %p, %p\n",
+ PFID(&info->mti_tmp_fid1),
+ mdt->mdt_md_root, md_root);
+ LASSERT(atomic_read(
+ &md_root->mot_obj.lo_header->loh_ref) > 1);
+
+ mdt_object_put(info->mti_env, md_root);
+ } else {
+ mdt->mdt_md_root = md_root;
+ spin_unlock(&mdt->mdt_lock);
+ }
+ }
+
+ if (md_root->mot_cache_attr || !mdt_object_remote(md_root))
+ return 0;
+
+ rc = mdt_remote_object_lock(info, md_root, mdt_object_fid(md_root),
+ &lhroot, LCK_PR, MDS_INODELOCK_XATTR,
+ false, true);
+ if (rc < 0)
+ return rc;
+
+ md_root->mot_cache_attr = 1;
+
+ /* don't cancel this lock, so that we know the cached xattr is valid. */
+ ldlm_lock_decref(&lhroot, LCK_PR);
+
+ return 0;
+}
+
int mdt_reint_open(struct mdt_thread_info *info, struct mdt_lock_handle *lhc)
{
struct mdt_device *mdt = info->mti_mdt;
GOTO(out, result = -EROFS);
CDEBUG(D_INODE, "I am going to open "DFID"/("DNAME"->"DFID") "
- "cr_flag="LPO64" mode=0%06o msg_flag=0x%x\n",
+ "cr_flag=%#llo mode=0%06o msg_flag=0x%x\n",
PFID(rr->rr_fid1), PNAME(&rr->rr_name),
PFID(rr->rr_fid2), create_flags,
ma->ma_attr.la_mode, msg_flags);
GOTO(out, result);
}
- if (OBD_FAIL_CHECK(OBD_FAIL_MDS_OPEN_PACK))
- GOTO(out, result = err_serious(-ENOMEM));
+ if (OBD_FAIL_CHECK(OBD_FAIL_MDS_OPEN_PACK))
+ GOTO(out, result = err_serious(-ENOMEM));
- mdt_set_disposition(info, ldlm_rep,
- (DISP_IT_EXECD | DISP_LOOKUP_EXECD));
+ mdt_set_disposition(info, ldlm_rep,
+ (DISP_IT_EXECD | DISP_LOOKUP_EXECD));
if (!lu_name_is_valid(&rr->rr_name))
GOTO(out, result = -EPROTO);
+ result = mdt_lock_root_xattr(info, mdt);
+ if (result < 0)
+ GOTO(out, result);
+
again:
- lh = &info->mti_lh[MDT_LH_PARENT];
+ lh = &info->mti_lh[MDT_LH_PARENT];
mdt_lock_pdo_init(lh,
(create_flags & MDS_OPEN_CREAT) ? LCK_PW : LCK_PR,
&rr->rr_name);
if (result != 0)
GOTO(out_child, result);
}
- created = 1;
+ created = 1;
+ mdt_counter_incr(req, LPROC_MDT_MKNOD);
} else {
/*
* The object is on remote node, return its FID for remote open.
/* Compare on-disk and packed data_version */
if (data->cd_data_version != ma->ma_hsm.mh_arch_ver) {
- CDEBUG(D_HSM, DFID" data_version mismatches: packed="LPU64
- " and on-disk="LPU64"\n", PFID(mdt_object_fid(o)),
+ CDEBUG(D_HSM, DFID" data_version mismatches: packed=%llu"
+ " and on-disk=%llu\n", PFID(mdt_object_fid(o)),
data->cd_data_version, ma->ma_hsm.mh_arch_ver);
GOTO(out_unlock, rc = -EPERM);
}
if (mdt_mfd_closed(mfd)) {
spin_unlock(&med->med_open_lock);
CDEBUG(D_INODE, "no handle for file close: fid = "DFID
- ": cookie = "LPX64"\n", PFID(info->mti_rr.rr_fid1),
+ ": cookie = %#llx\n", PFID(info->mti_rr.rr_fid1),
info->mti_close_handle.cookie);
/** not serious error since bug 3633 */
rc = -ESTALE;