diff options
Diffstat (limited to 'net/ceph/osd_client.c')
| -rw-r--r-- | net/ceph/osd_client.c | 51 |
1 files changed, 25 insertions, 26 deletions
diff --git a/net/ceph/osd_client.c b/net/ceph/osd_client.c index 0160d7d09a1e..89469592076c 100644 --- a/net/ceph/osd_client.c +++ b/net/ceph/osd_client.c | |||
| @@ -1276,9 +1276,9 @@ static bool target_should_be_paused(struct ceph_osd_client *osdc, | |||
| 1276 | const struct ceph_osd_request_target *t, | 1276 | const struct ceph_osd_request_target *t, |
| 1277 | struct ceph_pg_pool_info *pi) | 1277 | struct ceph_pg_pool_info *pi) |
| 1278 | { | 1278 | { |
| 1279 | bool pauserd = ceph_osdmap_flag(osdc->osdmap, CEPH_OSDMAP_PAUSERD); | 1279 | bool pauserd = ceph_osdmap_flag(osdc, CEPH_OSDMAP_PAUSERD); |
| 1280 | bool pausewr = ceph_osdmap_flag(osdc->osdmap, CEPH_OSDMAP_PAUSEWR) || | 1280 | bool pausewr = ceph_osdmap_flag(osdc, CEPH_OSDMAP_PAUSEWR) || |
| 1281 | ceph_osdmap_flag(osdc->osdmap, CEPH_OSDMAP_FULL) || | 1281 | ceph_osdmap_flag(osdc, CEPH_OSDMAP_FULL) || |
| 1282 | __pool_full(pi); | 1282 | __pool_full(pi); |
| 1283 | 1283 | ||
| 1284 | WARN_ON(pi->id != t->base_oloc.pool); | 1284 | WARN_ON(pi->id != t->base_oloc.pool); |
| @@ -1303,8 +1303,7 @@ static enum calc_target_result calc_target(struct ceph_osd_client *osdc, | |||
| 1303 | bool force_resend = false; | 1303 | bool force_resend = false; |
| 1304 | bool need_check_tiering = false; | 1304 | bool need_check_tiering = false; |
| 1305 | bool need_resend = false; | 1305 | bool need_resend = false; |
| 1306 | bool sort_bitwise = ceph_osdmap_flag(osdc->osdmap, | 1306 | bool sort_bitwise = ceph_osdmap_flag(osdc, CEPH_OSDMAP_SORTBITWISE); |
| 1307 | CEPH_OSDMAP_SORTBITWISE); | ||
| 1308 | enum calc_target_result ct_res; | 1307 | enum calc_target_result ct_res; |
| 1309 | int ret; | 1308 | int ret; |
| 1310 | 1309 | ||
| @@ -1540,9 +1539,9 @@ static void encode_request(struct ceph_osd_request *req, struct ceph_msg *msg) | |||
| 1540 | */ | 1539 | */ |
| 1541 | msg->hdr.data_off = cpu_to_le16(req->r_data_offset); | 1540 | msg->hdr.data_off = cpu_to_le16(req->r_data_offset); |
| 1542 | 1541 | ||
| 1543 | dout("%s req %p oid %*pE oid_len %d front %zu data %u\n", __func__, | 1542 | dout("%s req %p oid %s oid_len %d front %zu data %u\n", __func__, |
| 1544 | req, req->r_t.target_oid.name_len, req->r_t.target_oid.name, | 1543 | req, req->r_t.target_oid.name, req->r_t.target_oid.name_len, |
| 1545 | req->r_t.target_oid.name_len, msg->front.iov_len, data_len); | 1544 | msg->front.iov_len, data_len); |
| 1546 | } | 1545 | } |
| 1547 | 1546 | ||
| 1548 | /* | 1547 | /* |
| @@ -1590,9 +1589,9 @@ static void maybe_request_map(struct ceph_osd_client *osdc) | |||
| 1590 | verify_osdc_locked(osdc); | 1589 | verify_osdc_locked(osdc); |
| 1591 | WARN_ON(!osdc->osdmap->epoch); | 1590 | WARN_ON(!osdc->osdmap->epoch); |
| 1592 | 1591 | ||
| 1593 | if (ceph_osdmap_flag(osdc->osdmap, CEPH_OSDMAP_FULL) || | 1592 | if (ceph_osdmap_flag(osdc, CEPH_OSDMAP_FULL) || |
| 1594 | ceph_osdmap_flag(osdc->osdmap, CEPH_OSDMAP_PAUSERD) || | 1593 | ceph_osdmap_flag(osdc, CEPH_OSDMAP_PAUSERD) || |
| 1595 | ceph_osdmap_flag(osdc->osdmap, CEPH_OSDMAP_PAUSEWR)) { | 1594 | ceph_osdmap_flag(osdc, CEPH_OSDMAP_PAUSEWR)) { |
| 1596 | dout("%s osdc %p continuous\n", __func__, osdc); | 1595 | dout("%s osdc %p continuous\n", __func__, osdc); |
| 1597 | continuous = true; | 1596 | continuous = true; |
| 1598 | } else { | 1597 | } else { |
| @@ -1629,19 +1628,19 @@ again: | |||
| 1629 | } | 1628 | } |
| 1630 | 1629 | ||
| 1631 | if ((req->r_flags & CEPH_OSD_FLAG_WRITE) && | 1630 | if ((req->r_flags & CEPH_OSD_FLAG_WRITE) && |
| 1632 | ceph_osdmap_flag(osdc->osdmap, CEPH_OSDMAP_PAUSEWR)) { | 1631 | ceph_osdmap_flag(osdc, CEPH_OSDMAP_PAUSEWR)) { |
| 1633 | dout("req %p pausewr\n", req); | 1632 | dout("req %p pausewr\n", req); |
| 1634 | req->r_t.paused = true; | 1633 | req->r_t.paused = true; |
| 1635 | maybe_request_map(osdc); | 1634 | maybe_request_map(osdc); |
| 1636 | } else if ((req->r_flags & CEPH_OSD_FLAG_READ) && | 1635 | } else if ((req->r_flags & CEPH_OSD_FLAG_READ) && |
| 1637 | ceph_osdmap_flag(osdc->osdmap, CEPH_OSDMAP_PAUSERD)) { | 1636 | ceph_osdmap_flag(osdc, CEPH_OSDMAP_PAUSERD)) { |
| 1638 | dout("req %p pauserd\n", req); | 1637 | dout("req %p pauserd\n", req); |
| 1639 | req->r_t.paused = true; | 1638 | req->r_t.paused = true; |
| 1640 | maybe_request_map(osdc); | 1639 | maybe_request_map(osdc); |
| 1641 | } else if ((req->r_flags & CEPH_OSD_FLAG_WRITE) && | 1640 | } else if ((req->r_flags & CEPH_OSD_FLAG_WRITE) && |
| 1642 | !(req->r_flags & (CEPH_OSD_FLAG_FULL_TRY | | 1641 | !(req->r_flags & (CEPH_OSD_FLAG_FULL_TRY | |
| 1643 | CEPH_OSD_FLAG_FULL_FORCE)) && | 1642 | CEPH_OSD_FLAG_FULL_FORCE)) && |
| 1644 | (ceph_osdmap_flag(osdc->osdmap, CEPH_OSDMAP_FULL) || | 1643 | (ceph_osdmap_flag(osdc, CEPH_OSDMAP_FULL) || |
| 1645 | pool_full(osdc, req->r_t.base_oloc.pool))) { | 1644 | pool_full(osdc, req->r_t.base_oloc.pool))) { |
| 1646 | dout("req %p full/pool_full\n", req); | 1645 | dout("req %p full/pool_full\n", req); |
| 1647 | pr_warn_ratelimited("FULL or reached pool quota\n"); | 1646 | pr_warn_ratelimited("FULL or reached pool quota\n"); |
| @@ -2280,7 +2279,7 @@ static void send_linger_ping(struct ceph_osd_linger_request *lreq) | |||
| 2280 | struct ceph_osd_request *req = lreq->ping_req; | 2279 | struct ceph_osd_request *req = lreq->ping_req; |
| 2281 | struct ceph_osd_req_op *op = &req->r_ops[0]; | 2280 | struct ceph_osd_req_op *op = &req->r_ops[0]; |
| 2282 | 2281 | ||
| 2283 | if (ceph_osdmap_flag(osdc->osdmap, CEPH_OSDMAP_PAUSERD)) { | 2282 | if (ceph_osdmap_flag(osdc, CEPH_OSDMAP_PAUSERD)) { |
| 2284 | dout("%s PAUSERD\n", __func__); | 2283 | dout("%s PAUSERD\n", __func__); |
| 2285 | return; | 2284 | return; |
| 2286 | } | 2285 | } |
| @@ -2893,6 +2892,9 @@ static void handle_reply(struct ceph_osd *osd, struct ceph_msg *msg) | |||
| 2893 | dout("req %p tid %llu cb\n", req, req->r_tid); | 2892 | dout("req %p tid %llu cb\n", req, req->r_tid); |
| 2894 | __complete_request(req); | 2893 | __complete_request(req); |
| 2895 | } | 2894 | } |
| 2895 | if (m.flags & CEPH_OSD_FLAG_ONDISK) | ||
| 2896 | complete_all(&req->r_safe_completion); | ||
| 2897 | ceph_osdc_put_request(req); | ||
| 2896 | } else { | 2898 | } else { |
| 2897 | if (req->r_unsafe_callback) { | 2899 | if (req->r_unsafe_callback) { |
| 2898 | dout("req %p tid %llu unsafe-cb\n", req, req->r_tid); | 2900 | dout("req %p tid %llu unsafe-cb\n", req, req->r_tid); |
| @@ -2901,10 +2903,7 @@ static void handle_reply(struct ceph_osd *osd, struct ceph_msg *msg) | |||
| 2901 | WARN_ON(1); | 2903 | WARN_ON(1); |
| 2902 | } | 2904 | } |
| 2903 | } | 2905 | } |
| 2904 | if (m.flags & CEPH_OSD_FLAG_ONDISK) | ||
| 2905 | complete_all(&req->r_safe_completion); | ||
| 2906 | 2906 | ||
| 2907 | ceph_osdc_put_request(req); | ||
| 2908 | return; | 2907 | return; |
| 2909 | 2908 | ||
| 2910 | fail_request: | 2909 | fail_request: |
| @@ -3050,7 +3049,7 @@ static int handle_one_map(struct ceph_osd_client *osdc, | |||
| 3050 | bool skipped_map = false; | 3049 | bool skipped_map = false; |
| 3051 | bool was_full; | 3050 | bool was_full; |
| 3052 | 3051 | ||
| 3053 | was_full = ceph_osdmap_flag(osdc->osdmap, CEPH_OSDMAP_FULL); | 3052 | was_full = ceph_osdmap_flag(osdc, CEPH_OSDMAP_FULL); |
| 3054 | set_pool_was_full(osdc); | 3053 | set_pool_was_full(osdc); |
| 3055 | 3054 | ||
| 3056 | if (incremental) | 3055 | if (incremental) |
| @@ -3088,7 +3087,7 @@ static int handle_one_map(struct ceph_osd_client *osdc, | |||
| 3088 | osdc->osdmap = newmap; | 3087 | osdc->osdmap = newmap; |
| 3089 | } | 3088 | } |
| 3090 | 3089 | ||
| 3091 | was_full &= !ceph_osdmap_flag(osdc->osdmap, CEPH_OSDMAP_FULL); | 3090 | was_full &= !ceph_osdmap_flag(osdc, CEPH_OSDMAP_FULL); |
| 3092 | scan_requests(&osdc->homeless_osd, skipped_map, was_full, true, | 3091 | scan_requests(&osdc->homeless_osd, skipped_map, was_full, true, |
| 3093 | need_resend, need_resend_linger); | 3092 | need_resend, need_resend_linger); |
| 3094 | 3093 | ||
| @@ -3174,9 +3173,9 @@ void ceph_osdc_handle_map(struct ceph_osd_client *osdc, struct ceph_msg *msg) | |||
| 3174 | if (ceph_check_fsid(osdc->client, &fsid) < 0) | 3173 | if (ceph_check_fsid(osdc->client, &fsid) < 0) |
| 3175 | goto bad; | 3174 | goto bad; |
| 3176 | 3175 | ||
| 3177 | was_pauserd = ceph_osdmap_flag(osdc->osdmap, CEPH_OSDMAP_PAUSERD); | 3176 | was_pauserd = ceph_osdmap_flag(osdc, CEPH_OSDMAP_PAUSERD); |
| 3178 | was_pausewr = ceph_osdmap_flag(osdc->osdmap, CEPH_OSDMAP_PAUSEWR) || | 3177 | was_pausewr = ceph_osdmap_flag(osdc, CEPH_OSDMAP_PAUSEWR) || |
| 3179 | ceph_osdmap_flag(osdc->osdmap, CEPH_OSDMAP_FULL) || | 3178 | ceph_osdmap_flag(osdc, CEPH_OSDMAP_FULL) || |
| 3180 | have_pool_full(osdc); | 3179 | have_pool_full(osdc); |
| 3181 | 3180 | ||
| 3182 | /* incremental maps */ | 3181 | /* incremental maps */ |
| @@ -3238,9 +3237,9 @@ done: | |||
| 3238 | * we find out when we are no longer full and stop returning | 3237 | * we find out when we are no longer full and stop returning |
| 3239 | * ENOSPC. | 3238 | * ENOSPC. |
| 3240 | */ | 3239 | */ |
| 3241 | pauserd = ceph_osdmap_flag(osdc->osdmap, CEPH_OSDMAP_PAUSERD); | 3240 | pauserd = ceph_osdmap_flag(osdc, CEPH_OSDMAP_PAUSERD); |
| 3242 | pausewr = ceph_osdmap_flag(osdc->osdmap, CEPH_OSDMAP_PAUSEWR) || | 3241 | pausewr = ceph_osdmap_flag(osdc, CEPH_OSDMAP_PAUSEWR) || |
| 3243 | ceph_osdmap_flag(osdc->osdmap, CEPH_OSDMAP_FULL) || | 3242 | ceph_osdmap_flag(osdc, CEPH_OSDMAP_FULL) || |
| 3244 | have_pool_full(osdc); | 3243 | have_pool_full(osdc); |
| 3245 | if (was_pauserd || was_pausewr || pauserd || pausewr) | 3244 | if (was_pauserd || was_pausewr || pauserd || pausewr) |
| 3246 | maybe_request_map(osdc); | 3245 | maybe_request_map(osdc); |
