X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fquota%2Fqsd_request.c;h=be40e03ef30e292c4464d33df3d33944b424b1cc;hb=187a94923310521cc0dd37e52a461a1fd3c3b27a;hp=485e2ce2fe9ae80d565058a909dbb076cb854748;hpb=7186c88d389c236f5fe887e3c7f35f2249f8aa86;p=fs%2Flustre-release.git diff --git a/lustre/quota/qsd_request.c b/lustre/quota/qsd_request.c index 485e2ce..be40e03 100644 --- a/lustre/quota/qsd_request.c +++ b/lustre/quota/qsd_request.c @@ -21,7 +21,7 @@ * GPL HEADER END */ /* - * Copyright (c) 2012 Intel, Inc. + * Copyright (c) 2012, Intel Corporation. * Use is subject to license terms. * * Author: Johann Lombardi @@ -45,7 +45,7 @@ struct qsd_async_args { struct obd_export *aa_exp; struct qsd_qtype_info *aa_qqi; void *aa_arg; - union ldlm_wire_lvb *aa_lvb; + struct lquota_lvb *aa_lvb; struct lustre_handle aa_lockh; qsd_req_completion_t aa_completion; }; @@ -110,6 +110,7 @@ int qsd_send_dqacq(const struct lu_env *env, struct obd_export *exp, GOTO(out, rc = -ENOMEM); req->rq_no_resend = req->rq_no_delay = 1; + req->rq_no_retry_einprogress = 1; rc = ptlrpc_request_pack(req, LUSTRE_MDS_VERSION, QUOTA_DQACQ); if (rc) { ptlrpc_request_free(req); @@ -162,7 +163,7 @@ static int qsd_intent_interpret(const struct lu_env *env, struct quota_body *rep_qbody = NULL, *req_qbody; struct ldlm_intent *lit; struct qsd_async_args *aa = (struct qsd_async_args *)arg; - int flags = LDLM_FL_HAS_INTENT; + __u64 flags = LDLM_FL_HAS_INTENT; ENTRY; LASSERT(aa->aa_exp); @@ -172,7 +173,7 @@ static int qsd_intent_interpret(const struct lu_env *env, rc = ldlm_cli_enqueue_fini(aa->aa_exp, req, LDLM_PLAIN, 0, LCK_CR, &flags, (void *)aa->aa_lvb, - sizeof(union ldlm_wire_lvb), lockh, rc); + sizeof(struct lquota_lvb), lockh, rc); if (rc < 0) /* the lock has been destroyed, forget about the lock handle */ memset(lockh, 0, sizeof(*lockh)); @@ -207,14 +208,15 @@ static int qsd_intent_interpret(const struct lu_env *env, int qsd_intent_lock(const struct lu_env *env, struct obd_export *exp, struct quota_body *qbody, bool sync, int it_op, qsd_req_completion_t completion, struct qsd_qtype_info *qqi, - union ldlm_wire_lvb *lvb, void *arg) + struct lquota_lvb *lvb, void *arg) { struct qsd_thread_info *qti = qsd_info(env); struct ptlrpc_request *req; struct qsd_async_args *aa = NULL; struct ldlm_intent *lit; struct quota_body *req_qbody; - int rc, flags = LDLM_FL_HAS_INTENT; + __u64 flags = LDLM_FL_HAS_INTENT; + int rc; ENTRY; LASSERT(exp != NULL); @@ -227,6 +229,7 @@ int qsd_intent_lock(const struct lu_env *env, struct obd_export *exp, if (req == NULL) GOTO(out, rc = -ENOMEM); + req->rq_no_retry_einprogress = 1; rc = ldlm_prep_enqueue_req(exp, req, NULL, 0); if (rc) { ptlrpc_request_free(req); @@ -239,6 +242,8 @@ int qsd_intent_lock(const struct lu_env *env, struct obd_export *exp, req_qbody = req_capsule_client_get(&req->rq_pill, &RMF_QUOTA_BODY); *req_qbody = *qbody; + req_capsule_set_size(&req->rq_pill, &RMF_DLM_LVB, RCL_SERVER, + sizeof(*lvb)); ptlrpc_request_set_replen(req); switch(it_op) { @@ -268,8 +273,8 @@ int qsd_intent_lock(const struct lu_env *env, struct obd_export *exp, /* build lock enqueue request */ rc = ldlm_cli_enqueue(exp, &req, &qti->qti_einfo, &qti->qti_resid, NULL, - &flags, (void *)lvb, sizeof(*lvb), &qti->qti_lockh, - 1); + &flags, (void *)lvb, sizeof(*lvb), LVB_T_LQUOTA, + &qti->qti_lockh, 1); if (rc < 0) { ptlrpc_req_finished(req); GOTO(out, rc); @@ -325,7 +330,7 @@ int qsd_intent_lock(const struct lu_env *env, struct obd_export *exp, RETURN(rc); out: - completion(env, qqi, qbody, NULL, &qti->qti_lockh, NULL, arg, rc); + completion(env, qqi, qbody, NULL, &qti->qti_lockh, lvb, arg, rc); return rc; } @@ -369,7 +374,7 @@ int qsd_fetch_index(const struct lu_env *env, struct obd_export *exp, ptlrpc_at_set_req_timeout(req); /* allocate bulk descriptor */ - desc = ptlrpc_prep_bulk_imp(req, npages, BULK_PUT_SINK, + desc = ptlrpc_prep_bulk_imp(req, npages, 1, BULK_PUT_SINK, MDS_BULK_PORTAL); if (desc == NULL) { ptlrpc_request_free(req); @@ -395,7 +400,10 @@ int qsd_fetch_index(const struct lu_env *env, struct obd_export *exp, req->rq_bulk->bd_nob_transferred); if (rc < 0) GOTO(out, rc); - rc = 0; + else + /* sptlrpc_cli_unwrap_bulk_read() returns the number of bytes + * transferred*/ + rc = 0; req_ii = req_capsule_server_get(&req->rq_pill, &RMF_IDX_INFO); *ii = *req_ii;