From ea39d7b925eef25a157cb339e8a587823313d6d2 Mon Sep 17 00:00:00 2001 From: Mikhail Pershin Date: Wed, 15 Dec 2010 17:51:41 +0300 Subject: [PATCH] b=24048 set body->easize in mdc_getattr_pack() i=johann i=adilger This allows client to supply the server with enough info about reply buffers. Server may use this to allocate buffers and don't guess with max_mdsize --- lustre/mdc/mdc_internal.h | 2 +- lustre/mdc/mdc_lib.c | 11 ++++------- lustre/mdc/mdc_locks.c | 3 ++- 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/lustre/mdc/mdc_internal.h b/lustre/mdc/mdc_internal.h index 44e0e20..785f8f4 100644 --- a/lustre/mdc/mdc_internal.h +++ b/lustre/mdc/mdc_internal.h @@ -60,7 +60,7 @@ void mdc_is_subdir_pack(struct ptlrpc_request *req, const struct lu_fid *pfid, void mdc_readdir_pack(struct ptlrpc_request *req, __u64 pgoff, __u32 size, const struct lu_fid *fid, struct obd_capa *oc); void mdc_getattr_pack(struct ptlrpc_request *req, __u64 valid, int flags, - struct md_op_data *data); + struct md_op_data *data, int ea_size); void mdc_setattr_pack(struct ptlrpc_request *req, struct md_op_data *op_data, void *ea, int ealen, void *ea2, int ea2len); void mdc_create_pack(struct ptlrpc_request *req, struct md_op_data *op_data, diff --git a/lustre/mdc/mdc_lib.c b/lustre/mdc/mdc_lib.c index 8e8b707..1b6757d5 100644 --- a/lustre/mdc/mdc_lib.c +++ b/lustre/mdc/mdc_lib.c @@ -448,21 +448,19 @@ void mdc_rename_pack(struct ptlrpc_request *req, struct md_op_data *op_data, } void mdc_getattr_pack(struct ptlrpc_request *req, __u64 valid, int flags, - struct md_op_data *op_data) + struct md_op_data *op_data, int ea_size) { struct mdt_body *b = req_capsule_client_get(&req->rq_pill, &RMF_MDT_BODY); - b->fsuid = cfs_curproc_fsuid(); - b->fsgid = cfs_curproc_fsgid(); - b->capability = cfs_curproc_cap_pack(); b->valid = valid; if (op_data->op_bias & MDS_CHECK_SPLIT) b->valid |= OBD_MD_FLCKSPLIT; if (op_data->op_bias & MDS_CROSS_REF) b->valid |= OBD_MD_FLCROSSREF; + b->eadatasize = ea_size; b->flags = flags; - b->suppgid = op_data->op_suppgids[0]; + __mdc_pack_body(b, op_data->op_suppgids[0]); b->fid1 = op_data->op_fid1; b->fid2 = op_data->op_fid2; @@ -528,7 +526,6 @@ void mdc_exit_request(struct client_obd *cli) client_obd_list_lock(&cli->cl_loi_list_lock); cli->cl_r_in_flight--; cfs_list_for_each_safe(l, tmp, &cli->cl_cache_waiters) { - if (cli->cl_r_in_flight >= cli->cl_max_rpcs_in_flight) { /* No free request slots anymore */ break; @@ -540,6 +537,6 @@ void mdc_exit_request(struct client_obd *cli) cfs_waitq_signal(&mcw->mcw_waitq); } /* Empty waiting list? Decrease reqs in-flight number */ - + client_obd_list_unlock(&cli->cl_loi_list_lock); } diff --git a/lustre/mdc/mdc_locks.c b/lustre/mdc/mdc_locks.c index 7bf1abe..a85dbfe 100644 --- a/lustre/mdc/mdc_locks.c +++ b/lustre/mdc/mdc_locks.c @@ -424,7 +424,8 @@ static struct ptlrpc_request *mdc_intent_getattr_pack(struct obd_export *exp, lit->opc = (__u64)it->it_op; /* pack the intended request */ - mdc_getattr_pack(req, valid, it->it_flags, op_data); + mdc_getattr_pack(req, valid, it->it_flags, op_data, + obddev->u.cli.cl_max_mds_easize); req_capsule_set_size(&req->rq_pill, &RMF_MDT_MD, RCL_SERVER, obddev->u.cli.cl_max_mds_easize); -- 1.8.3.1