aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/block/drbd/drbd_main.c23
-rw-r--r--drivers/block/drbd/drbd_worker.c6
2 files changed, 15 insertions, 14 deletions
diff --git a/drivers/block/drbd/drbd_main.c b/drivers/block/drbd/drbd_main.c
index 59fb39f15a11..8fee2fe4c853 100644
--- a/drivers/block/drbd/drbd_main.c
+++ b/drivers/block/drbd/drbd_main.c
@@ -1608,7 +1608,7 @@ int drbd_send_dblock(struct drbd_conf *mdev, struct drbd_request *req)
1608int drbd_send_block(struct drbd_conf *mdev, enum drbd_packet cmd, 1608int drbd_send_block(struct drbd_conf *mdev, enum drbd_packet cmd,
1609 struct drbd_peer_request *peer_req) 1609 struct drbd_peer_request *peer_req)
1610{ 1610{
1611 int ok; 1611 int err;
1612 struct p_data p; 1612 struct p_data p;
1613 void *dgb; 1613 void *dgb;
1614 int dgs; 1614 int dgs;
@@ -1627,21 +1627,22 @@ int drbd_send_block(struct drbd_conf *mdev, enum drbd_packet cmd,
1627 * This one may be interrupted by DRBD_SIG and/or DRBD_SIGKILL 1627 * This one may be interrupted by DRBD_SIG and/or DRBD_SIGKILL
1628 * in response to admin command or module unload. 1628 * in response to admin command or module unload.
1629 */ 1629 */
1630 if (drbd_get_data_sock(mdev->tconn)) 1630 err = drbd_get_data_sock(mdev->tconn);
1631 return 0; 1631 if (err)
1632 1632 return err;
1633 ok = sizeof(p) == drbd_send(mdev->tconn, mdev->tconn->data.socket, &p, sizeof(p), dgs ? MSG_MORE : 0); 1633 err = drbd_send_all(mdev->tconn, mdev->tconn->data.socket, &p,
1634 if (ok && dgs) { 1634 sizeof(p), dgs ? MSG_MORE : 0);
1635 if (!err && dgs) {
1635 dgb = mdev->tconn->int_dig_out; 1636 dgb = mdev->tconn->int_dig_out;
1636 drbd_csum_ee(mdev, mdev->tconn->integrity_w_tfm, peer_req, dgb); 1637 drbd_csum_ee(mdev, mdev->tconn->integrity_w_tfm, peer_req, dgb);
1637 ok = dgs == drbd_send(mdev->tconn, mdev->tconn->data.socket, dgb, dgs, 0); 1638 err = drbd_send_all(mdev->tconn, mdev->tconn->data.socket, dgb,
1639 dgs, 0);
1638 } 1640 }
1639 if (ok) 1641 if (!err)
1640 ok = !_drbd_send_zc_ee(mdev, peer_req); 1642 err = _drbd_send_zc_ee(mdev, peer_req);
1641
1642 drbd_put_data_sock(mdev->tconn); 1643 drbd_put_data_sock(mdev->tconn);
1643 1644
1644 return ok; 1645 return err;
1645} 1646}
1646 1647
1647int drbd_send_oos(struct drbd_conf *mdev, struct drbd_request *req) 1648int drbd_send_oos(struct drbd_conf *mdev, struct drbd_request *req)
diff --git a/drivers/block/drbd/drbd_worker.c b/drivers/block/drbd/drbd_worker.c
index 3a2c51fd8ea0..39b374185ca8 100644
--- a/drivers/block/drbd/drbd_worker.c
+++ b/drivers/block/drbd/drbd_worker.c
@@ -920,7 +920,7 @@ int w_e_end_data_req(struct drbd_work *w, int cancel)
920 } 920 }
921 921
922 if (likely((peer_req->flags & EE_WAS_ERROR) == 0)) { 922 if (likely((peer_req->flags & EE_WAS_ERROR) == 0)) {
923 ok = drbd_send_block(mdev, P_DATA_REPLY, peer_req); 923 ok = !drbd_send_block(mdev, P_DATA_REPLY, peer_req);
924 } else { 924 } else {
925 if (__ratelimit(&drbd_ratelimit_state)) 925 if (__ratelimit(&drbd_ratelimit_state))
926 dev_err(DEV, "Sending NegDReply. sector=%llus.\n", 926 dev_err(DEV, "Sending NegDReply. sector=%llus.\n",
@@ -966,7 +966,7 @@ int w_e_end_rsdata_req(struct drbd_work *w, int cancel)
966 } else if (likely((peer_req->flags & EE_WAS_ERROR) == 0)) { 966 } else if (likely((peer_req->flags & EE_WAS_ERROR) == 0)) {
967 if (likely(mdev->state.pdsk >= D_INCONSISTENT)) { 967 if (likely(mdev->state.pdsk >= D_INCONSISTENT)) {
968 inc_rs_pending(mdev); 968 inc_rs_pending(mdev);
969 ok = drbd_send_block(mdev, P_RS_DATA_REPLY, peer_req); 969 ok = !drbd_send_block(mdev, P_RS_DATA_REPLY, peer_req);
970 } else { 970 } else {
971 if (__ratelimit(&drbd_ratelimit_state)) 971 if (__ratelimit(&drbd_ratelimit_state))
972 dev_err(DEV, "Not sending RSDataReply, " 972 dev_err(DEV, "Not sending RSDataReply, "
@@ -1040,7 +1040,7 @@ int w_e_end_csum_rs_req(struct drbd_work *w, int cancel)
1040 peer_req->block_id = ID_SYNCER; /* By setting block_id, digest pointer becomes invalid! */ 1040 peer_req->block_id = ID_SYNCER; /* By setting block_id, digest pointer becomes invalid! */
1041 peer_req->flags &= ~EE_HAS_DIGEST; /* This peer request no longer has a digest pointer */ 1041 peer_req->flags &= ~EE_HAS_DIGEST; /* This peer request no longer has a digest pointer */
1042 kfree(di); 1042 kfree(di);
1043 ok = drbd_send_block(mdev, P_RS_DATA_REPLY, peer_req); 1043 ok = !drbd_send_block(mdev, P_RS_DATA_REPLY, peer_req);
1044 } 1044 }
1045 } else { 1045 } else {
1046 ok = !drbd_send_ack(mdev, P_NEG_RS_DREPLY, peer_req); 1046 ok = !drbd_send_ack(mdev, P_NEG_RS_DREPLY, peer_req);