Commit d5373389 authored by Philipp Reisner's avatar Philipp Reisner

drbd: Actually allow BIOs up to 128k (was 32k).

Now we have multiple BIOs per ee, packets with a 32 bit length field,
it gets time to use these goodies.
Signed-off-by: default avatarPhilipp Reisner <philipp.reisner@linbit.com>
Signed-off-by: default avatarLars Ellenberg <lars.ellenberg@linbit.com>
parent 02918be2
...@@ -1389,11 +1389,13 @@ struct bm_extent { ...@@ -1389,11 +1389,13 @@ struct bm_extent {
#endif #endif
/* Sector shift value for the "hash" functions of tl_hash and ee_hash tables. /* Sector shift value for the "hash" functions of tl_hash and ee_hash tables.
* With a value of 6 all IO in one 32K block make it to the same slot of the * With a value of 8 all IO in one 128K block make it to the same slot of the
* hash table. */ * hash table. */
#define HT_SHIFT 6 #define HT_SHIFT 8
#define DRBD_MAX_SEGMENT_SIZE (1U<<(9+HT_SHIFT)) #define DRBD_MAX_SEGMENT_SIZE (1U<<(9+HT_SHIFT))
#define DRBD_MAX_SIZE_H80_PACKET (1 << 15) /* The old header only allows packets up to 32Kib data */
/* Number of elements in the app_reads_hash */ /* Number of elements in the app_reads_hash */
#define APP_R_HSIZE 15 #define APP_R_HSIZE 15
......
...@@ -2447,7 +2447,7 @@ int drbd_send_dblock(struct drbd_conf *mdev, struct drbd_request *req) ...@@ -2447,7 +2447,7 @@ int drbd_send_dblock(struct drbd_conf *mdev, struct drbd_request *req)
dgs = (mdev->agreed_pro_version >= 87 && mdev->integrity_w_tfm) ? dgs = (mdev->agreed_pro_version >= 87 && mdev->integrity_w_tfm) ?
crypto_hash_digestsize(mdev->integrity_w_tfm) : 0; crypto_hash_digestsize(mdev->integrity_w_tfm) : 0;
if (req->size <= (1 << 15)) { if (req->size <= DRBD_MAX_SIZE_H80_PACKET) {
p.head.h80.magic = BE_DRBD_MAGIC; p.head.h80.magic = BE_DRBD_MAGIC;
p.head.h80.command = cpu_to_be16(P_DATA); p.head.h80.command = cpu_to_be16(P_DATA);
p.head.h80.length = p.head.h80.length =
...@@ -2518,7 +2518,7 @@ int drbd_send_block(struct drbd_conf *mdev, enum drbd_packets cmd, ...@@ -2518,7 +2518,7 @@ int drbd_send_block(struct drbd_conf *mdev, enum drbd_packets cmd,
dgs = (mdev->agreed_pro_version >= 87 && mdev->integrity_w_tfm) ? dgs = (mdev->agreed_pro_version >= 87 && mdev->integrity_w_tfm) ?
crypto_hash_digestsize(mdev->integrity_w_tfm) : 0; crypto_hash_digestsize(mdev->integrity_w_tfm) : 0;
if (e->size <= (1 << 15)) { if (e->size <= DRBD_MAX_SIZE_H80_PACKET) {
p.head.h80.magic = BE_DRBD_MAGIC; p.head.h80.magic = BE_DRBD_MAGIC;
p.head.h80.command = cpu_to_be16(cmd); p.head.h80.command = cpu_to_be16(cmd);
p.head.h80.length = p.head.h80.length =
......
...@@ -1063,7 +1063,9 @@ static int drbd_nl_disk_conf(struct drbd_conf *mdev, struct drbd_nl_cfg_req *nlp ...@@ -1063,7 +1063,9 @@ static int drbd_nl_disk_conf(struct drbd_conf *mdev, struct drbd_nl_cfg_req *nlp
mdev->read_cnt = 0; mdev->read_cnt = 0;
mdev->writ_cnt = 0; mdev->writ_cnt = 0;
drbd_setup_queue_param(mdev, DRBD_MAX_SEGMENT_SIZE); drbd_setup_queue_param(mdev, mdev->state.conn == C_CONNECTED &&
mdev->agreed_pro_version < 95 ?
DRBD_MAX_SIZE_H80_PACKET : DRBD_MAX_SEGMENT_SIZE);
/* If I am currently not R_PRIMARY, /* If I am currently not R_PRIMARY,
* but meta data primary indicator is set, * but meta data primary indicator is set,
......
...@@ -925,6 +925,11 @@ static int drbd_connect(struct drbd_conf *mdev) ...@@ -925,6 +925,11 @@ static int drbd_connect(struct drbd_conf *mdev)
drbd_thread_start(&mdev->asender); drbd_thread_start(&mdev->asender);
if (mdev->agreed_pro_version < 95 && get_ldev(mdev)) {
drbd_setup_queue_param(mdev, DRBD_MAX_SIZE_H80_PACKET);
put_ldev(mdev);
}
if (!drbd_send_protocol(mdev)) if (!drbd_send_protocol(mdev))
return -1; return -1;
drbd_send_sync_param(mdev, &mdev->sync_conf); drbd_send_sync_param(mdev, &mdev->sync_conf);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment