rbd: don't drop watch requests on completion
authorAlex Elder <elder@inktank.com>
Fri, 25 Jan 2013 23:08:55 +0000 (17:08 -0600)
committerSage Weil <sage@inktank.com>
Thu, 14 Feb 2013 02:29:10 +0000 (18:29 -0800)
commit8eb87565306cf40a32f5d0883d008675cd2dd510
treee999f857dbe1ccf18508590be9c818d7835b7201
parent25dcf954c3230946b5f3e18db9f91d7640eff76e
rbd: don't drop watch requests on completion

When we register an osd request to linger, it means that request
will stay around (under control of the osd client) until we've
unregistered it.  We do that for an rbd image's header object, and
we keep a pointer to the object request associated with it.

Keep a reference to the watch object request for as long as it is
registered to linger.  Drop it again after we've removed the linger
registration.

This resolves:
    http://tracker.ceph.com/issues/3937

(Note: this originally came about because the osd client was
issuing a callback more than once.  But that behavior will be
changing soon, documented in tracker issue 3967.)

Signed-off-by: Alex Elder <elder@inktank.com>
Reviewed-by: Josh Durgin <josh.durgin@inktank.com>
drivers/block/rbd.c