libceph: factor out logic from ceph_osdc_start_request()
Factor out logic from ceph_osdc_start_request() into a new helper, __ceph_osdc_start_request(). ceph_osdc_start_request() now amounts to taking locks and calling __ceph_osdc_start_request(). Signed-off-by: Ilya Dryomov <ilya.dryomov@inktank.com> Reviewed-by: Sage Weil <sage@inktank.com>
This commit is contained in:
parent
c172ec5c8d
commit
0bbfdfe8d2
@ -1426,6 +1426,40 @@ static void __send_queued(struct ceph_osd_client *osdc)
|
|||||||
__send_request(osdc, req);
|
__send_request(osdc, req);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Caller should hold map_sem for read and request_mutex.
|
||||||
|
*/
|
||||||
|
static int __ceph_osdc_start_request(struct ceph_osd_client *osdc,
|
||||||
|
struct ceph_osd_request *req,
|
||||||
|
bool nofail)
|
||||||
|
{
|
||||||
|
int rc;
|
||||||
|
|
||||||
|
__register_request(osdc, req);
|
||||||
|
req->r_sent = 0;
|
||||||
|
req->r_got_reply = 0;
|
||||||
|
rc = __map_request(osdc, req, 0);
|
||||||
|
if (rc < 0) {
|
||||||
|
if (nofail) {
|
||||||
|
dout("osdc_start_request failed map, "
|
||||||
|
" will retry %lld\n", req->r_tid);
|
||||||
|
rc = 0;
|
||||||
|
} else {
|
||||||
|
__unregister_request(osdc, req);
|
||||||
|
}
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (req->r_osd == NULL) {
|
||||||
|
dout("send_request %p no up osds in pg\n", req);
|
||||||
|
ceph_monc_request_next_osdmap(&osdc->client->monc);
|
||||||
|
} else {
|
||||||
|
__send_queued(osdc);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Timeout callback, called every N seconds when 1 or more osd
|
* Timeout callback, called every N seconds when 1 or more osd
|
||||||
* requests has been active for more than N seconds. When this
|
* requests has been active for more than N seconds. When this
|
||||||
@ -2351,34 +2385,16 @@ int ceph_osdc_start_request(struct ceph_osd_client *osdc,
|
|||||||
struct ceph_osd_request *req,
|
struct ceph_osd_request *req,
|
||||||
bool nofail)
|
bool nofail)
|
||||||
{
|
{
|
||||||
int rc = 0;
|
int rc;
|
||||||
|
|
||||||
down_read(&osdc->map_sem);
|
down_read(&osdc->map_sem);
|
||||||
mutex_lock(&osdc->request_mutex);
|
mutex_lock(&osdc->request_mutex);
|
||||||
__register_request(osdc, req);
|
|
||||||
req->r_sent = 0;
|
rc = __ceph_osdc_start_request(osdc, req, nofail);
|
||||||
req->r_got_reply = 0;
|
|
||||||
rc = __map_request(osdc, req, 0);
|
|
||||||
if (rc < 0) {
|
|
||||||
if (nofail) {
|
|
||||||
dout("osdc_start_request failed map, "
|
|
||||||
" will retry %lld\n", req->r_tid);
|
|
||||||
rc = 0;
|
|
||||||
} else {
|
|
||||||
__unregister_request(osdc, req);
|
|
||||||
}
|
|
||||||
goto out_unlock;
|
|
||||||
}
|
|
||||||
if (req->r_osd == NULL) {
|
|
||||||
dout("send_request %p no up osds in pg\n", req);
|
|
||||||
ceph_monc_request_next_osdmap(&osdc->client->monc);
|
|
||||||
} else {
|
|
||||||
__send_queued(osdc);
|
|
||||||
}
|
|
||||||
rc = 0;
|
|
||||||
out_unlock:
|
|
||||||
mutex_unlock(&osdc->request_mutex);
|
mutex_unlock(&osdc->request_mutex);
|
||||||
up_read(&osdc->map_sem);
|
up_read(&osdc->map_sem);
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(ceph_osdc_start_request);
|
EXPORT_SYMBOL(ceph_osdc_start_request);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user