From: Alex Zhuravlev Date: Tue, 18 Dec 2012 05:23:46 +0000 (+0400) Subject: LU-2279 osp: do not spin awaiting for connection X-Git-Tag: 2.3.59~40 X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=commitdiff_plain;h=2c0c21a31e0184c3285f795a5fbe5f65afedda6b;hp=eb5c64aa948288284aac9f3020ce40826437ca15 LU-2279 osp: do not spin awaiting for connection modify ready condition for osp_precreate_reserve() so that it ignores -ENODEV and instead rely on expiration mechanism. Signed-off-by: Alex Zhuravlev Change-Id: Id59e75bb17c603140616f34e08c98a6f31f10a8d Reviewed-on: http://review.whamcloud.com/4847 Tested-by: Hudson Tested-by: Maloo Reviewed-by: wangdi Reviewed-by: Li Wei Reviewed-by: Oleg Drokin --- diff --git a/lustre/osp/osp_precreate.c b/lustre/osp/osp_precreate.c index 1e29d08..eafd24c 100644 --- a/lustre/osp/osp_precreate.c +++ b/lustre/osp/osp_precreate.c @@ -672,7 +672,7 @@ static int osp_precreate_ready_condition(struct osp_device *d) /* ready if OST reported no space and no destoys in progress */ if (d->opd_syn_changes + d->opd_syn_rpc_in_progress == 0 && - d->opd_pre_status != 0) + d->opd_pre_status == -ENOSPC) return 1; return 0; @@ -711,9 +711,6 @@ int osp_precreate_reserve(const struct lu_env *env, struct osp_device *d) LASSERT(d->opd_pre_last_created >= d->opd_pre_used_id); - lwi = LWI_TIMEOUT(cfs_time_seconds(obd_timeout), - osp_precreate_timeout_condition, d); - /* * wait till: * - preallocation is done @@ -722,10 +719,6 @@ int osp_precreate_reserve(const struct lu_env *env, struct osp_device *d) */ while ((rc = d->opd_pre_status) == 0 || rc == -ENOSPC || rc == -ENODEV) { - if (unlikely(rc == -ENODEV)) { - if (cfs_time_aftereq(cfs_time_current(), expire)) - break; - } #if LUSTRE_VERSION_CODE < OBD_OCD_VERSION(2, 3, 90, 0) /* @@ -792,6 +785,11 @@ int osp_precreate_reserve(const struct lu_env *env, struct osp_device *d) /* XXX: don't wake up if precreation is in progress */ cfs_waitq_signal(&d->opd_pre_waitq); + lwi = LWI_TIMEOUT(expire - cfs_time_current(), + osp_precreate_timeout_condition, d); + if (cfs_time_aftereq(cfs_time_current(), expire)) + break; + l_wait_event(d->opd_pre_user_waitq, osp_precreate_ready_condition(d), &lwi); }