drbd: Moved susp, susp_nod and susp_fen to the connection object
authorPhilipp Reisner <philipp.reisner@linbit.com>
Mon, 28 Mar 2011 14:18:39 +0000 (16:18 +0200)
committerPhilipp Reisner <philipp.reisner@linbit.com>
Thu, 8 Nov 2012 15:45:03 +0000 (16:45 +0100)
Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com>
Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
drivers/block/drbd/drbd_int.h
drivers/block/drbd/drbd_state.c

index cde547bdddf1f3d86cb2ab6fc5cdb6031a281148..f76b3932d1e239c3fd9b0f92634a782cebe8f968 100644 (file)
@@ -862,6 +862,9 @@ struct drbd_tconn {                 /* is a resource from the config file */
        struct list_head all_tconn;     /* linked on global drbd_tconns */
        struct idr volumes;             /* <tconn, vnr> to mdev mapping */
        enum drbd_conns cstate;         /* Only C_STANDALONE to C_WF_REPORT_PARAMS */
+       unsigned susp:1;                /* IO suspended by user */
+       unsigned susp_nod:1;            /* IO suspended because no data */
+       unsigned susp_fen:1;            /* IO suspended because fence peer handler runs */
        struct mutex cstate_mutex;      /* Protects graceful disconnects */
 
        unsigned long flags;
@@ -1687,6 +1690,9 @@ static inline union drbd_state drbd_read_state(struct drbd_conf *mdev)
        union drbd_state rv;
 
        rv = mdev->state;
+       rv.susp = mdev->tconn->susp;
+       rv.susp_nod = mdev->tconn->susp_nod;
+       rv.susp_fen = mdev->tconn->susp_fen;
 
        return rv;
 }
@@ -2219,7 +2225,9 @@ static inline int drbd_state_is_stable(struct drbd_conf *mdev)
 
 static inline int drbd_suspended(struct drbd_conf *mdev)
 {
-       return mdev->state.susp || mdev->state.susp_nod || mdev->state.susp_fen;
+       struct drbd_tconn *tconn = mdev->tconn;
+
+       return tconn->susp || tconn->susp_fen || tconn->susp_nod;
 }
 
 static inline bool may_inc_ap_bio(struct drbd_conf *mdev)
index ae4a76ce8c1d484e2929bd2745c86bf52e80c8bf..902007c807ea40b7420098de59f0925f537b5d30 100644 (file)
@@ -861,6 +861,9 @@ __drbd_set_state(struct drbd_conf *mdev, union drbd_state ns,
                atomic_inc(&mdev->local_cnt);
 
        mdev->state = ns;
+       mdev->tconn->susp = ns.susp;
+       mdev->tconn->susp_nod = ns.susp_nod;
+       mdev->tconn->susp_fen = ns.susp_fen;
 
        /* solve the race between becoming unconfigured,
         * worker doing the cleanup, and