X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fosc%2Fosc_io.c;h=81ea610c9ed558bdf8d487cb01e81d74164a18af;hb=7ec56e2628a908343c9c60396e63f8e7093821b5;hp=b66019bc4ec1e2af6bc18114fd392f6d6f0b5a2d;hpb=53ed199c6dfe3958339a565098a607ddbd768c97;p=fs%2Flustre-release.git diff --git a/lustre/osc/osc_io.c b/lustre/osc/osc_io.c index b66019b..81ea610 100644 --- a/lustre/osc/osc_io.c +++ b/lustre/osc/osc_io.c @@ -27,7 +27,7 @@ * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. * - * Copyright (c) 2011, Whamcloud, Inc. + * Copyright (c) 2011, 2012, Intel Corporation. */ /* * This file is part of Lustre, http://www.lustre.org/ @@ -337,7 +337,7 @@ static int osc_async_upcall(void *a, int rc) struct osc_async_cbargs *args = a; args->opc_rc = rc; - cfs_complete(&args->opc_sync); + complete(&args->opc_sync); return 0; } @@ -471,7 +471,7 @@ static int osc_io_setattr_start(const struct lu_env *env, oinfo.oi_oa = oa; oinfo.oi_capa = io->u.ci_setattr.sa_capa; - cfs_init_completion(&cbargs->opc_sync); + init_completion(&cbargs->opc_sync); if (ia_valid & ATTR_SIZE) result = osc_punch_base(osc_export(cl2osc(obj)), @@ -482,6 +482,7 @@ static int osc_io_setattr_start(const struct lu_env *env, &oinfo, NULL, osc_async_upcall, cbargs, PTLRPCD_SET); + cbargs->opc_rpc_sent = result == 0; } return result; } @@ -493,11 +494,12 @@ static void osc_io_setattr_end(const struct lu_env *env, struct osc_io *oio = cl2osc_io(env, slice); struct cl_object *obj = slice->cis_obj; struct osc_async_cbargs *cbargs = &oio->oi_cbarg; - int result; - - cfs_wait_for_completion(&cbargs->opc_sync); + int result = 0; - result = io->ci_result = cbargs->opc_rc; + if (cbargs->opc_rpc_sent) { + wait_for_completion(&cbargs->opc_sync); + result = io->ci_result = cbargs->opc_rc; + } if (result == 0) { if (oio->oi_lockless) { /* lockless truncate */ @@ -591,7 +593,7 @@ static int osc_fsync_ost(const struct lu_env *env, struct osc_object *obj, memset(oinfo, 0, sizeof(*oinfo)); oinfo->oi_oa = oa; oinfo->oi_capa = fio->fi_capa; - cfs_init_completion(&cbargs->opc_sync); + init_completion(&cbargs->opc_sync); rc = osc_sync_base(osc_export(obj), oinfo, osc_async_upcall, cbargs, PTLRPCD_SET); @@ -653,7 +655,7 @@ static void osc_io_fsync_end(const struct lu_env *env, struct osc_io *oio = cl2osc_io(env, slice); struct osc_async_cbargs *cbargs = &oio->oi_cbarg; - cfs_wait_for_completion(&cbargs->opc_sync); + wait_for_completion(&cbargs->opc_sync); if (result == 0) result = cbargs->opc_rc; }