diff options
| -rw-r--r-- | drivers/block/drbd/drbd_receiver.c | 6 | 
1 files changed, 5 insertions, 1 deletions
| diff --git a/drivers/block/drbd/drbd_receiver.c b/drivers/block/drbd/drbd_receiver.c index e5a2e5f7887b..975024cf03c5 100644 --- a/drivers/block/drbd/drbd_receiver.c +++ b/drivers/block/drbd/drbd_receiver.c @@ -2500,7 +2500,11 @@ static int handle_write_conflicts(struct drbd_device *device,  			peer_req->w.cb = superseded ? e_send_superseded :  						   e_send_retry_write;  			list_add_tail(&peer_req->w.list, &device->done_ee); -			queue_work(connection->ack_sender, &peer_req->peer_device->send_acks_work); +			/* put is in drbd_send_acks_wf() */ +			kref_get(&device->kref); +			if (!queue_work(connection->ack_sender, +					&peer_req->peer_device->send_acks_work)) +				kref_put(&device->kref, drbd_destroy_device);  			err = -ENOENT;  			goto out; | 
