Commit 086e8ddb authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client

Pull two Ceph fixes from Sage Weil:
 "These fix an issue with the RBD notifications when there are topology
  changes in the cluster"

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client:
  Revert "libceph: clear r_req_lru_item in __unregister_linger_request()"
  libceph: request a new osdmap if lingering request maps to no osd
parents 7ce14f6f 521a04d0
...@@ -1306,8 +1306,6 @@ static void __unregister_linger_request(struct ceph_osd_client *osdc, ...@@ -1306,8 +1306,6 @@ static void __unregister_linger_request(struct ceph_osd_client *osdc,
if (list_empty(&req->r_osd_item)) if (list_empty(&req->r_osd_item))
req->r_osd = NULL; req->r_osd = NULL;
} }
list_del_init(&req->r_req_lru_item); /* can be on notarget */
ceph_osdc_put_request(req); ceph_osdc_put_request(req);
} }
...@@ -2017,21 +2015,30 @@ static void kick_requests(struct ceph_osd_client *osdc, bool force_resend, ...@@ -2017,21 +2015,30 @@ static void kick_requests(struct ceph_osd_client *osdc, bool force_resend,
err = __map_request(osdc, req, err = __map_request(osdc, req,
force_resend || force_resend_writes); force_resend || force_resend_writes);
dout("__map_request returned %d\n", err); dout("__map_request returned %d\n", err);
if (err == 0)
continue; /* no change and no osd was specified */
if (err < 0) if (err < 0)
continue; /* hrm! */ continue; /* hrm! */
if (req->r_osd == NULL || err > 0) {
if (req->r_osd == NULL) { if (req->r_osd == NULL) {
dout("tid %llu maps to no valid osd\n", req->r_tid); dout("lingering %p tid %llu maps to no osd\n",
needmap++; /* request a newer map */ req, req->r_tid);
continue; /*
* A homeless lingering request makes
* no sense, as it's job is to keep
* a particular OSD connection open.
* Request a newer map and kick the
* request, knowing that it won't be
* resent until we actually get a map
* that can tell us where to send it.
*/
needmap++;
} }
dout("kicking lingering %p tid %llu osd%d\n", req, req->r_tid, dout("kicking lingering %p tid %llu osd%d\n", req,
req->r_osd ? req->r_osd->o_osd : -1); req->r_tid, req->r_osd ? req->r_osd->o_osd : -1);
__register_request(osdc, req); __register_request(osdc, req);
__unregister_linger_request(osdc, req); __unregister_linger_request(osdc, req);
} }
}
reset_changed_osds(osdc); reset_changed_osds(osdc);
mutex_unlock(&osdc->request_mutex); mutex_unlock(&osdc->request_mutex);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment