Browse Source

drbd: Do not display bogus log lines for pdsk in case pdsk < D_UNKNOWN

This was a regression recently introduced with commit
7848ddb752c09b6dfd1ddfabb06b69b08aa8f6b9
"drbd: Correctly handle resources without volumes"

Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com>
Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
Philipp Reisner 14 years ago
parent
commit
f132f554ce
1 changed files with 13 additions and 8 deletions
  1. 13 8
      drivers/block/drbd/drbd_state.c

+ 13 - 8
drivers/block/drbd/drbd_state.c

@@ -1576,13 +1576,7 @@ void
 conn_set_state(struct drbd_tconn *tconn, union drbd_state mask, union drbd_state val,
 	       union drbd_state *pns_min, union drbd_state *pns_max, enum chg_state_flags flags)
 {
-	union drbd_state ns, os, ns_max = {
-		{ .role = R_SECONDARY,
-		  .peer = R_UNKNOWN,
-		  .conn = val.conn,
-		  .disk = D_DISKLESS,
-		  .pdsk = D_UNKNOWN
-		} };
+	union drbd_state ns, os, ns_max = { };
 	union drbd_state ns_min = {
 		{ .role = R_MASK,
 		  .peer = R_MASK,
@@ -1592,13 +1586,14 @@ conn_set_state(struct drbd_tconn *tconn, union drbd_state mask, union drbd_state
 		} };
 	struct drbd_conf *mdev;
 	enum drbd_state_rv rv;
-	int vnr;
+	int vnr, number_of_volumes = 0;
 
 	if (mask.conn == C_MASK)
 		tconn->cstate = val.conn;
 
 	rcu_read_lock();
 	idr_for_each_entry(&tconn->volumes, mdev, vnr) {
+		number_of_volumes++;
 		os = drbd_read_state(mdev);
 		ns = apply_mask_val(os, mask, val);
 		ns = sanitize_state(mdev, ns, NULL);
@@ -1625,6 +1620,16 @@ conn_set_state(struct drbd_tconn *tconn, union drbd_state mask, union drbd_state
 	}
 	rcu_read_unlock();
 
+	if (number_of_volumes == 0) {
+		ns_min = ns_max = (union drbd_state) { {
+				.role = R_SECONDARY,
+				.peer = R_UNKNOWN,
+				.conn = val.conn,
+				.disk = D_DISKLESS,
+				.pdsk = D_UNKNOWN
+			} };
+	}
+
 	ns_min.susp = ns_max.susp = tconn->susp;
 	ns_min.susp_nod = ns_max.susp_nod = tconn->susp_nod;
 	ns_min.susp_fen = ns_max.susp_fen = tconn->susp_fen;