From c3b0cb1e8fc89c890b7d2e8e6a4a88f2356ed30d Mon Sep 17 00:00:00 2001 From: tappro Date: Wed, 19 Jul 2006 07:59:53 +0000 Subject: [PATCH] MDT updates due to md_attr changes. --- lustre/mdt/mdt_handler.c | 20 +++++++------------- lustre/mdt/mdt_internal.h | 2 +- lustre/mdt/mdt_lib.c | 28 ++++++++++++---------------- lustre/mdt/mdt_open.c | 19 ++++++++++--------- lustre/mdt/mdt_reint.c | 18 ++++++++++-------- 5 files changed, 40 insertions(+), 47 deletions(-) diff --git a/lustre/mdt/mdt_handler.c b/lustre/mdt/mdt_handler.c index 55509a9..5f20021 100644 --- a/lustre/mdt/mdt_handler.c +++ b/lustre/mdt/mdt_handler.c @@ -202,7 +202,7 @@ static int mdt_getattr_internal(struct mdt_thread_info *info, struct md_object *next = mdt_object_child(o); const struct mdt_body *reqbody = info->mti_body; struct ptlrpc_request *req = mdt_info_req(info); - struct lu_attr *la = &info->mti_attr; + struct lu_attr *la = &info->mti_attr.ma_attr; struct req_capsule *pill = &info->mti_pill; const struct lu_context *ctxt = info->mti_ctxt; struct mdt_body *repbody; @@ -619,12 +619,12 @@ static int mdt_sync(struct mdt_thread_info *info) next = mdt_object_child(info->mti_object); fid = mdt_object_fid(info->mti_object); rc = mo_attr_get(info->mti_ctxt, - next, &info->mti_attr); + next, &info->mti_attr.ma_attr); if (rc == 0) { body = req_capsule_server_get(pill, &RMF_MDT_BODY); mdt_pack_attr2body(body, - &info->mti_attr, + &info->mti_attr.ma_attr, fid); } } @@ -739,7 +739,7 @@ int fid_lock(struct ldlm_namespace *ns, const struct lu_fid *f, ldlm_policy_data_t *policy, struct ldlm_res_id *res_id) { - int flags = 0; + int flags = 0; /*XXX: LDLM_FL_LOCAL_ONLY?*/ int rc; LASSERT(ns != NULL); @@ -1109,18 +1109,13 @@ void mdt_lock_handle_fini(struct mdt_lock_handle *lh) static void mdt_thread_info_init(struct ptlrpc_request *req, struct mdt_thread_info *info) { - memset(info, 0, sizeof *info); -/* int i; - memset(&info->mti_rr, 0, sizeof info->mti_rr); - memset(&info->mti_attr, 0, sizeof info->mti_attr); - for (i = 0; i < ARRAY_SIZE(info->mti_rep_buf_size); i++) - info->mti_rep_buf_size[i] = 0; - info->mti_rep_buf_nr = i; + memset(info, 0, sizeof(*info)); + + info->mti_rep_buf_nr = ARRAY_SIZE(info->mti_rep_buf_size); for (i = 0; i < ARRAY_SIZE(info->mti_lh); i++) mdt_lock_handle_init(&info->mti_lh[i]); -*/ info->mti_fail_id = OBD_FAIL_MDS_ALL_REPLY_NET; info->mti_ctxt = req->rq_svc_thread->t_ctx; @@ -1377,7 +1372,6 @@ static int mdt_handle(struct ptlrpc_request *req) ctx = req->rq_svc_thread->t_ctx; LASSERT(ctx != NULL); LASSERT(ctx->lc_thread == req->rq_svc_thread); - info = lu_context_key_get(ctx, &mdt_thread_key); LASSERT(info != NULL); diff --git a/lustre/mdt/mdt_internal.h b/lustre/mdt/mdt_internal.h index b48ca65..97fbaff 100644 --- a/lustre/mdt/mdt_internal.h +++ b/lustre/mdt/mdt_internal.h @@ -210,7 +210,7 @@ struct mdt_thread_info { /* * Object attributes. */ - struct lu_attr mti_attr; + struct md_attr mti_attr; /* * reint record. Containing information for reint operations. */ diff --git a/lustre/mdt/mdt_lib.c b/lustre/mdt/mdt_lib.c index 49b40d3..5968309 100644 --- a/lustre/mdt/mdt_lib.c +++ b/lustre/mdt/mdt_lib.c @@ -40,30 +40,26 @@ #include "mdt_internal.h" -/* if object is dying, pack the lov/llog data */ +/* if object is dying, pack the lov/llog data, + * parameter info->mti_attr should be valid at this point! */ int mdt_handle_last_unlink(struct mdt_thread_info *info, struct mdt_object *mo, const struct req_format *fmt) { struct mdt_body *body; + struct lu_attr *la = &info->mti_attr.ma_attr; int rc = 0; ENTRY; - rc = mo_attr_get(info->mti_ctxt, mdt_object_child(mo), - &info->mti_attr); - if (rc) - RETURN(rc); - body = req_capsule_server_get(&info->mti_pill, &RMF_MDT_BODY); - mdt_pack_attr2body(body, &info->mti_attr, mdt_object_fid(mo)); + mdt_pack_attr2body(body, la, mdt_object_fid(mo)); /* if last unlinked object reference so client should destroy ost * objects*/ - if (S_ISREG(info->mti_attr.la_mode) && - info->mti_attr.la_nlink == 0 && mo->mot_header.loh_ref == 1) { + if (S_ISREG(la->la_mode) && + la->la_nlink == 0 && mo->mot_header.loh_ref == 1) { struct lov_mds_md *lmm; - CERROR("Last object!\n"); /* reply should contains more data, * * so we need to extend it */ req_capsule_extend(&info->mti_pill, fmt); @@ -94,7 +90,7 @@ int mdt_handle_last_unlink(struct mdt_thread_info *info, static int mdt_setattr_unpack(struct mdt_thread_info *info) { struct mdt_rec_setattr *rec; - struct lu_attr *attr = &info->mti_attr; + struct lu_attr *attr = &info->mti_attr.ma_attr; struct mdt_reint_record *rr = &info->mti_rr; struct req_capsule *pill = &info->mti_pill; ENTRY; @@ -135,7 +131,7 @@ static int mdt_setattr_unpack(struct mdt_thread_info *info) static int mdt_create_unpack(struct mdt_thread_info *info) { struct mdt_rec_create *rec; - struct lu_attr *attr = &info->mti_attr; + struct lu_attr *attr = &info->mti_attr.ma_attr; struct mdt_reint_record *rr = &info->mti_rr; struct req_capsule *pill = &info->mti_pill; int result = 0; @@ -164,7 +160,7 @@ static int mdt_create_unpack(struct mdt_thread_info *info) static int mdt_link_unpack(struct mdt_thread_info *info) { struct mdt_rec_link *rec; - struct lu_attr *attr = &info->mti_attr; + struct lu_attr *attr = &info->mti_attr.ma_attr; struct mdt_reint_record *rr = &info->mti_rr; struct req_capsule *pill = &info->mti_pill; ENTRY; @@ -189,7 +185,7 @@ static int mdt_link_unpack(struct mdt_thread_info *info) static int mdt_unlink_unpack(struct mdt_thread_info *info) { struct mdt_rec_unlink *rec; - struct lu_attr *attr = &info->mti_attr; + struct lu_attr *attr = &info->mti_attr.ma_attr; struct mdt_reint_record *rr = &info->mti_rr; struct req_capsule *pill = &info->mti_pill; ENTRY; @@ -215,7 +211,7 @@ static int mdt_unlink_unpack(struct mdt_thread_info *info) static int mdt_rename_unpack(struct mdt_thread_info *info) { struct mdt_rec_rename *rec; - struct lu_attr *attr = &info->mti_attr; + struct lu_attr *attr = &info->mti_attr.ma_attr; struct mdt_reint_record *rr = &info->mti_rr; struct req_capsule *pill = &info->mti_pill; ENTRY; @@ -243,7 +239,7 @@ static int mdt_rename_unpack(struct mdt_thread_info *info) static int mdt_open_unpack(struct mdt_thread_info *info) { struct mdt_rec_create *rec; - struct lu_attr *attr = &info->mti_attr; + struct lu_attr *attr = &info->mti_attr.ma_attr; struct req_capsule *pill = &info->mti_pill; struct mdt_reint_record *rr = &info->mti_rr; int result; diff --git a/lustre/mdt/mdt_open.c b/lustre/mdt/mdt_open.c index ed4f35e..137119a 100644 --- a/lustre/mdt/mdt_open.c +++ b/lustre/mdt/mdt_open.c @@ -79,7 +79,7 @@ static int mdt_mfd_open(struct mdt_thread_info *info, struct mdt_file_data *mfd; struct mdt_body *repbody; struct lov_mds_md *lmm = NULL; - struct lu_attr *attr = &info->mti_attr; + struct lu_attr *attr = &info->mti_attr.ma_attr; struct ptlrpc_request *req = mdt_info_req(info); int rc = 0; ENTRY; @@ -230,6 +230,7 @@ int mdt_reint_open(struct mdt_thread_info *info) struct mdt_lock_handle *lh; struct ldlm_reply *ldlm_rep; struct lu_fid *child_fid = &info->mti_tmp_fid1; + struct lu_attr *attr = &info->mti_attr.ma_attr; int result; int created = 0; struct mdt_reint_record *rr = &info->mti_rr; @@ -237,8 +238,7 @@ int mdt_reint_open(struct mdt_thread_info *info) if (strlen(rr->rr_name) == 0) { /* reint partial remote open */ - RETURN(mdt_open_by_fid(info, rr->rr_fid1, - info->mti_attr.la_flags)); + RETURN(mdt_open_by_fid(info, rr->rr_fid1, attr->la_flags)); } /* we now have no resent message, so it must be an intent */ @@ -266,13 +266,13 @@ int mdt_reint_open(struct mdt_thread_info *info) if (result == -ENOENT) { intent_set_disposition(ldlm_rep, DISP_LOOKUP_NEG); - if (!(info->mti_attr.la_flags & MDS_OPEN_CREAT)) + if (!(attr->la_flags & MDS_OPEN_CREAT)) GOTO(out_parent, result); *child_fid = *info->mti_rr.rr_fid2; } else { intent_set_disposition(ldlm_rep, DISP_LOOKUP_POS); - if (info->mti_attr.la_flags & MDS_OPEN_EXCL && - info->mti_attr.la_flags & MDS_OPEN_CREAT) + if (attr->la_flags & MDS_OPEN_EXCL && + attr->la_flags & MDS_OPEN_CREAT) GOTO(out_parent, result = -EEXIST); /* child_fid is filled by mdo_lookup(). */ LASSERT(lu_fid_eq(child_fid, info->mti_rr.rr_fid2)); @@ -297,14 +297,15 @@ int mdt_reint_open(struct mdt_thread_info *info) } /* Open it now. */ - result = mdt_mfd_open(info, child, info->mti_attr.la_flags); + result = mdt_mfd_open(info, child, attr->la_flags); intent_set_disposition(ldlm_rep, DISP_OPEN_OPEN); GOTO(finish_open, result); finish_open: - if (result != 0 && result != -EREMOTE && created) { + if (result != 0 && created) { mdo_unlink(info->mti_ctxt, mdt_object_child(parent), - mdt_object_child(child), rr->rr_name); + mdt_object_child(child), rr->rr_name, + &info->mti_attr); } out_child: mdt_object_put(info->mti_ctxt, child); diff --git a/lustre/mdt/mdt_reint.c b/lustre/mdt/mdt_reint.c index 0c4a94a..893bff4 100644 --- a/lustre/mdt/mdt_reint.c +++ b/lustre/mdt/mdt_reint.c @@ -44,7 +44,7 @@ static int mdt_md_create(struct mdt_thread_info *info) struct mdt_object *child; struct mdt_lock_handle *lh; struct mdt_body *repbody; - struct lu_attr *attr = &info->mti_attr; + struct lu_attr *attr = &info->mti_attr.ma_attr; struct mdt_reint_record *rr = &info->mti_rr; int rc; ENTRY; @@ -64,7 +64,7 @@ static int mdt_md_create(struct mdt_thread_info *info) struct md_object *next = mdt_object_child(parent); rc = mdo_create(info->mti_ctxt, next, rr->rr_name, - mdt_object_child(child), rr->rr_tgt, attr); + mdt_object_child(child), rr->rr_tgt, &info->mti_attr); if (rc == 0) { /* return fid & attr to client. attr is over-written!*/ rc = mo_attr_get(info->mti_ctxt, @@ -110,9 +110,10 @@ static int mdt_md_mkobj(struct mdt_thread_info *info) /* return fid to client. */ rc = mo_attr_get(info->mti_ctxt, next, - &info->mti_attr); + &info->mti_attr.ma_attr); if (rc == 0) { - mdt_pack_attr2body(repbody, &info->mti_attr, + mdt_pack_attr2body(repbody, + &info->mti_attr.ma_attr, mdt_object_fid(o)); } } @@ -130,7 +131,7 @@ static int mdt_md_mkobj(struct mdt_thread_info *info) * We use the ATTR_FROM_OPEN flag to tell these cases apart. */ static int mdt_reint_setattr(struct mdt_thread_info *info) { - struct lu_attr *attr = &info->mti_attr; + struct lu_attr *attr = &info->mti_attr.ma_attr; struct mdt_reint_record *rr = &info->mti_rr; struct ptlrpc_request *req = mdt_info_req(info); struct mdt_object *mo; @@ -207,7 +208,7 @@ static int mdt_reint_create(struct mdt_thread_info *info) int rc; ENTRY; - switch (info->mti_attr.la_mode & S_IFMT) { + switch (info->mti_attr.ma_attr.la_mode & S_IFMT) { case S_IFREG: case S_IFDIR:{ if (strlen(info->mti_rr.rr_name) > 0) @@ -262,7 +263,8 @@ static int mdt_reint_unlink(struct mdt_thread_info *info) if (strlen(rr->rr_name) == 0) { /* remote partial operation */ - rc = mo_ref_del(info->mti_ctxt, mdt_object_child(mp)); + rc = mo_ref_del(info->mti_ctxt, mdt_object_child(mp), + &info->mti_attr); GOTO(out_unlock_parent, rc); } @@ -286,7 +288,7 @@ static int mdt_reint_unlink(struct mdt_thread_info *info) /* step 4: delete it */ /* cmm will take care if child is local or remote */ rc = mdo_unlink(info->mti_ctxt, mdt_object_child(mp), - mdt_object_child(mc), rr->rr_name); + mdt_object_child(mc), rr->rr_name, &info->mti_attr); if (rc) GOTO(out_unlock_child, rc); -- 1.8.3.1