From 1c0b803a12a4ea99f5df2d593d1b00c52c5716a9 Mon Sep 17 00:00:00 2001 From: Elena Gryaznova Date: Wed, 30 Mar 2011 22:37:56 +0400 Subject: [PATCH] b=23935 append truncate race i=Vladimir.Saveliev i=Oleg.Drokin Original patch from Vitaly Fertman --- lustre/include/lustre_dlm.h | 1 + lustre/lov/lov_request.c | 2 ++ lustre/osc/osc_request.c | 2 +- 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/lustre/include/lustre_dlm.h b/lustre/include/lustre_dlm.h index e1f8eda..dd3d64a 100644 --- a/lustre/include/lustre_dlm.h +++ b/lustre/include/lustre_dlm.h @@ -69,6 +69,7 @@ struct obd_device; typedef enum { ELDLM_OK = 0, + ELDLM_LOCK_MATCHED = 1, ELDLM_LOCK_CHANGED = 300, ELDLM_LOCK_ABORTED = 301, diff --git a/lustre/lov/lov_request.c b/lustre/lov/lov_request.c index 9701e0c..ef78342 100644 --- a/lustre/lov/lov_request.c +++ b/lustre/lov/lov_request.c @@ -194,6 +194,8 @@ int lov_update_enqueue_set(struct lov_request *req, __u32 mode, int rc) CDEBUG(D_INODE, "glimpsed, setting rss="LPU64"; leaving" " kms="LPU64"\n", loi->loi_lvb.lvb_size, loi->loi_kms); rc = ELDLM_OK; + } else if (rc == ELDLM_LOCK_MATCHED) { + rc = ELDLM_OK; } else { struct obd_export *exp = set->set_exp; struct lov_obd *lov = &exp->exp_obd->u.lov; diff --git a/lustre/osc/osc_request.c b/lustre/osc/osc_request.c index 7dd8667..5e957c2 100644 --- a/lustre/osc/osc_request.c +++ b/lustre/osc/osc_request.c @@ -3512,7 +3512,7 @@ static int osc_enqueue(struct obd_export *exp, struct obd_info *oinfo, } /* We already have a lock, and it's referenced */ - oinfo->oi_cb_up(oinfo, ELDLM_OK); + oinfo->oi_cb_up(oinfo, ELDLM_LOCK_MATCHED); /* For async requests, decref the lock. */ if (einfo->ei_mode != mode) -- 1.8.3.1