From 7e718233583e0c31b8dee9e61a9f5daad30546d5 Mon Sep 17 00:00:00 2001 From: yury Date: Sun, 23 Jul 2006 10:31:18 +0000 Subject: [PATCH] - fixes in readdir proto. --- lustre/cmm/cmm_object.c | 12 +++++++++++- lustre/mdd/mdd_handler.c | 6 +++--- lustre/mdt/mdt_handler.c | 30 +++++++++++------------------- 3 files changed, 25 insertions(+), 23 deletions(-) diff --git a/lustre/cmm/cmm_object.c b/lustre/cmm/cmm_object.c index 02b9b15..7f7fa55 100644 --- a/lustre/cmm/cmm_object.c +++ b/lustre/cmm/cmm_object.c @@ -291,6 +291,15 @@ static int cml_close(const struct lu_context *ctx, struct md_object *mo) RETURN(rc); } +static int cml_readpage(const struct lu_context *ctxt, struct md_object *mo, + struct lu_rdpg *rdpg) +{ + int rc; + ENTRY; + rc = mo_readpage(ctxt, md_object_next(mo), rdpg); + RETURN(rc); +} + static struct md_object_operations cml_mo_ops = { .moo_attr_get = cml_attr_get, .moo_attr_set = cml_attr_set, @@ -300,7 +309,8 @@ static struct md_object_operations cml_mo_ops = { .moo_ref_add = cml_ref_add, .moo_ref_del = cml_ref_del, .moo_open = cml_open, - .moo_close = cml_close + .moo_close = cml_close, + .moo_readpage = cml_readpage }; /* md_dir operations */ diff --git a/lustre/mdd/mdd_handler.c b/lustre/mdd/mdd_handler.c index 8c807f5..3573444 100644 --- a/lustre/mdd/mdd_handler.c +++ b/lustre/mdd/mdd_handler.c @@ -1160,13 +1160,13 @@ static int mdd_close(const struct lu_context *ctxt, struct md_object *obj) } static int mdd_readpage(const struct lu_context *ctxt, struct md_object *obj, - struct md_rdpg *rdpg) + struct lu_rdpg *rdpg) { struct dt_object *next; int rc; - LASSERT(lu_object_exists(ctxt, mdd2lu_obj(obj))); - next = mdd_object_child(obj); + LASSERT(lu_object_exists(ctxt, mdd2lu_obj(md2mdd_obj(obj)))); + next = mdd_object_child(md2mdd_obj(obj)); rc = next->do_ops->do_readpage(ctxt, next, rdpg); return rc; } diff --git a/lustre/mdt/mdt_handler.c b/lustre/mdt/mdt_handler.c index 5871426..bb8e289 100644 --- a/lustre/mdt/mdt_handler.c +++ b/lustre/mdt/mdt_handler.c @@ -582,37 +582,31 @@ free_desc: static int mdt_readpage(struct mdt_thread_info *info) { + struct mdt_object *child = info->mti_object; struct mdt_body *reqbody, *repbody; int rc, i, tmpcount, tmpsize = 0; struct lu_rdpg rdpg = { 0 }; - struct mdt_object *child; ENTRY; if (OBD_FAIL_CHECK(OBD_FAIL_MDS_READPAGE_PACK)) RETURN(-ENOMEM); - req_capsule_set(&info->mti_pill, &RQF_MDS_READPAGE); - rc = req_capsule_pack(&info->mti_pill); - if (rc) - RETURN(rc); - reqbody = req_capsule_client_get(&info->mti_pill, &RMF_MDT_BODY); if (reqbody == NULL) RETURN(-EFAULT); - child = mdt_object_find(info->mti_ctxt, - info->mti_mdt, &reqbody->fid1); - if (IS_ERR(child)) - RETURN(PTR_ERR(child)); - repbody = req_capsule_server_get(&info->mti_pill, &RMF_MDT_BODY); if (repbody == NULL) - GOTO(out_child, -EFAULT); + RETURN(-EFAULT); - /* prepare @rdpg before calling lower layers and transfer itself. */ + /* + * prepare @rdpg before calling lower layers and transfer itself. Here + * reqbody->size contains offset of where to start to read and + * reqbody->nlink contains number bytes to read. + */ rdpg.rp_offset = reqbody->size; rdpg.rp_count = reqbody->nlink; rdpg.rp_npages = (rdpg.rp_count + PAGE_SIZE - 1) >> PAGE_SHIFT; @@ -639,10 +633,8 @@ static int mdt_readpage(struct mdt_thread_info *info) EXIT; free_rdpg: for (i = 0; i < rdpg.rp_npages; i++) - if (rdpg.rp_pages[i]) + if (rdpg.rp_pages[i] != NULL) __free_pages(rdpg.rp_pages[i], 0); -out_child: - mdt_object_put(info->mti_ctxt, child); return rc; } @@ -2910,13 +2902,13 @@ static struct mdt_opc_slice mdt_handlers[] = { }; static struct mdt_handler mdt_mds_readpage_ops[] = { - DEF_MDT_HNDL_F(HABEO_CORPUS, READPAGE, mdt_readpage), + DEF_MDT_HNDL_F(HABEO_CORPUS|HABEO_REFERO, READPAGE, mdt_readpage), }; static struct mdt_opc_slice mdt_readpage_handlers[] = { { - .mos_opc_start = MDS_READPAGE, - .mos_opc_end = MDS_READPAGE + 1, + .mos_opc_start = MDS_GETATTR, + .mos_opc_end = MDS_LAST_OPC, .mos_hs = mdt_mds_readpage_ops }, { -- 1.8.3.1