Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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

+20 -13
+20 -13
net/ceph/osd_client.c
··· 1306 1306 if (list_empty(&req->r_osd_item)) 1307 1307 req->r_osd = NULL; 1308 1308 } 1309 - 1310 - list_del_init(&req->r_req_lru_item); /* can be on notarget */ 1311 1309 ceph_osdc_put_request(req); 1312 1310 } 1313 1311 ··· 2015 2017 err = __map_request(osdc, req, 2016 2018 force_resend || force_resend_writes); 2017 2019 dout("__map_request returned %d\n", err); 2018 - if (err == 0) 2019 - continue; /* no change and no osd was specified */ 2020 2020 if (err < 0) 2021 2021 continue; /* hrm! */ 2022 - if (req->r_osd == NULL) { 2023 - dout("tid %llu maps to no valid osd\n", req->r_tid); 2024 - needmap++; /* request a newer map */ 2025 - continue; 2026 - } 2022 + if (req->r_osd == NULL || err > 0) { 2023 + if (req->r_osd == NULL) { 2024 + dout("lingering %p tid %llu maps to no osd\n", 2025 + req, req->r_tid); 2026 + /* 2027 + * A homeless lingering request makes 2028 + * no sense, as it's job is to keep 2029 + * a particular OSD connection open. 2030 + * Request a newer map and kick the 2031 + * request, knowing that it won't be 2032 + * resent until we actually get a map 2033 + * that can tell us where to send it. 2034 + */ 2035 + needmap++; 2036 + } 2027 2037 2028 - dout("kicking lingering %p tid %llu osd%d\n", req, req->r_tid, 2029 - req->r_osd ? req->r_osd->o_osd : -1); 2030 - __register_request(osdc, req); 2031 - __unregister_linger_request(osdc, req); 2038 + dout("kicking lingering %p tid %llu osd%d\n", req, 2039 + req->r_tid, req->r_osd ? req->r_osd->o_osd : -1); 2040 + __register_request(osdc, req); 2041 + __unregister_linger_request(osdc, req); 2042 + } 2032 2043 } 2033 2044 reset_changed_osds(osdc); 2034 2045 mutex_unlock(&osdc->request_mutex);