drbd: fix potential protocol error
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>
This commit is contained in:
parent
8d1894ebe4
commit
c3470cde57
1 changed files with 4 additions and 1 deletions
|
@ -1331,6 +1331,9 @@ static int drbd_drain_block(struct drbd_conf *mdev, int data_size)
|
||||||
int rr, rv = 1;
|
int rr, rv = 1;
|
||||||
void *data;
|
void *data;
|
||||||
|
|
||||||
|
if (!data_size)
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
page = drbd_pp_alloc(mdev, 1);
|
page = drbd_pp_alloc(mdev, 1);
|
||||||
|
|
||||||
data = kmap(page);
|
data = kmap(page);
|
||||||
|
@ -1946,7 +1949,7 @@ static int receive_DataRequest(struct drbd_conf *mdev, struct p_header *h)
|
||||||
"no local data.\n");
|
"no local data.\n");
|
||||||
drbd_send_ack_rp(mdev, h->command == P_DATA_REQUEST ? P_NEG_DREPLY :
|
drbd_send_ack_rp(mdev, h->command == P_DATA_REQUEST ? P_NEG_DREPLY :
|
||||||
P_NEG_RS_DREPLY , p);
|
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
|
/* GFP_NOIO, because we must not cause arbitrary write-out: in a DRBD
|
||||||
|
|
Loading…
Reference in a new issue