Whamcloud - gitweb
b=21499 check stale object before version checks
[fs/lustre-release.git] / lustre / lov / lov_pack.c
index 0ed24bb..ca92e35 100644 (file)
@@ -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);