Browse Source

block, drbd: fix drbd_req_new() initialization

mempool_alloc() does not support __GFP_ZERO since elements may come from
memory that has already been released by mempool_free().

Remove __GFP_ZERO from mempool_alloc() in drbd_req_new() and properly
initialize it to 0.

Cc: Lars Ellenberg <drbd-dev@lists.linbit.com>
Cc: Jens Axboe <axboe@fb.com>
Signed-off-by: David Rientjes <rientjes@google.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
David Rientjes 10 years ago
parent
commit
23fe8f8b11
1 changed files with 2 additions and 1 deletions
  1. 2 1
      drivers/block/drbd/drbd_req.c

+ 2 - 1
drivers/block/drbd/drbd_req.c

@@ -52,9 +52,10 @@ static struct drbd_request *drbd_req_new(struct drbd_device *device,
 {
 {
 	struct drbd_request *req;
 	struct drbd_request *req;
 
 
-	req = mempool_alloc(drbd_request_mempool, GFP_NOIO | __GFP_ZERO);
+	req = mempool_alloc(drbd_request_mempool, GFP_NOIO);
 	if (!req)
 	if (!req)
 		return NULL;
 		return NULL;
+	memset(req, 0, sizeof(*req));
 
 
 	drbd_req_make_private_bio(req, bio_src);
 	drbd_req_make_private_bio(req, bio_src);
 	req->rq_state    = bio_data_dir(bio_src) == WRITE ? RQ_WRITE : 0;
 	req->rq_state    = bio_data_dir(bio_src) == WRITE ? RQ_WRITE : 0;