]> git.kernelconcepts.de Git - karo-tx-linux.git/commit
libceph: avoid using freed osd in __kick_osd_requests()
authorAlex Elder <elder@inktank.com>
Fri, 7 Dec 2012 15:57:58 +0000 (09:57 -0600)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 17 Jan 2013 16:51:20 +0000 (08:51 -0800)
commit3aa540b869b9bd734ec60246ae1dfe35ab3530e0
tree16ba9e7dc0e84780777252216fb37f73a7348df7
parent9aaab33ec9b7b9cb745fc47dfe20b991ff468d72
libceph: avoid using freed osd in __kick_osd_requests()

If an osd has no requests and no linger requests, __reset_osd()
will just remove it with a call to __remove_osd().  That drops
a reference to the osd, and therefore the osd may have been free
by the time __reset_osd() returns.  That function offers no
indication this may have occurred, and as a result the osd will
continue to be used even when it's no longer valid.

Change__reset_osd() so it returns an error (ENODEV) when it
deletes the osd being reset.  And change __kick_osd_requests() so it
returns immediately (before referencing osd again) if __reset_osd()
returns *any* error.

Signed-off-by: Alex Elder <elder@inktank.com>
Reviewed-by: Sage Weil <sage@inktank.com>
(cherry picked from commit 685a7555ca69030739ddb57a47f0ea8ea80196a4)
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
net/ceph/osd_client.c