Skip to content

Commit

Permalink
drbd: fix potential protocol error
Browse files Browse the repository at this point in the history
Don't forget to drain the digest in case we cannot satisfy a
checksum based resync or online-verify request.

It would additionally cause a protocoll error,
dropping the connection.

Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com>
Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
  • Loading branch information
Lars Ellenberg authored and Philipp Reisner committed May 17, 2010
1 parent 8d1894e commit c3470cd
Showing 1 changed file with 4 additions and 1 deletion.
5 changes: 4 additions & 1 deletion drivers/block/drbd/drbd_receiver.c
Original file line number Diff line number Diff line change
Expand Up @@ -1331,6 +1331,9 @@ static int drbd_drain_block(struct drbd_conf *mdev, int data_size)
int rr, rv = 1;
void *data;

if (!data_size)
return TRUE;

page = drbd_pp_alloc(mdev, 1);

data = kmap(page);
Expand Down Expand Up @@ -1946,7 +1949,7 @@ static int receive_DataRequest(struct drbd_conf *mdev, struct p_header *h)
"no local data.\n");
drbd_send_ack_rp(mdev, h->command == P_DATA_REQUEST ? P_NEG_DREPLY :
P_NEG_RS_DREPLY , p);
return TRUE;
return drbd_drain_block(mdev, h->length - brps);
}

/* GFP_NOIO, because we must not cause arbitrary write-out: in a DRBD
Expand Down

0 comments on commit c3470cd

Please sign in to comment.