X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Flov%2Flov_io.c;h=b100973279bed1c414eeaed611b01b70038768cf;hp=8cdfbf419ad6bbfe2cd58cb8dee65836e0943bd8;hb=ce61bcac8661e08ffa2a6ec4b9782f11cd3388c6;hpb=b879bbc27db53ecc899f6007bf4fe0d993615def diff --git a/lustre/lov/lov_io.c b/lustre/lov/lov_io.c index 8cdfbf4..b100973 100644 --- a/lustre/lov/lov_io.c +++ b/lustre/lov/lov_io.c @@ -263,6 +263,13 @@ static int lov_io_slice_init(struct lov_io *lio, } 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; @@ -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); - + 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,