drbd: Started to separated connection flags (tconn) from block device flags (mdev)
authorPhilipp Reisner <philipp.reisner@linbit.com>
Mon, 7 Feb 2011 13:30:33 +0000 (14:30 +0100)
committerPhilipp Reisner <philipp.reisner@linbit.com>
Wed, 28 Sep 2011 08:26:54 +0000 (10:26 +0200)
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_main.c

index c8a9b5003ae896908ff00d2eb10b8ffbb6ad9d4f..f46571acd4d0df3b54ae2ea012e1d63a9533cae2 100644 (file)
@@ -754,7 +754,7 @@ enum {
 #define EE_WAS_ERROR           (1<<__EE_WAS_ERROR)
 #define EE_HAS_DIGEST          (1<<__EE_HAS_DIGEST)
 
-/* global flag bits */
+/* flag bits per mdev */
 enum {
        CREATE_BARRIER,         /* next P_DATA is preceded by a P_BARRIER */
        SIGNAL_ASENDER,         /* whether asender wants to be interrupted */
@@ -782,8 +782,6 @@ enum {
        GO_DISKLESS,            /* Disk is being detached, on io-error or admin request. */
        WAS_IO_ERROR,           /* Local disk failed returned IO error */
        RESYNC_AFTER_NEG,       /* Resync after online grow after the attach&negotiate finished. */
-       NET_CONGESTED,          /* The data socket is congested */
-
        CONFIG_PENDING,         /* serialization of (re)configuration requests.
                                 * if set, also prevents the device from dying */
        DEVICE_DYING,           /* device became unconfigured,
@@ -910,10 +908,16 @@ struct fifo_buffer {
        unsigned int size;
 };
 
+/* flag bits per tconn */
+enum {
+       NET_CONGESTED,          /* The data socket is congested */
+};
+
 struct drbd_tconn {                    /* is a resource from the config file */
        char *name;                     /* Resource name */
        struct list_head all_tconn;     /* List of all drbd_tconn, prot by global_state_lock */
        struct drbd_conf *volume0;      /* TODO: Remove me again */
+       unsigned long flags;
 
        struct net_conf *net_conf;      /* protected by get_net_conf() and put_net_conf() */
        atomic_t net_cnt;               /* Users of net_conf */
index 541e35dbd6c9fb373a518600835fc78fd01c9558..8b443c8b13b3f98d653f399a79f673d2b9c8b1c4 100644 (file)
@@ -1358,7 +1358,7 @@ static void drbd_update_congested(struct drbd_conf *mdev)
 {
        struct sock *sk = mdev->tconn->data.socket->sk;
        if (sk->sk_wmem_queued > sk->sk_sndbuf * 4 / 5)
-               set_bit(NET_CONGESTED, &mdev->flags);
+               set_bit(NET_CONGESTED, &mdev->tconn->flags);
 }
 
 /* The idea of sendpage seems to be to put some kind of reference
@@ -1431,7 +1431,7 @@ static int _drbd_send_page(struct drbd_conf *mdev, struct page *page,
                offset += sent;
        } while (len > 0 /* THINK && mdev->cstate >= C_CONNECTED*/);
        set_fs(oldfs);
-       clear_bit(NET_CONGESTED, &mdev->flags);
+       clear_bit(NET_CONGESTED, &mdev->tconn->flags);
 
        ok = (len == 0);
        if (likely(ok))
@@ -1694,7 +1694,7 @@ int drbd_send(struct drbd_conf *mdev, struct socket *sock,
        } while (sent < size);
 
        if (sock == mdev->tconn->data.socket)
-               clear_bit(NET_CONGESTED, &mdev->flags);
+               clear_bit(NET_CONGESTED, &mdev->tconn->flags);
 
        if (rv <= 0) {
                if (rv != -EAGAIN) {
@@ -2161,7 +2161,7 @@ static int drbd_congested(void *congested_data, int bdi_bits)
                        reason = 'b';
        }
 
-       if (bdi_bits & (1 << BDI_async_congested) && test_bit(NET_CONGESTED, &mdev->flags)) {
+       if (bdi_bits & (1 << BDI_async_congested) && test_bit(NET_CONGESTED, &mdev->tconn->flags)) {
                r |= (1 << BDI_async_congested);
                reason = reason == 'b' ? 'a' : 'n';
        }