Whamcloud - gitweb
- fixes in readdir proto.
authoryury <yury>
Sun, 23 Jul 2006 10:31:18 +0000 (10:31 +0000)
committeryury <yury>
Sun, 23 Jul 2006 10:31:18 +0000 (10:31 +0000)
lustre/cmm/cmm_object.c
lustre/mdd/mdd_handler.c
lustre/mdt/mdt_handler.c

index 02b9b15..7f7fa55 100644 (file)
@@ -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 */
index 8c807f5..3573444 100644 (file)
@@ -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;
 }
index 5871426..bb8e289 100644 (file)
@@ -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
         },
         {