X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Flov%2Flov_page.c;h=74efbeb96b424782abac555a45aa33aadd4ac62f;hb=3bffa4d32bc5b0bc71ba6873e262ddbca436bae1;hp=03335ff8763d001550a16ebc82aceafa91d08206;hpb=9fe4b52ad2ffadf125d9b5c78bb2ff9a01725707;p=fs%2Flustre-release.git diff --git a/lustre/lov/lov_page.c b/lustre/lov/lov_page.c index 03335ff..74efbeb 100644 --- a/lustre/lov/lov_page.c +++ b/lustre/lov/lov_page.c @@ -27,7 +27,7 @@ * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. * - * Copyright (c) 2011, Whamcloud, Inc. + * Copyright (c) 2011, 2012, Intel Corporation. */ /* * This file is part of Lustre, http://www.lustre.org/ @@ -66,7 +66,6 @@ static int lov_page_invariant(const struct cl_page_slice *slice) static void lov_page_fini(const struct lu_env *env, struct cl_page_slice *slice) { - struct lov_page *lp = cl2lov_page(slice); struct cl_page *sub = lov_sub_page(slice); LINVRNT(lov_page_invariant(slice)); @@ -79,7 +78,6 @@ static void lov_page_fini(const struct lu_env *env, slice->cpl_page->cp_child = NULL; cl_page_put(env, sub); } - OBD_SLAB_FREE_PTR(lp, lov_page_kmem); EXIT; } @@ -157,17 +155,11 @@ static const struct cl_page_operations lov_page_ops = { static void lov_empty_page_fini(const struct lu_env *env, struct cl_page_slice *slice) { - struct lov_page *lp = cl2lov_page(slice); - LASSERT(slice->cpl_page->cp_child == NULL); - ENTRY; - OBD_SLAB_FREE_PTR(lp, lov_page_kmem); - EXIT; } -struct cl_page *lov_page_init_raid0(const struct lu_env *env, - struct cl_object *obj, struct cl_page *page, - cfs_page_t *vmpage) +int lov_page_init_raid0(const struct lu_env *env, struct cl_object *obj, + struct cl_page *page, cfs_page_t *vmpage) { struct lov_object *loo = cl2lov(obj); struct lov_layout_raid0 *r0 = lov_r0(loo); @@ -175,8 +167,7 @@ struct cl_page *lov_page_init_raid0(const struct lu_env *env, struct cl_page *subpage; struct cl_object *subobj; struct lov_io_sub *sub; - struct lov_page *lpg; - struct cl_page *result; + struct lov_page *lpg = cl_object_page_slice(obj, page); loff_t offset; obd_off suboff; int stripe; @@ -184,34 +175,30 @@ struct cl_page *lov_page_init_raid0(const struct lu_env *env, ENTRY; offset = cl_offset(obj, page->cp_index); - stripe = lov_stripe_number(r0->lo_lsm, offset); - LASSERT(stripe < r0->lo_nr); - rc = lov_stripe_offset(r0->lo_lsm, offset, stripe, + stripe = lov_stripe_number(loo->lo_lsm, offset); + LASSERT(stripe < r0->lo_nr); + rc = lov_stripe_offset(loo->lo_lsm, offset, stripe, &suboff); LASSERT(rc == 0); - OBD_SLAB_ALLOC_PTR_GFP(lpg, lov_page_kmem, CFS_ALLOC_IO); - if (lpg == NULL) - GOTO(out, result = ERR_PTR(-ENOMEM)); - lpg->lps_invalid = 1; cl_page_slice_add(page, &lpg->lps_cl, obj, &lov_page_ops); sub = lov_sub_get(env, lio, stripe); if (IS_ERR(sub)) - GOTO(out, result = (struct cl_page *)sub); + GOTO(out, rc = PTR_ERR(sub)); subobj = lovsub2cl(r0->lo_sub[stripe]); subpage = cl_page_find_sub(sub->sub_env, subobj, cl_index(subobj, suboff), vmpage, page); lov_sub_put(sub); if (IS_ERR(subpage)) - GOTO(out, result = subpage); + GOTO(out, rc = PTR_ERR(subpage)); if (likely(subpage->cp_parent == page)) { lu_ref_add(&subpage->cp_reference, "lov", page); lpg->lps_invalid = 0; - result = NULL; + rc = 0; } else { CL_PAGE_DEBUG(D_ERROR, env, page, "parent page\n"); CL_PAGE_DEBUG(D_ERROR, env, subpage, "child page\n"); @@ -220,7 +207,7 @@ struct cl_page *lov_page_init_raid0(const struct lu_env *env, EXIT; out: - return(result); + return rc; } @@ -229,26 +216,19 @@ static const struct cl_page_operations lov_empty_page_ops = { .cpo_print = lov_page_print }; -struct cl_page *lov_page_init_empty(const struct lu_env *env, - struct cl_object *obj, struct cl_page *page, - cfs_page_t *vmpage) +int lov_page_init_empty(const struct lu_env *env, struct cl_object *obj, + struct cl_page *page, cfs_page_t *vmpage) { - struct lov_page *lpg; - int result = -ENOMEM; + struct lov_page *lpg = cl_object_page_slice(obj, page); + void *addr; ENTRY; - OBD_SLAB_ALLOC_PTR_GFP(lpg, lov_page_kmem, CFS_ALLOC_IO); - if (lpg != NULL) { - void *addr; - cl_page_slice_add(page, &lpg->lps_cl, - obj, &lov_empty_page_ops); - addr = cfs_kmap(vmpage); - memset(addr, 0, cl_page_size(obj)); - cfs_kunmap(vmpage); - cl_page_export(env, page, 1); - result = 0; - } - RETURN(ERR_PTR(result)); + cl_page_slice_add(page, &lpg->lps_cl, obj, &lov_empty_page_ops); + addr = cfs_kmap(vmpage); + memset(addr, 0, cl_page_size(obj)); + cfs_kunmap(vmpage); + cl_page_export(env, page, 1); + RETURN(0); }