Whamcloud - gitweb
LU-2744 build: fix race issues thanks to oap_lock
[fs/lustre-release.git] / lustre / osc / osc_io.c
index c3d7f02..bf93df5 100644 (file)
@@ -164,8 +164,10 @@ static int osc_io_submit(const struct lu_env *env,
                 }
 
                cl_page_list_move(qout, qin, page);
+               spin_lock(&oap->oap_lock);
                oap->oap_async_flags = ASYNC_URGENT|ASYNC_READY;
                oap->oap_async_flags |= ASYNC_COUNT_STABLE;
+               spin_unlock(&oap->oap_lock);
 
                osc_page_submit(env, opg, crt, brw_flags);
                cfs_list_add_tail(&oap->oap_pending_item, &list);
@@ -365,7 +367,7 @@ static int trunc_check_cb(const struct lu_env *env, struct cl_io *io,
 
 #ifdef __linux__
        {
-               cfs_page_t *vmpage = cl_page_vmpage(env, page);
+               struct page *vmpage = cl_page_vmpage(env, page);
                if (PageLocked(vmpage))
                        CDEBUG(D_CACHE, "page %p index %lu locked for %d.\n",
                               ops, page->cp_index,
@@ -523,23 +525,20 @@ static void osc_io_setattr_end(const struct lu_env *env,
 static int osc_io_read_start(const struct lu_env *env,
                              const struct cl_io_slice *slice)
 {
-        struct osc_io    *oio   = cl2osc_io(env, slice);
-        struct cl_object *obj   = slice->cis_obj;
-        struct cl_attr   *attr  = &osc_env_info(env)->oti_attr;
-        int              result = 0;
-        ENTRY;
+       struct osc_io    *oio  = cl2osc_io(env, slice);
+       struct cl_object *obj  = slice->cis_obj;
+       struct cl_attr   *attr = &osc_env_info(env)->oti_attr;
+       int rc = 0;
+       ENTRY;
 
-        if (oio->oi_lockless == 0) {
-                cl_object_attr_lock(obj);
-                result = cl_object_attr_get(env, obj, attr);
-                if (result == 0) {
-                        attr->cat_atime = LTIME_S(CFS_CURRENT_TIME);
-                        result = cl_object_attr_set(env, obj, attr,
-                                                    CAT_ATIME);
-                }
-                cl_object_attr_unlock(obj);
-        }
-        RETURN(result);
+       if (oio->oi_lockless == 0 && !slice->cis_io->ci_noatime) {
+               cl_object_attr_lock(obj);
+               attr->cat_atime = LTIME_S(CFS_CURRENT_TIME);
+               rc = cl_object_attr_set(env, obj, attr, CAT_ATIME);
+               cl_object_attr_unlock(obj);
+       }
+
+       RETURN(rc);
 }
 
 static int osc_io_write_start(const struct lu_env *env,
@@ -834,7 +833,7 @@ int osc_req_init(const struct lu_env *env, struct cl_device *dev,
         struct osc_req *or;
         int result;
 
-        OBD_SLAB_ALLOC_PTR_GFP(or, osc_req_kmem, CFS_ALLOC_IO);
+       OBD_SLAB_ALLOC_PTR_GFP(or, osc_req_kmem, __GFP_IO);
         if (or != NULL) {
                 cl_req_slice_add(req, &or->or_cl, dev, &osc_req_ops);
                 result = 0;