Whamcloud - gitweb
b=23935 append truncate race
authorElena Gryaznova <elena.gryaznova@oracle.com>
Wed, 30 Mar 2011 18:37:56 +0000 (22:37 +0400)
committerTerry Rutledge <terry.rutledge@oracle.com>
Wed, 30 Mar 2011 18:40:01 +0000 (11:40 -0700)
i=Vladimir.Saveliev
i=Oleg.Drokin

Original patch from Vitaly Fertman

lustre/include/lustre_dlm.h
lustre/lov/lov_request.c
lustre/osc/osc_request.c

index e1f8eda..dd3d64a 100644 (file)
@@ -69,6 +69,7 @@ struct obd_device;
 
 typedef enum {
         ELDLM_OK = 0,
+        ELDLM_LOCK_MATCHED = 1,
 
         ELDLM_LOCK_CHANGED = 300,
         ELDLM_LOCK_ABORTED = 301,
index 9701e0c..ef78342 100644 (file)
@@ -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;
index 7dd8667..5e957c2 100644 (file)
@@ -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)