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>
This commit is contained in:
Philipp Reisner 2011-07-18 10:44:24 +02:00
parent 97ddb68790
commit f132f554ce
1 changed files with 13 additions and 8 deletions

View File

@ -1576,13 +1576,7 @@ void
conn_set_state(struct drbd_tconn *tconn, union drbd_state mask, union drbd_state val, 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 *pns_min, union drbd_state *pns_max, enum chg_state_flags flags)
{ {
union drbd_state ns, os, ns_max = { 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_min = { union drbd_state ns_min = {
{ .role = R_MASK, { .role = R_MASK,
.peer = 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; struct drbd_conf *mdev;
enum drbd_state_rv rv; enum drbd_state_rv rv;
int vnr; int vnr, number_of_volumes = 0;
if (mask.conn == C_MASK) if (mask.conn == C_MASK)
tconn->cstate = val.conn; tconn->cstate = val.conn;
rcu_read_lock(); rcu_read_lock();
idr_for_each_entry(&tconn->volumes, mdev, vnr) { idr_for_each_entry(&tconn->volumes, mdev, vnr) {
number_of_volumes++;
os = drbd_read_state(mdev); os = drbd_read_state(mdev);
ns = apply_mask_val(os, mask, val); ns = apply_mask_val(os, mask, val);
ns = sanitize_state(mdev, ns, NULL); 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(); 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 = ns_max.susp = tconn->susp;
ns_min.susp_nod = ns_max.susp_nod = tconn->susp_nod; ns_min.susp_nod = ns_max.susp_nod = tconn->susp_nod;
ns_min.susp_fen = ns_max.susp_fen = tconn->susp_fen; ns_min.susp_fen = ns_max.susp_fen = tconn->susp_fen;