X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Flov%2Flov_pack.c;h=ca92e352e0e8b4329befce3f173a01505099a386;hb=264f521bd2713cf9922825730bc9ccd44cbb9e3c;hp=0ed24bb750e6ccb29e0de92a64321fc97c8ac16b;hpb=1932a135cf8cedcea2d0f2d5be21edd7fe306251;p=fs%2Flustre-release.git diff --git a/lustre/lov/lov_pack.c b/lustre/lov/lov_pack.c index 0ed24bb..ca92e35 100644 --- a/lustre/lov/lov_pack.c +++ b/lustre/lov/lov_pack.c @@ -303,7 +303,7 @@ int lov_alloc_memmd(struct lov_stripe_md **lsmp, int stripe_count, RETURN(-ENOMEM); } - spin_lock_init(&(*lsmp)->lsm_lock); + cfs_spin_lock_init(&(*lsmp)->lsm_lock); (*lsmp)->lsm_magic = magic; (*lsmp)->lsm_stripe_count = stripe_count; (*lsmp)->lsm_maxbytes = LUSTRE_STRIPE_MAXBYTES * stripe_count; @@ -388,14 +388,15 @@ static int __lov_setstripe(struct obd_export *exp, int max_lmm_size, { struct obd_device *obd = class_exp2obd(exp); struct lov_obd *lov = &obd->u.lov; - struct lov_user_md_v3 lumv3; - struct lov_user_md_v1 *lumv1 = (struct lov_user_md_v1 *)&lumv3; + char buffer[sizeof(struct lov_user_md_v3)]; + struct lov_user_md_v3 *lumv3 = (struct lov_user_md_v3 *)&buffer[0]; + struct lov_user_md_v1 *lumv1 = (struct lov_user_md_v1 *)&buffer[0]; int lmm_magic; int stripe_count; int rc; ENTRY; - if (copy_from_user(&lumv3, lump, sizeof(struct lov_user_md_v1))) + if (cfs_copy_from_user(lumv3, lump, sizeof(struct lov_user_md_v1))) RETURN(-EFAULT); lmm_magic = lumv1->lmm_magic; @@ -404,12 +405,12 @@ static int __lov_setstripe(struct obd_export *exp, int max_lmm_size, lustre_swab_lov_user_md_v1(lumv1); lmm_magic = LOV_USER_MAGIC_V1; } else if (lmm_magic == LOV_USER_MAGIC_V3) { - if (copy_from_user(&lumv3, lump, sizeof(lumv3))) + if (cfs_copy_from_user(lumv3, lump, sizeof(*lumv3))) RETURN(-EFAULT); } else if (lmm_magic == __swab32(LOV_USER_MAGIC_V3)) { - if (copy_from_user(&lumv3, lump, sizeof(lumv3))) + if (cfs_copy_from_user(lumv3, lump, sizeof(*lumv3))) RETURN(-EFAULT); - lustre_swab_lov_user_md_v3(&lumv3); + lustre_swab_lov_user_md_v3(lumv3); lmm_magic = LOV_USER_MAGIC_V3; } else if (lmm_magic != LOV_USER_MAGIC_V1) { CDEBUG(D_IOCTL, @@ -463,12 +464,12 @@ static int __lov_setstripe(struct obd_export *exp, int max_lmm_size, if (lmm_magic == LOV_USER_MAGIC_V3) { struct pool_desc *pool; - pool = lov_find_pool(lov, lumv3.lmm_pool_name); + pool = lov_find_pool(lov, lumv3->lmm_pool_name); if (pool != NULL) { - if (lumv3.lmm_stripe_offset != - (typeof(lumv3.lmm_stripe_offset))(-1)) { + if (lumv3->lmm_stripe_offset != + (typeof(lumv3->lmm_stripe_offset))(-1)) { rc = lov_check_index_in_pool( - lumv3.lmm_stripe_offset, pool); + lumv3->lmm_stripe_offset, pool); if (rc < 0) { lov_pool_putref(pool); RETURN(-EINVAL); @@ -488,7 +489,7 @@ static int __lov_setstripe(struct obd_export *exp, int max_lmm_size, (*lsmp)->lsm_oinfo[0]->loi_ost_idx = lumv1->lmm_stripe_offset; (*lsmp)->lsm_stripe_size = lumv1->lmm_stripe_size; if (lmm_magic == LOV_USER_MAGIC_V3) - strncpy((*lsmp)->lsm_pool_name, lumv3.lmm_pool_name, + strncpy((*lsmp)->lsm_pool_name, lumv3->lmm_pool_name, LOV_MAXPOOLNAME); rc = 0; } @@ -597,7 +598,7 @@ int lov_getstripe(struct obd_export *exp, struct lov_stripe_md *lsm, /* we only need the header part from user space to get lmm_magic and * lmm_stripe_count, (the header part is common to v1 and v3) */ lum_size = sizeof(struct lov_user_md_v1); - if (copy_from_user(&lum, lump, lum_size)) + if (cfs_copy_from_user(&lum, lump, lum_size)) GOTO(out_set, rc = -EFAULT); else if ((lum.lmm_magic != LOV_USER_MAGIC) && (lum.lmm_magic != LOV_USER_MAGIC_V3)) @@ -607,7 +608,7 @@ int lov_getstripe(struct obd_export *exp, struct lov_stripe_md *lsm, (lum.lmm_stripe_count < lsm->lsm_stripe_count)) { /* Return right size of stripe to user */ lum.lmm_stripe_count = lsm->lsm_stripe_count; - rc = copy_to_user(lump, &lum, lum_size); + rc = cfs_copy_to_user(lump, &lum, lum_size); GOTO(out_set, rc = -EOVERFLOW); } rc = lov_packmd(exp, &lmmk, lsm); @@ -656,7 +657,7 @@ int lov_getstripe(struct obd_export *exp, struct lov_stripe_md *lsm, lum.lmm_stripe_count = lmmk->lmm_stripe_count; ((struct lov_user_md*)lmmk)->lmm_stripe_offset = 0; ((struct lov_user_md*)lmmk)->lmm_stripe_count = lum.lmm_stripe_count; - if (copy_to_user(lump, lmmk, lmm_size)) + if (cfs_copy_to_user(lump, lmmk, lmm_size)) rc = -EFAULT; obd_free_diskmd(exp, &lmmk);