Whamcloud - gitweb
LU-9771 clio: no glimpse for data immutable file
[fs/lustre-release.git] / lustre / lov / lov_io.c
index 8cdfbf4..b100973 100644 (file)
@@ -263,6 +263,13 @@ static int lov_io_slice_init(struct lov_io *lio,
        }
 
        case CIT_GLIMPSE:
        }
 
        case CIT_GLIMPSE:
+               lio->lis_pos = 0;
+               lio->lis_endpos = OBD_OBJECT_EOF;
+
+               if ((obj->lo_lsm->lsm_flags & LCM_FL_FLR_MASK) == LCM_FL_RDONLY)
+                       RETURN(1); /* SoM is accurate, no need glimpse */
+               break;
+
         case CIT_MISC:
                 lio->lis_pos = 0;
                 lio->lis_endpos = OBD_OBJECT_EOF;
         case CIT_MISC:
                 lio->lis_pos = 0;
                 lio->lis_endpos = OBD_OBJECT_EOF;
@@ -1127,21 +1134,23 @@ int lov_io_init_composite(const struct lu_env *env, struct cl_object *obj,
 {
        struct lov_io       *lio = lov_env_io(env);
        struct lov_object   *lov = cl2lov(obj);
 {
        struct lov_io       *lio = lov_env_io(env);
        struct lov_object   *lov = cl2lov(obj);
-
+       int result;
        ENTRY;
        ENTRY;
+
        INIT_LIST_HEAD(&lio->lis_active);
        INIT_LIST_HEAD(&lio->lis_active);
-       io->ci_result = lov_io_slice_init(lio, lov, io);
-       if (io->ci_result != 0)
-               RETURN(io->ci_result);
-
-       if (io->ci_result == 0) {
-               io->ci_result = lov_io_subio_init(env, lio, io);
-               if (io->ci_result == 0) {
-                       cl_io_slice_add(io, &lio->lis_cl, obj, &lov_io_ops);
-                       atomic_inc(&lov->lo_active_ios);
-               }
+       result = lov_io_slice_init(lio, lov, io);
+       if (result)
+               GOTO(out, result);
+
+       result = lov_io_subio_init(env, lio, io);
+       if (!result) {
+               cl_io_slice_add(io, &lio->lis_cl, obj, &lov_io_ops);
+               atomic_inc(&lov->lo_active_ios);
        }
        }
-       RETURN(io->ci_result);
+       EXIT;
+out:
+       io->ci_result = result < 0 ? result : 0;
+       return result;
 }
 
 int lov_io_init_empty(const struct lu_env *env, struct cl_object *obj,
 }
 
 int lov_io_init_empty(const struct lu_env *env, struct cl_object *obj,