static enum drbd_state_rv is_valid_state(struct drbd_conf *, union drbd_state);
 static enum drbd_state_rv is_valid_soft_transition(union drbd_state, union drbd_state);
 static enum drbd_state_rv is_valid_transition(union drbd_state os, union drbd_state ns);
-static union drbd_state sanitize_state(struct drbd_conf *mdev, union drbd_state os,
-                                      union drbd_state ns, const char **warn_sync_abort);
+static union drbd_state sanitize_state(struct drbd_conf *mdev, union drbd_state ns,
+                                      const char **warn_sync_abort);
 
 /**
  * cl_wide_st_chg() - true if the state change is a cluster wide one
        spin_lock_irqsave(&mdev->tconn->req_lock, flags);
        os = mdev->state;
        ns.i = (os.i & ~mask.i) | val.i;
-       ns = sanitize_state(mdev, os, ns, NULL);
+       ns = sanitize_state(mdev, ns, NULL);
        rv = is_valid_transition(os, ns);
        if (rv == SS_SUCCESS)
                rv = SS_UNKNOWN_ERROR;  /* cont waiting, otherwise fail. */
        spin_lock_irqsave(&mdev->tconn->req_lock, flags);
        os = mdev->state;
        ns.i = (os.i & ~mask.i) | val.i;
-       ns = sanitize_state(mdev, os, ns, NULL);
+       ns = sanitize_state(mdev, ns, NULL);
        rv = is_valid_transition(os, ns);
        if (rv < SS_SUCCESS)
                goto abort;
        if (ns.disk == D_FAILED && os.disk == D_DISKLESS)
                rv = SS_IS_DISKLESS;
 
+       /* if we are only D_ATTACHING yet,
+        * we can (and should) go directly to D_DISKLESS. */
+       if (ns.disk == D_FAILED && os.disk == D_ATTACHING) {
+               printk("TODO: FIX ME\n");
+               rv = SS_IS_DISKLESS;
+       }
+
        return rv;
 }
 
  * When we loose connection, we have to set the state of the peers disk (pdsk)
  * to D_UNKNOWN. This rule and many more along those lines are in this function.
  */
-static union drbd_state sanitize_state(struct drbd_conf *mdev, union drbd_state os,
-                                      union drbd_state ns, const char **warn_sync_abort)
+static union drbd_state sanitize_state(struct drbd_conf *mdev, union drbd_state ns,
+                                      const char **warn_sync_abort)
 {
        enum drbd_fencing_p fp;
        enum drbd_disk_state disk_min, disk_max, pdsk_min, pdsk_max;
                put_ldev(mdev);
        }
 
-       /* if we are only D_ATTACHING yet,
-        * we can (and should) go directly to D_DISKLESS. */
-       if (ns.disk == D_FAILED && os.disk == D_ATTACHING)
-               ns.disk = D_DISKLESS;
-
        /* Implications from connection to peer and peer_isp */
        if (ns.conn < C_CONNECTED) {
                ns.peer_isp = 0;
        if (ns.conn == C_STANDALONE && ns.disk == D_DISKLESS && ns.role == R_SECONDARY)
                ns.aftr_isp = 0;
 
+       /* An implication of the disk states onto the connection state */
        /* Abort resync if a disk fails/detaches */
-       if (os.conn > C_CONNECTED && ns.conn > C_CONNECTED &&
-           (ns.disk <= D_FAILED || ns.pdsk <= D_FAILED)) {
+       if (ns.conn > C_CONNECTED && (ns.disk <= D_FAILED || ns.pdsk <= D_FAILED)) {
                if (warn_sync_abort)
                        *warn_sync_abort =
-                               os.conn == C_VERIFY_S || os.conn == C_VERIFY_T ?
+                               ns.conn == C_VERIFY_S || ns.conn == C_VERIFY_T ?
                                "Online-verify" : "Resync";
                ns.conn = C_CONNECTED;
        }
        }
 
        if (fp == FP_STONITH &&
-           (ns.role == R_PRIMARY && ns.conn < C_CONNECTED && ns.pdsk > D_OUTDATED) &&
-           !(os.role == R_PRIMARY && os.conn < C_CONNECTED && os.pdsk > D_OUTDATED))
+           (ns.role == R_PRIMARY && ns.conn < C_CONNECTED && ns.pdsk > D_OUTDATED))
                ns.susp_fen = 1; /* Suspend IO while fence-peer handler runs (peer lost) */
 
        if (mdev->sync_conf.on_no_data == OND_SUSPEND_IO &&
-           (ns.role == R_PRIMARY && ns.disk < D_UP_TO_DATE && ns.pdsk < D_UP_TO_DATE) &&
-           !(os.role == R_PRIMARY && os.disk < D_UP_TO_DATE && os.pdsk < D_UP_TO_DATE))
+           (ns.role == R_PRIMARY && ns.disk < D_UP_TO_DATE && ns.pdsk < D_UP_TO_DATE))
                ns.susp_nod = 1; /* Suspend IO while no data available (no accessible data available) */
 
        if (ns.aftr_isp || ns.peer_isp || ns.user_isp) {
 
        os = mdev->state;
 
-       ns = sanitize_state(mdev, os, ns, &warn_sync_abort);
-
+       ns = sanitize_state(mdev, ns, &warn_sync_abort);
        if (ns.i == os.i)
                return SS_NOTHING_TO_DO;