libceph: fix null dereference when unregistering linger requests
authorSage Weil <sage@newdream.net>
Tue, 29 Mar 2011 19:11:06 +0000 (12:11 -0700)
committerSage Weil <sage@newdream.net>
Tue, 29 Mar 2011 19:11:06 +0000 (12:11 -0700)
commitfbdb9190482fd83a3eb20cdeb0da454759f479d7
treebf83dcd6ea13c9a1feedb2a8f79744de93f9fecd
parent234af26ff123dfb2aa48772124721b1354c8e0a5
libceph: fix null dereference when unregistering linger requests

We should only clear r_osd if we are neither registered as a linger or a
regular request.  We may unregister as a linger while still registered as
a regular request (e.g., in reset_osd).  Incorrectly clearing r_osd there
leads to a null pointer dereference in __send_request.

Also simplify the parallel check in __unregister_request() where we just
removed r_osd_item and know it's empty.

Signed-off-by: Sage Weil <sage@newdream.net>
net/ceph/osd_client.c