void req_capsule_extend(struct req_capsule *pill, const struct req_format *fmt);
int req_capsule_has_field(const struct req_capsule *pill,
- const struct req_msg_field *field);
+ const struct req_msg_field *field,
+ enum req_location loc);
int req_capsule_field_present(const struct req_capsule *pill,
- const struct req_msg_field *field);
+ const struct req_msg_field *field,
+ enum req_location loc);
int req_layout_init(void);
void req_layout_fini(void);
static struct lu_object_operations mdt_obj_ops;
+int mdt_get_disposition(struct ldlm_reply *rep, int flag)
+{
+ if (!rep)
+ return 0;
+ return (rep->lock_policy_res1 & flag);
+}
+
+void mdt_set_disposition(struct mdt_thread_info *info,
+ struct ldlm_reply *rep, int flag)
+{
+ if (info)
+ info->mti_opdata |= flag;
+ if (rep)
+ rep->lock_policy_res1 |= flag;
+}
+
static int mdt_getstatus(struct mdt_thread_info *info)
{
CDEBUG(D_INODE, "getattr with lock for "DFID"/%s, ldlm_rep = %p\n",
PFID(mdt_object_fid(parent)), name, ldlm_rep);
- intent_set_disposition(ldlm_rep, DISP_LOOKUP_EXECD);
+ mdt_set_disposition(info, ldlm_rep, DISP_LOOKUP_EXECD);
if (strlen(name) == 0) {
/* only getattr on the child. parent is on another node. */
- intent_set_disposition(ldlm_rep, DISP_LOOKUP_POS);
+ mdt_set_disposition(info, ldlm_rep, DISP_LOOKUP_POS);
child = parent;
CDEBUG(D_INODE, "partial getattr_name child_fid = "DFID
", ldlm_rep=%p\n",
result = mdo_lookup(info->mti_ctxt, next, name, child_fid);
if (result != 0) {
if (result == -ENOENT)
- intent_set_disposition(ldlm_rep, DISP_LOOKUP_NEG);
+ mdt_set_disposition(info, ldlm_rep, DISP_LOOKUP_NEG);
GOTO(out_parent, result);
} else
- intent_set_disposition(ldlm_rep, DISP_LOOKUP_POS);
+ mdt_set_disposition(info, ldlm_rep, DISP_LOOKUP_POS);
/*
*step 3: find the child object by fid & lock it.
* regardless if it is local or remote.
ENTRY;
pill = &info->mti_pill;
- if (req_capsule_has_field(pill, &RMF_MDT_BODY))
+ if (req_capsule_has_field(pill, &RMF_MDT_BODY, RCL_CLIENT))
result = mdt_body_unpack(info, flags);
else
result = 0;
return mdt_handle_common(req, mdt_readpage_handlers);
}
-/*Please move these functions from mds to mdt*/
-int intent_disposition(struct ldlm_reply *rep, int flag)
-{
- if (!rep)
- return 0;
- return (rep->lock_policy_res1 & flag);
-}
-
-void intent_set_disposition(struct ldlm_reply *rep, int flag)
-{
- if (!rep)
- return;
- rep->lock_policy_res1 |= flag;
-}
-
enum mdt_it_code {
MDT_IT_OPEN,
MDT_IT_OCREAT,
if (rc)
RETURN(rc);
ldlm_rep = req_capsule_server_get(&info->mti_pill, &RMF_DLM_REP);
- intent_set_disposition(ldlm_rep, DISP_IT_EXECD);
+ mdt_set_disposition(info, ldlm_rep, DISP_IT_EXECD);
ldlm_rep->lock_policy_res2 =
mdt_getattr_name_lock(info, lhc, child_bits, ldlm_rep);
mdt_shrink_reply(info, DLM_REPLY_REC_OFF + 1);
- if (intent_disposition(ldlm_rep, DISP_LOOKUP_NEG))
+ if (mdt_get_disposition(ldlm_rep, DISP_LOOKUP_NEG))
ldlm_rep->lock_policy_res2 = 0;
- if (!intent_disposition(ldlm_rep, DISP_LOOKUP_POS) ||
+ if (!mdt_get_disposition(ldlm_rep, DISP_LOOKUP_POS) ||
ldlm_rep->lock_policy_res2) {
RETURN(ELDLM_LOCK_ABORTED);
}
RETURN(-EFAULT);
rep->lock_policy_res2 = rc;
- intent_set_disposition(rep, DISP_IT_EXECD);
+ mdt_set_disposition(info, rep, DISP_IT_EXECD);
mdt_finish_reply(info, rc);
__u64 mti_transno;
__u32 mti_trans_flags;
+ /* opdata for mdt_open(), has the same as ldlm_reply:lock_policy_res1.
+ * mdt_update_last_rcvd() stores this value onto disk for recovery
+ * when mdt_trans_stop_cb() is called.
+ */
+ __u64 mti_opdata;
- /* temporary stuff used by thread to save stack comsuption.
+ /* temporary stuff used by thread to save stack consumption.
* if something is in a union, make sure they do not conflict */
struct lu_fid mti_tmp_fid1;
return lu_object_fid(&o->mot_obj.mo_lu);
}
+int mdt_get_disposition(struct ldlm_reply *rep, int flag);
+void mdt_set_disposition(struct mdt_thread_info *info,
+ struct ldlm_reply *rep, int flag);
+
int mdt_object_lock(struct mdt_thread_info *,
struct mdt_object *,
struct mdt_lock_handle *,
la->la_mtime = rec->sa_mtime;
ma->ma_valid = MA_INODE;
- if (req_capsule_field_present(pill, &RMF_EADATA)) {
+ if (req_capsule_field_present(pill, &RMF_EADATA, RCL_CLIENT)) {
ma->ma_lmm = req_capsule_client_get(pill, &RMF_EADATA);
ma->ma_lmm_size = req_capsule_get_size(pill, &RMF_EADATA,
RCL_CLIENT);
ma->ma_valid |= MA_LOV;
}
- if (req_capsule_field_present(pill, &RMF_LOGCOOKIES)) {
+ if (req_capsule_field_present(pill, &RMF_LOGCOOKIES, RCL_CLIENT)) {
ma->ma_cookie = req_capsule_client_get(pill,
&RMF_LOGCOOKIES);
ma->ma_cookie_size = req_capsule_get_size(pill,
info->mti_spec.u.sp_pfid = rr->rr_fid1;
} else if (S_ISLNK(attr->la_mode)) {
const char *tgt = NULL;
- if (req_capsule_field_present(pill, &RMF_SYMTGT)) {
+ if (req_capsule_field_present(pill, &RMF_SYMTGT,
+ RCL_CLIENT)) {
tgt = req_capsule_client_get(pill,
&RMF_SYMTGT);
info->mti_spec.u.sp_symname = tgt;
} else
result = -EFAULT;
- if (req_capsule_field_present(pill, &RMF_EADATA)) {
+ if (req_capsule_field_present(pill, &RMF_EADATA, RCL_CLIENT)) {
struct md_create_spec *sp = &info->mti_spec;
sp->u.sp_ea.eadata = req_capsule_client_get(pill,
&RMF_EADATA);
RETURN(0);
}
- intent_set_disposition(rep, DISP_OPEN_OPEN);
+ mdt_set_disposition(info, rep, DISP_OPEN_OPEN);
/* we need to return the existing object's fid back, so it is done
* here, after preparing the reply */
if (!created && (flags & MDS_OPEN_EXCL) && (flags & MDS_OPEN_CREAT))
else
rc = PTR_ERR(th);
if (rc == 0) {
- intent_set_disposition(rep, DISP_LOOKUP_EXECD);
- intent_set_disposition(rep, DISP_LOOKUP_POS);
- intent_set_disposition(rep, DISP_OPEN_OPEN);
+ mdt_set_disposition(info, rep, DISP_LOOKUP_EXECD);
+ mdt_set_disposition(info, rep, DISP_LOOKUP_POS);
+ mdt_set_disposition(info, rep, DISP_OPEN_OPEN);
rc = mdt_mfd_open(info, NULL, o, flags, 0, rep);
}
}
if (MDT_FAIL_CHECK(OBD_FAIL_MDS_OPEN_PACK))
RETURN(-ENOMEM);
- intent_set_disposition(ldlm_rep, DISP_LOOKUP_EXECD);
+ mdt_set_disposition(info, ldlm_rep, DISP_LOOKUP_EXECD);
if (rr->rr_name[0] == 0) {
/* this is cross-ref open */
- intent_set_disposition(ldlm_rep, DISP_LOOKUP_POS);
+ mdt_set_disposition(info, ldlm_rep, DISP_LOOKUP_POS);
result = mdt_cross_open(info, rr->rr_fid1, ldlm_rep, create_flags);
RETURN(result);
}
GOTO(out_parent, result);
if (result == -ENOENT || result == -ESTALE) {
- intent_set_disposition(ldlm_rep, DISP_LOOKUP_NEG);
+ mdt_set_disposition(info, ldlm_rep, DISP_LOOKUP_NEG);
if (result == -ESTALE) {
/*ESTALE means the parent is a dead(unlinked) dir,
*so it should return -ENOENT to in accordance
*child_fid = *info->mti_rr.rr_fid2;
/* new object will be created. see the following */
} else {
- intent_set_disposition(ldlm_rep, DISP_LOOKUP_POS);
+ mdt_set_disposition(info, ldlm_rep, DISP_LOOKUP_POS);
/* check for O_EXCL is moved to the mdt_mfd_open, we need to
* return FID back in that case */
}
if (result == -ENOENT) {
/* not found and with MDS_OPEN_CREAT: let's create it */
- intent_set_disposition(ldlm_rep, DISP_OPEN_CREATE);
+ mdt_set_disposition(info, ldlm_rep, DISP_OPEN_CREATE);
result = mdo_create(info->mti_ctxt,
mdt_object_child(parent),
rr->rr_name,
mcd->mcd_last_result = cpu_to_le32(rc);
/*XXX: save intent_disposition in mdt_thread_info?
* also there is bug - intent_dispostion is __u64,
- * see struct ldlm_reply->lock_policy_res1;
- mcd->mcd_last_data = cpu_to_le32(op_data);
- */
+ * see struct ldlm_reply->lock_policy_res1; */
+ mcd->mcd_last_data = cpu_to_le32(mti->mti_opdata);
}
if (off <= 0) {
CERROR("client idx %d has offset %lld\n", med->med_lr_idx, off);
if ((valid & OBD_MD_FLXATTR) == OBD_MD_FLXATTR) {
char * xattr;
- if (!req_capsule_field_present(pill, &RMF_EADATA)) {
+ if (!req_capsule_field_present(pill, &RMF_EADATA, RCL_CLIENT)) {
CERROR("no xattr data supplied\n");
GOTO(out_unlock, rc = -EFAULT);
}
EXPORT_SYMBOL(req_capsule_extend);
int req_capsule_has_field(const struct req_capsule *pill,
- const struct req_msg_field *field)
+ const struct req_msg_field *field,
+ enum req_location loc)
{
- return field->rmf_offset[pill->rc_fmt->rf_idx][pill->rc_loc ^ 1];
+ LASSERT(loc == RCL_SERVER || loc == RCL_CLIENT);
+
+ return field->rmf_offset[pill->rc_fmt->rf_idx][loc];
}
EXPORT_SYMBOL(req_capsule_has_field);
int req_capsule_field_present(const struct req_capsule *pill,
- const struct req_msg_field *field)
+ const struct req_msg_field *field,
+ enum req_location loc)
{
- int loc;
int offset;
- LASSERT(req_capsule_has_field(pill, field));
+ LASSERT(loc == RCL_SERVER || loc == RCL_CLIENT);
+ LASSERT(req_capsule_has_field(pill, field, loc));
- loc = pill->rc_loc ^ 1;
offset = __req_capsule_offset(pill, field, loc);
return lustre_msg_bufcount(__req_msg(pill, loc)) > offset;
}
load_module llite/lustre
load_module mgc/mgc
load_module mgs/mgs
+ load_module quota/lquota
+ load_module quota/quotacheck_test
+ load_module quota/quotactl_test
+ load_module obdclass/llog_test
+ load_module obdecho/obdecho
+ load_module ldiskfs/quotafmt_test
+
+
rm -f $TMP/ogdb-`hostname`
$LCTL modules > $TMP/ogdb-`hostname`
# 'mount' doesn't look in $PATH, just sbin
echo "Copying modules from local build dir to "$MDIR
-cp -u ../../lnet/libcfs/libcfs.$EXT $MDIR
cp -u ../../lnet/lnet/lnet.$EXT $MDIR
+cp -u ../../lnet/libcfs/libcfs.$EXT $MDIR
cp -u ../../lnet/klnds/socklnd/ksocklnd.$EXT $MDIR
-cp -u ../lvfs/lvfs.$EXT $MDIR
-cp -u ../obdclass/obdclass.$EXT $MDIR
-cp -u ../ptlrpc/ptlrpc.$EXT $MDIR
-cp -u ../mdc/mdc.$EXT $MDIR
-cp -u ../osc/osc.$EXT $MDIR
-cp -u ../mdt/mdt.$EXT $MDIR
-cp -u ../cmm/cmm.$EXT $MDIR
-cp -u ../mdd/mdd.$EXT $MDIR
-cp -u ../osd/osd.$EXT $MDIR
-cp -u ../fld/fld.$EXT $MDIR
-cp -u ../fid/fid.$EXT $MDIR
-cp -u ../lmv/lmv.$EXT $MDIR
-cp -u ../lov/lov.$EXT $MDIR
-cp -u ../mds/mds.$EXT $MDIR
-cp -u ../lvfs/$FSFLT.$EXT $MDIR
-[ $KVER == "26" ] && cp -u ../ldiskfs/ldiskfs.$EXT $MDIR
-cp -u ../ost/ost.$EXT $MDIR
-cp -u ../obdfilter/obdfilter.$EXT $MDIR
-cp -u ../llite/lustre.$EXT $MDIR
-cp -u ../mgc/mgc.$EXT $MDIR
-cp -u ../mgs/mgs.$EXT $MDIR
+cp -u ../../lnet/tests/pingcli.$EXT $MDIR
+cp -u ../../lnet/tests/pingsrv.$EXT $MDIR
+cp -u ../../lustre/mgs/mgs.$EXT $MDIR
+cp -u ../../lustre/quota/lquota.$EXT $MDIR
+cp -u ../../lustre/quota/quotacheck_test.$EXT $MDIR
+cp -u ../../lustre/quota/quotactl_test.$EXT $MDIR
+cp -u ../../lustre/ptlrpc/ptlrpc.$EXT $MDIR
+cp -u ../../lustre/fld/fld.$EXT $MDIR
+cp -u ../../lustre/lov/lov.$EXT $MDIR
+cp -u ../../lustre/mdc/mdc.$EXT $MDIR
+cp -u ../../lustre/llite/lustre.$EXT $MDIR
+cp -u ../../lustre/obdclass/llog_test.$EXT $MDIR
+cp -u ../../lustre/obdclass/obdclass.$EXT $MDIR
+cp -u ../../lustre/mdt/mdt.$EXT $MDIR
+cp -u ../../lustre/fid/fid.$EXT $MDIR
+cp -u ../../lustre/mds/mds.$EXT $MDIR
+cp -u ../../lustre/osd/osd.$EXT $MDIR
+cp -u ../../lustre/obdecho/obdecho.$EXT $MDIR
+cp -u ../../lustre/obdfilter/obdfilter.$EXT $MDIR
+cp -u ../../lustre/cmm/cmm.$EXT $MDIR
+cp -u ../../lustre/ldiskfs/ldiskfs.$EXT $MDIR
+cp -u ../../lustre/ldiskfs/quotafmt_test.$EXT $MDIR
+cp -u ../../lustre/mdd/mdd.$EXT $MDIR
+cp -u ../../lustre/osc/osc.$EXT $MDIR
+cp -u ../../lustre/ost/ost.$EXT $MDIR
+cp -u ../../lustre/mgc/mgc.$EXT $MDIR
+cp -u ../../lustre/lvfs/fsfilt_ldiskfs.$EXT $MDIR
+cp -u ../../lustre/lvfs/lvfs.$EXT $MDIR
+cp -u ../../lustre/lmv/lmv.$EXT $MDIR
# prevent warnings on my uml
rm -f /lib/modules/`uname -r`/modules.*