Whamcloud - gitweb
LU-3474 mdt: mdt_links_read() to return linkea_init() errors
[fs/lustre-release.git] / lustre / mdt / mdt_handler.c
index d1340de..c4ce385 100644 (file)
@@ -99,7 +99,7 @@ static int mdt_unpack_req_pack_rep(struct mdt_thread_info *info, __u32 flags);
 static const struct lu_object_operations mdt_obj_ops;
 
 /* Slab for MDT object allocation */
-static cfs_mem_cache_t *mdt_object_kmem;
+static struct kmem_cache *mdt_object_kmem;
 
 static struct lu_kmem_descr mdt_caches[] = {
        {
@@ -793,7 +793,7 @@ static int mdt_getattr_internal(struct mdt_thread_info *info,
                               PFID(mdt_object_fid(o)), rc);
                        rc = -EFAULT;
                } else {
-                       int print_limit = min_t(int, CFS_PAGE_SIZE - 128, rc);
+                       int print_limit = min_t(int, PAGE_CACHE_SIZE - 128, rc);
 
                        if (OBD_FAIL_CHECK(OBD_FAIL_MDS_READLINK_EPROTO))
                                rc -= 2;
@@ -1634,7 +1634,7 @@ static int mdt_sendpage(struct mdt_thread_info *info,
 
        for (i = 0, tmpcount = nob; i < rdpg->rp_npages && tmpcount > 0;
             i++, tmpcount -= tmpsize) {
-                tmpsize = min_t(int, tmpcount, CFS_PAGE_SIZE);
+               tmpsize = min_t(int, tmpcount, PAGE_CACHE_SIZE);
                ptlrpc_prep_bulk_page_pin(desc, rdpg->rp_pages[i], 0, tmpsize);
         }
 
@@ -1679,14 +1679,14 @@ int mdt_readpage(struct mdt_thread_info *info)
                rdpg->rp_attrs |= LUDA_64BITHASH;
        rdpg->rp_count  = min_t(unsigned int, reqbody->nlink,
                                exp_max_brw_size(info->mti_exp));
-        rdpg->rp_npages = (rdpg->rp_count + CFS_PAGE_SIZE - 1) >>
-                          CFS_PAGE_SHIFT;
+       rdpg->rp_npages = (rdpg->rp_count + PAGE_CACHE_SIZE - 1) >>
+                         PAGE_CACHE_SHIFT;
         OBD_ALLOC(rdpg->rp_pages, rdpg->rp_npages * sizeof rdpg->rp_pages[0]);
         if (rdpg->rp_pages == NULL)
                 RETURN(-ENOMEM);
 
         for (i = 0; i < rdpg->rp_npages; ++i) {
-                rdpg->rp_pages[i] = cfs_alloc_page(CFS_ALLOC_STD);
+               rdpg->rp_pages[i] = alloc_page(GFP_IOFS);
                 if (rdpg->rp_pages[i] == NULL)
                         GOTO(free_rdpg, rc = -ENOMEM);
         }
@@ -1704,7 +1704,7 @@ free_rdpg:
 
         for (i = 0; i < rdpg->rp_npages; i++)
                 if (rdpg->rp_pages[i] != NULL)
-                        cfs_free_page(rdpg->rp_pages[i]);
+                       __free_page(rdpg->rp_pages[i]);
         OBD_FREE(rdpg->rp_pages, rdpg->rp_npages * sizeof rdpg->rp_pages[0]);
 
         if (OBD_FAIL_CHECK(OBD_FAIL_MDS_SENDPAGE))
@@ -2117,14 +2117,15 @@ int mdt_obd_idx_read(struct mdt_thread_info *info)
                GOTO(out, rc = -EFAULT);
        rdpg->rp_count = min_t(unsigned int, req_ii->ii_count << LU_PAGE_SHIFT,
                               exp_max_brw_size(info->mti_exp));
-       rdpg->rp_npages = (rdpg->rp_count + CFS_PAGE_SIZE -1) >> CFS_PAGE_SHIFT;
+       rdpg->rp_npages = (rdpg->rp_count + PAGE_CACHE_SIZE - 1) >>
+                               PAGE_CACHE_SHIFT;
 
        /* allocate pages to store the containers */
        OBD_ALLOC(rdpg->rp_pages, rdpg->rp_npages * sizeof(rdpg->rp_pages[0]));
        if (rdpg->rp_pages == NULL)
                GOTO(out, rc = -ENOMEM);
        for (i = 0; i < rdpg->rp_npages; i++) {
-               rdpg->rp_pages[i] = cfs_alloc_page(CFS_ALLOC_STD);
+               rdpg->rp_pages[i] = alloc_page(GFP_IOFS);
                if (rdpg->rp_pages[i] == NULL)
                        GOTO(out, rc = -ENOMEM);
        }
@@ -2145,7 +2146,7 @@ out:
        if (rdpg->rp_pages) {
                for (i = 0; i < rdpg->rp_npages; i++)
                        if (rdpg->rp_pages[i])
-                               cfs_free_page(rdpg->rp_pages[i]);
+                               __free_page(rdpg->rp_pages[i]);
                OBD_FREE(rdpg->rp_pages,
                         rdpg->rp_npages * sizeof(rdpg->rp_pages[0]));
        }
@@ -3970,9 +3971,13 @@ static int mdt_intent_opc(long itopc, struct mdt_thread_info *info,
                /* execute policy */
                rc = flv->it_act(opc, info, lockp, flags);
 
-               rep = req_capsule_server_get(pill, &RMF_DLM_REP);
-               rep->lock_policy_res2 =
-                       ptlrpc_status_hton(rep->lock_policy_res2);
+               /* Check whether the reply has been packed successfully. */
+               if (mdt_info_req(info)->rq_repmsg != NULL) {
+                       rep = req_capsule_server_get(info->mti_pill,
+                                                    &RMF_DLM_REP);
+                       rep->lock_policy_res2 =
+                               ptlrpc_status_hton(rep->lock_policy_res2);
+               }
         } else {
                 rc = -EOPNOTSUPP;
         }
@@ -4992,7 +4997,7 @@ static struct lu_object *mdt_object_alloc(const struct lu_env *env,
 
         ENTRY;
 
-       OBD_SLAB_ALLOC_PTR_GFP(mo, mdt_object_kmem, CFS_ALLOC_IO);
+       OBD_SLAB_ALLOC_PTR_GFP(mo, mdt_object_kmem, __GFP_IO);
         if (mo != NULL) {
                 struct lu_object *o;
                 struct lu_object_header *h;
@@ -5585,9 +5590,7 @@ static int mdt_links_read(struct mdt_thread_info *info,
        if (rc < 0)
                return rc;
 
-       linkea_init(ldata);
-
-       return 0;
+       return linkea_init(ldata);
 }
 
 static int mdt_path_current(struct mdt_thread_info *info,
@@ -5639,7 +5642,7 @@ static int mdt_path_current(struct mdt_thread_info *info,
                rc = mdt_links_read(info, mdt_obj, &ldata);
                mdt_object_put(info->mti_env, mdt_obj);
                if (rc != 0)
-                       GOTO(out, rc = PTR_ERR(buf));
+                       GOTO(out, rc);
 
                leh = buf->lb_buf;
                lee = (struct link_ea_entry *)(leh + 1); /* link #0 */