diff options
author | Tony Lindgren <tony@atomide.com> | 2011-06-14 05:53:42 -0700 |
---|---|---|
committer | Tony Lindgren <tony@atomide.com> | 2011-06-14 05:53:42 -0700 |
commit | b8ce9fb8e18af7466e0b915bb5979322cdace322 (patch) | |
tree | eec6f9b58ce154fd863f0f78b374a697a5a7139b /net/ceph/osd_client.c | |
parent | c8e0bf95fc01d6e2ca585fe08010800b6c56e823 (diff) | |
parent | e9e35c5a2b2c803b5e2f25906d8ffe110670ceb6 (diff) |
Merge branch 'fixes-v3.0-rc3' into devel-fixes
Diffstat (limited to 'net/ceph/osd_client.c')
-rw-r--r-- | net/ceph/osd_client.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/net/ceph/osd_client.c b/net/ceph/osd_client.c index 6ea2b892f44..9cb627a4073 100644 --- a/net/ceph/osd_client.c +++ b/net/ceph/osd_client.c @@ -1144,6 +1144,13 @@ static void handle_osds_timeout(struct work_struct *work) round_jiffies_relative(delay)); } +static void complete_request(struct ceph_osd_request *req) +{ + if (req->r_safe_callback) + req->r_safe_callback(req, NULL); + complete_all(&req->r_safe_completion); /* fsync waiter */ +} + /* * handle osd op reply. either call the callback if it is specified, * or do the completion to wake up the waiting thread. @@ -1226,11 +1233,8 @@ static void handle_reply(struct ceph_osd_client *osdc, struct ceph_msg *msg, else complete_all(&req->r_completion); - if (flags & CEPH_OSD_FLAG_ONDISK) { - if (req->r_safe_callback) - req->r_safe_callback(req, msg); - complete_all(&req->r_safe_completion); /* fsync waiter */ - } + if (flags & CEPH_OSD_FLAG_ONDISK) + complete_request(req); done: dout("req=%p req->r_linger=%d\n", req, req->r_linger); @@ -1732,6 +1736,7 @@ int ceph_osdc_wait_request(struct ceph_osd_client *osdc, __cancel_request(req); __unregister_request(osdc, req); mutex_unlock(&osdc->request_mutex); + complete_request(req); dout("wait_request tid %llu canceled/timed out\n", req->r_tid); return rc; } |