}
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;
{
struct lov_io *lio = lov_env_io(env);
struct lov_object *lov = cl2lov(obj);
-
+ int result;
ENTRY;
+
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,