diff options
author | Philipp Reisner <philipp.reisner@linbit.com> | 2011-02-08 06:55:24 -0500 |
---|---|---|
committer | Philipp Reisner <philipp.reisner@linbit.com> | 2011-09-28 04:33:05 -0400 |
commit | eefc2f7de2e4a35247c932a2c09f1890864a8381 (patch) | |
tree | 7ab6f6d14020c005f8fc8b872cee022823c91a09 /drivers/block/drbd/drbd_receiver.c | |
parent | 808222845d62e551630699a1381bbf8a1fd4a286 (diff) |
drbd: Converted drbdd() from mdev to tconn
The drbd_md_sync(mdev) happens in the after state change anyways...
Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com>
Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
Diffstat (limited to 'drivers/block/drbd/drbd_receiver.c')
-rw-r--r-- | drivers/block/drbd/drbd_receiver.c | 30 |
1 files changed, 14 insertions, 16 deletions
diff --git a/drivers/block/drbd/drbd_receiver.c b/drivers/block/drbd/drbd_receiver.c index c8d173c11390..4c61802c3421 100644 --- a/drivers/block/drbd/drbd_receiver.c +++ b/drivers/block/drbd/drbd_receiver.c | |||
@@ -939,6 +939,7 @@ static bool decode_header(struct drbd_tconn *tconn, struct p_header *h, struct p | |||
939 | if (h->h80.magic == cpu_to_be32(DRBD_MAGIC)) { | 939 | if (h->h80.magic == cpu_to_be32(DRBD_MAGIC)) { |
940 | pi->cmd = be16_to_cpu(h->h80.command); | 940 | pi->cmd = be16_to_cpu(h->h80.command); |
941 | pi->size = be16_to_cpu(h->h80.length); | 941 | pi->size = be16_to_cpu(h->h80.length); |
942 | pi->vnr = 0; | ||
942 | } else if (h->h95.magic == cpu_to_be16(DRBD_MAGIC_BIG)) { | 943 | } else if (h->h95.magic == cpu_to_be16(DRBD_MAGIC_BIG)) { |
943 | pi->cmd = be16_to_cpu(h->h95.command); | 944 | pi->cmd = be16_to_cpu(h->h95.command); |
944 | pi->size = be32_to_cpu(h->h95.length) & 0x00ffffff; | 945 | pi->size = be32_to_cpu(h->h95.length) & 0x00ffffff; |
@@ -3771,42 +3772,42 @@ static struct data_cmd drbd_cmd_handler[] = { | |||
3771 | p_header, but they may not rely on that. Since there is also p_header95 ! | 3772 | p_header, but they may not rely on that. Since there is also p_header95 ! |
3772 | */ | 3773 | */ |
3773 | 3774 | ||
3774 | static void drbdd(struct drbd_conf *mdev) | 3775 | static void drbdd(struct drbd_tconn *tconn) |
3775 | { | 3776 | { |
3776 | struct p_header *header = &mdev->tconn->data.rbuf.header; | 3777 | struct p_header *header = &tconn->data.rbuf.header; |
3777 | struct packet_info pi; | 3778 | struct packet_info pi; |
3778 | size_t shs; /* sub header size */ | 3779 | size_t shs; /* sub header size */ |
3779 | int rv; | 3780 | int rv; |
3780 | 3781 | ||
3781 | while (get_t_state(&mdev->tconn->receiver) == RUNNING) { | 3782 | while (get_t_state(&tconn->receiver) == RUNNING) { |
3782 | drbd_thread_current_set_cpu(&mdev->tconn->receiver); | 3783 | drbd_thread_current_set_cpu(&tconn->receiver); |
3783 | if (!drbd_recv_header(mdev->tconn, &pi)) | 3784 | if (!drbd_recv_header(tconn, &pi)) |
3784 | goto err_out; | 3785 | goto err_out; |
3785 | 3786 | ||
3786 | if (unlikely(pi.cmd >= P_MAX_CMD || !drbd_cmd_handler[pi.cmd].function)) { | 3787 | if (unlikely(pi.cmd >= P_MAX_CMD || !drbd_cmd_handler[pi.cmd].function)) { |
3787 | dev_err(DEV, "unknown packet type %d, l: %d!\n", pi.cmd, pi.size); | 3788 | conn_err(tconn, "unknown packet type %d, l: %d!\n", pi.cmd, pi.size); |
3788 | goto err_out; | 3789 | goto err_out; |
3789 | } | 3790 | } |
3790 | 3791 | ||
3791 | shs = drbd_cmd_handler[pi.cmd].pkt_size - sizeof(struct p_header); | 3792 | shs = drbd_cmd_handler[pi.cmd].pkt_size - sizeof(struct p_header); |
3792 | if (pi.size - shs > 0 && !drbd_cmd_handler[pi.cmd].expect_payload) { | 3793 | if (pi.size - shs > 0 && !drbd_cmd_handler[pi.cmd].expect_payload) { |
3793 | dev_err(DEV, "No payload expected %s l:%d\n", cmdname(pi.cmd), pi.size); | 3794 | conn_err(tconn, "No payload expected %s l:%d\n", cmdname(pi.cmd), pi.size); |
3794 | goto err_out; | 3795 | goto err_out; |
3795 | } | 3796 | } |
3796 | 3797 | ||
3797 | if (shs) { | 3798 | if (shs) { |
3798 | rv = drbd_recv(mdev->tconn, &header->payload, shs); | 3799 | rv = drbd_recv(tconn, &header->payload, shs); |
3799 | if (unlikely(rv != shs)) { | 3800 | if (unlikely(rv != shs)) { |
3800 | if (!signal_pending(current)) | 3801 | if (!signal_pending(current)) |
3801 | dev_warn(DEV, "short read while reading sub header: rv=%d\n", rv); | 3802 | conn_warn(tconn, "short read while reading sub header: rv=%d\n", rv); |
3802 | goto err_out; | 3803 | goto err_out; |
3803 | } | 3804 | } |
3804 | } | 3805 | } |
3805 | 3806 | ||
3806 | rv = drbd_cmd_handler[pi.cmd].function(mdev, pi.cmd, pi.size - shs); | 3807 | rv = drbd_cmd_handler[pi.cmd].function(vnr_to_mdev(tconn, pi.vnr), pi.cmd, pi.size - shs); |
3807 | 3808 | ||
3808 | if (unlikely(!rv)) { | 3809 | if (unlikely(!rv)) { |
3809 | dev_err(DEV, "error receiving %s, l: %d!\n", | 3810 | conn_err(tconn, "error receiving %s, l: %d!\n", |
3810 | cmdname(pi.cmd), pi.size); | 3811 | cmdname(pi.cmd), pi.size); |
3811 | goto err_out; | 3812 | goto err_out; |
3812 | } | 3813 | } |
@@ -3814,11 +3815,8 @@ static void drbdd(struct drbd_conf *mdev) | |||
3814 | 3815 | ||
3815 | if (0) { | 3816 | if (0) { |
3816 | err_out: | 3817 | err_out: |
3817 | drbd_force_state(mdev, NS(conn, C_PROTOCOL_ERROR)); | 3818 | drbd_force_state(tconn->volume0, NS(conn, C_PROTOCOL_ERROR)); |
3818 | } | 3819 | } |
3819 | /* If we leave here, we probably want to update at least the | ||
3820 | * "Connected" indicator on stable storage. Do so explicitly here. */ | ||
3821 | drbd_md_sync(mdev); | ||
3822 | } | 3820 | } |
3823 | 3821 | ||
3824 | void drbd_flush_workqueue(struct drbd_tconn *tconn) | 3822 | void drbd_flush_workqueue(struct drbd_tconn *tconn) |
@@ -4239,7 +4237,7 @@ int drbdd_init(struct drbd_thread *thi) | |||
4239 | 4237 | ||
4240 | if (h > 0) { | 4238 | if (h > 0) { |
4241 | if (get_net_conf(mdev->tconn)) { | 4239 | if (get_net_conf(mdev->tconn)) { |
4242 | drbdd(mdev); | 4240 | drbdd(mdev->tconn); |
4243 | put_net_conf(mdev->tconn); | 4241 | put_net_conf(mdev->tconn); |
4244 | } | 4242 | } |
4245 | } | 4243 | } |