• A
    rbd: don't leak rbd_req for rbd_req_sync_notify_ack() · 18216657
    Alex Elder 提交于
    When rbd_req_sync_notify_ack() calls rbd_do_request() it supplies
    rbd_simple_req_cb() as its callback function.  Because the callback
    is supplied, an rbd_req structure gets allocated and populated so it
    can be used by the callback.  However rbd_simple_req_cb() is not
    freeing (or even using) the rbd_req structure, so it's getting
    leaked.
    
    Since rbd_simple_req_cb() has no need for the rbd_req structure,
    just avoid allocating one for this case.  Of the three calls to
    rbd_do_request(), only the one from rbd_do_op() needs the rbd_req
    structure, and that call can be distinguished from the other two
    because it supplies a non-null rbd_collection pointer.
    
    So fix this leak by only allocating the rbd_req structure if a
    non-null "coll" value is provided to rbd_do_request().
    Signed-off-by: NAlex Elder <elder@inktank.com>
    Reviewed-by: NJosh Durgin <josh.durgin@inktank.com>
    18216657
rbd.c 90.5 KB