|
@@ -1276,9 +1276,9 @@ static bool target_should_be_paused(struct ceph_osd_client *osdc,
|
|
const struct ceph_osd_request_target *t,
|
|
const struct ceph_osd_request_target *t,
|
|
struct ceph_pg_pool_info *pi)
|
|
struct ceph_pg_pool_info *pi)
|
|
{
|
|
{
|
|
- bool pauserd = ceph_osdmap_flag(osdc->osdmap, CEPH_OSDMAP_PAUSERD);
|
|
|
|
- bool pausewr = ceph_osdmap_flag(osdc->osdmap, CEPH_OSDMAP_PAUSEWR) ||
|
|
|
|
- ceph_osdmap_flag(osdc->osdmap, CEPH_OSDMAP_FULL) ||
|
|
|
|
|
|
+ bool pauserd = ceph_osdmap_flag(osdc, CEPH_OSDMAP_PAUSERD);
|
|
|
|
+ bool pausewr = ceph_osdmap_flag(osdc, CEPH_OSDMAP_PAUSEWR) ||
|
|
|
|
+ ceph_osdmap_flag(osdc, CEPH_OSDMAP_FULL) ||
|
|
__pool_full(pi);
|
|
__pool_full(pi);
|
|
|
|
|
|
WARN_ON(pi->id != t->base_oloc.pool);
|
|
WARN_ON(pi->id != t->base_oloc.pool);
|
|
@@ -1303,8 +1303,7 @@ static enum calc_target_result calc_target(struct ceph_osd_client *osdc,
|
|
bool force_resend = false;
|
|
bool force_resend = false;
|
|
bool need_check_tiering = false;
|
|
bool need_check_tiering = false;
|
|
bool need_resend = false;
|
|
bool need_resend = false;
|
|
- bool sort_bitwise = ceph_osdmap_flag(osdc->osdmap,
|
|
|
|
- CEPH_OSDMAP_SORTBITWISE);
|
|
|
|
|
|
+ bool sort_bitwise = ceph_osdmap_flag(osdc, CEPH_OSDMAP_SORTBITWISE);
|
|
enum calc_target_result ct_res;
|
|
enum calc_target_result ct_res;
|
|
int ret;
|
|
int ret;
|
|
|
|
|
|
@@ -1540,9 +1539,9 @@ static void encode_request(struct ceph_osd_request *req, struct ceph_msg *msg)
|
|
*/
|
|
*/
|
|
msg->hdr.data_off = cpu_to_le16(req->r_data_offset);
|
|
msg->hdr.data_off = cpu_to_le16(req->r_data_offset);
|
|
|
|
|
|
- dout("%s req %p oid %*pE oid_len %d front %zu data %u\n", __func__,
|
|
|
|
- req, req->r_t.target_oid.name_len, req->r_t.target_oid.name,
|
|
|
|
- req->r_t.target_oid.name_len, msg->front.iov_len, data_len);
|
|
|
|
|
|
+ dout("%s req %p oid %s oid_len %d front %zu data %u\n", __func__,
|
|
|
|
+ req, req->r_t.target_oid.name, req->r_t.target_oid.name_len,
|
|
|
|
+ msg->front.iov_len, data_len);
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
/*
|
|
@@ -1590,9 +1589,9 @@ static void maybe_request_map(struct ceph_osd_client *osdc)
|
|
verify_osdc_locked(osdc);
|
|
verify_osdc_locked(osdc);
|
|
WARN_ON(!osdc->osdmap->epoch);
|
|
WARN_ON(!osdc->osdmap->epoch);
|
|
|
|
|
|
- if (ceph_osdmap_flag(osdc->osdmap, CEPH_OSDMAP_FULL) ||
|
|
|
|
- ceph_osdmap_flag(osdc->osdmap, CEPH_OSDMAP_PAUSERD) ||
|
|
|
|
- ceph_osdmap_flag(osdc->osdmap, CEPH_OSDMAP_PAUSEWR)) {
|
|
|
|
|
|
+ if (ceph_osdmap_flag(osdc, CEPH_OSDMAP_FULL) ||
|
|
|
|
+ ceph_osdmap_flag(osdc, CEPH_OSDMAP_PAUSERD) ||
|
|
|
|
+ ceph_osdmap_flag(osdc, CEPH_OSDMAP_PAUSEWR)) {
|
|
dout("%s osdc %p continuous\n", __func__, osdc);
|
|
dout("%s osdc %p continuous\n", __func__, osdc);
|
|
continuous = true;
|
|
continuous = true;
|
|
} else {
|
|
} else {
|
|
@@ -1629,19 +1628,19 @@ again:
|
|
}
|
|
}
|
|
|
|
|
|
if ((req->r_flags & CEPH_OSD_FLAG_WRITE) &&
|
|
if ((req->r_flags & CEPH_OSD_FLAG_WRITE) &&
|
|
- ceph_osdmap_flag(osdc->osdmap, CEPH_OSDMAP_PAUSEWR)) {
|
|
|
|
|
|
+ ceph_osdmap_flag(osdc, CEPH_OSDMAP_PAUSEWR)) {
|
|
dout("req %p pausewr\n", req);
|
|
dout("req %p pausewr\n", req);
|
|
req->r_t.paused = true;
|
|
req->r_t.paused = true;
|
|
maybe_request_map(osdc);
|
|
maybe_request_map(osdc);
|
|
} else if ((req->r_flags & CEPH_OSD_FLAG_READ) &&
|
|
} else if ((req->r_flags & CEPH_OSD_FLAG_READ) &&
|
|
- ceph_osdmap_flag(osdc->osdmap, CEPH_OSDMAP_PAUSERD)) {
|
|
|
|
|
|
+ ceph_osdmap_flag(osdc, CEPH_OSDMAP_PAUSERD)) {
|
|
dout("req %p pauserd\n", req);
|
|
dout("req %p pauserd\n", req);
|
|
req->r_t.paused = true;
|
|
req->r_t.paused = true;
|
|
maybe_request_map(osdc);
|
|
maybe_request_map(osdc);
|
|
} else if ((req->r_flags & CEPH_OSD_FLAG_WRITE) &&
|
|
} else if ((req->r_flags & CEPH_OSD_FLAG_WRITE) &&
|
|
!(req->r_flags & (CEPH_OSD_FLAG_FULL_TRY |
|
|
!(req->r_flags & (CEPH_OSD_FLAG_FULL_TRY |
|
|
CEPH_OSD_FLAG_FULL_FORCE)) &&
|
|
CEPH_OSD_FLAG_FULL_FORCE)) &&
|
|
- (ceph_osdmap_flag(osdc->osdmap, CEPH_OSDMAP_FULL) ||
|
|
|
|
|
|
+ (ceph_osdmap_flag(osdc, CEPH_OSDMAP_FULL) ||
|
|
pool_full(osdc, req->r_t.base_oloc.pool))) {
|
|
pool_full(osdc, req->r_t.base_oloc.pool))) {
|
|
dout("req %p full/pool_full\n", req);
|
|
dout("req %p full/pool_full\n", req);
|
|
pr_warn_ratelimited("FULL or reached pool quota\n");
|
|
pr_warn_ratelimited("FULL or reached pool quota\n");
|
|
@@ -2280,7 +2279,7 @@ static void send_linger_ping(struct ceph_osd_linger_request *lreq)
|
|
struct ceph_osd_request *req = lreq->ping_req;
|
|
struct ceph_osd_request *req = lreq->ping_req;
|
|
struct ceph_osd_req_op *op = &req->r_ops[0];
|
|
struct ceph_osd_req_op *op = &req->r_ops[0];
|
|
|
|
|
|
- if (ceph_osdmap_flag(osdc->osdmap, CEPH_OSDMAP_PAUSERD)) {
|
|
|
|
|
|
+ if (ceph_osdmap_flag(osdc, CEPH_OSDMAP_PAUSERD)) {
|
|
dout("%s PAUSERD\n", __func__);
|
|
dout("%s PAUSERD\n", __func__);
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
@@ -2893,6 +2892,9 @@ static void handle_reply(struct ceph_osd *osd, struct ceph_msg *msg)
|
|
dout("req %p tid %llu cb\n", req, req->r_tid);
|
|
dout("req %p tid %llu cb\n", req, req->r_tid);
|
|
__complete_request(req);
|
|
__complete_request(req);
|
|
}
|
|
}
|
|
|
|
+ if (m.flags & CEPH_OSD_FLAG_ONDISK)
|
|
|
|
+ complete_all(&req->r_safe_completion);
|
|
|
|
+ ceph_osdc_put_request(req);
|
|
} else {
|
|
} else {
|
|
if (req->r_unsafe_callback) {
|
|
if (req->r_unsafe_callback) {
|
|
dout("req %p tid %llu unsafe-cb\n", req, req->r_tid);
|
|
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)
|
|
WARN_ON(1);
|
|
WARN_ON(1);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- if (m.flags & CEPH_OSD_FLAG_ONDISK)
|
|
|
|
- complete_all(&req->r_safe_completion);
|
|
|
|
|
|
|
|
- ceph_osdc_put_request(req);
|
|
|
|
return;
|
|
return;
|
|
|
|
|
|
fail_request:
|
|
fail_request:
|
|
@@ -3050,7 +3049,7 @@ static int handle_one_map(struct ceph_osd_client *osdc,
|
|
bool skipped_map = false;
|
|
bool skipped_map = false;
|
|
bool was_full;
|
|
bool was_full;
|
|
|
|
|
|
- was_full = ceph_osdmap_flag(osdc->osdmap, CEPH_OSDMAP_FULL);
|
|
|
|
|
|
+ was_full = ceph_osdmap_flag(osdc, CEPH_OSDMAP_FULL);
|
|
set_pool_was_full(osdc);
|
|
set_pool_was_full(osdc);
|
|
|
|
|
|
if (incremental)
|
|
if (incremental)
|
|
@@ -3088,7 +3087,7 @@ static int handle_one_map(struct ceph_osd_client *osdc,
|
|
osdc->osdmap = newmap;
|
|
osdc->osdmap = newmap;
|
|
}
|
|
}
|
|
|
|
|
|
- was_full &= !ceph_osdmap_flag(osdc->osdmap, CEPH_OSDMAP_FULL);
|
|
|
|
|
|
+ was_full &= !ceph_osdmap_flag(osdc, CEPH_OSDMAP_FULL);
|
|
scan_requests(&osdc->homeless_osd, skipped_map, was_full, true,
|
|
scan_requests(&osdc->homeless_osd, skipped_map, was_full, true,
|
|
need_resend, need_resend_linger);
|
|
need_resend, need_resend_linger);
|
|
|
|
|
|
@@ -3174,9 +3173,9 @@ void ceph_osdc_handle_map(struct ceph_osd_client *osdc, struct ceph_msg *msg)
|
|
if (ceph_check_fsid(osdc->client, &fsid) < 0)
|
|
if (ceph_check_fsid(osdc->client, &fsid) < 0)
|
|
goto bad;
|
|
goto bad;
|
|
|
|
|
|
- was_pauserd = ceph_osdmap_flag(osdc->osdmap, CEPH_OSDMAP_PAUSERD);
|
|
|
|
- was_pausewr = ceph_osdmap_flag(osdc->osdmap, CEPH_OSDMAP_PAUSEWR) ||
|
|
|
|
- ceph_osdmap_flag(osdc->osdmap, CEPH_OSDMAP_FULL) ||
|
|
|
|
|
|
+ was_pauserd = ceph_osdmap_flag(osdc, CEPH_OSDMAP_PAUSERD);
|
|
|
|
+ was_pausewr = ceph_osdmap_flag(osdc, CEPH_OSDMAP_PAUSEWR) ||
|
|
|
|
+ ceph_osdmap_flag(osdc, CEPH_OSDMAP_FULL) ||
|
|
have_pool_full(osdc);
|
|
have_pool_full(osdc);
|
|
|
|
|
|
/* incremental maps */
|
|
/* incremental maps */
|
|
@@ -3238,9 +3237,9 @@ done:
|
|
* we find out when we are no longer full and stop returning
|
|
* we find out when we are no longer full and stop returning
|
|
* ENOSPC.
|
|
* ENOSPC.
|
|
*/
|
|
*/
|
|
- pauserd = ceph_osdmap_flag(osdc->osdmap, CEPH_OSDMAP_PAUSERD);
|
|
|
|
- pausewr = ceph_osdmap_flag(osdc->osdmap, CEPH_OSDMAP_PAUSEWR) ||
|
|
|
|
- ceph_osdmap_flag(osdc->osdmap, CEPH_OSDMAP_FULL) ||
|
|
|
|
|
|
+ pauserd = ceph_osdmap_flag(osdc, CEPH_OSDMAP_PAUSERD);
|
|
|
|
+ pausewr = ceph_osdmap_flag(osdc, CEPH_OSDMAP_PAUSEWR) ||
|
|
|
|
+ ceph_osdmap_flag(osdc, CEPH_OSDMAP_FULL) ||
|
|
have_pool_full(osdc);
|
|
have_pool_full(osdc);
|
|
if (was_pauserd || was_pausewr || pauserd || pausewr)
|
|
if (was_pauserd || was_pausewr || pauserd || pausewr)
|
|
maybe_request_map(osdc);
|
|
maybe_request_map(osdc);
|