Quellcode durchsuchen

dlm: fix QUECVT when convert queue is empty

The QUECVT flag should not prevent conversions from
being granted immediately when the convert queue is
empty.

Signed-off-by: David Teigland <teigland@redhat.com>
David Teigland vor 13 Jahren
Ursprung
Commit
53ad1c980d
1 geänderte Dateien mit 12 neuen und 0 gelöschten Zeilen
  1. 12 0
      fs/dlm/lock.c

+ 12 - 0
fs/dlm/lock.c

@@ -1736,6 +1736,18 @@ static int _can_be_granted(struct dlm_rsb *r, struct dlm_lkb *lkb, int now)
 	if (now && conv && !(lkb->lkb_exflags & DLM_LKF_QUECVT))
 	if (now && conv && !(lkb->lkb_exflags & DLM_LKF_QUECVT))
 		return 1;
 		return 1;
 
 
+	/*
+	 * Even if the convert is compat with all granted locks,
+	 * QUECVT forces it behind other locks on the convert queue.
+	 */
+
+	if (now && conv && (lkb->lkb_exflags & DLM_LKF_QUECVT)) {
+		if (list_empty(&r->res_convertqueue))
+			return 1;
+		else
+			goto out;
+	}
+
 	/*
 	/*
 	 * The NOORDER flag is set to avoid the standard vms rules on grant
 	 * The NOORDER flag is set to avoid the standard vms rules on grant
 	 * order.
 	 * order.