mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 02:32:09 -04:00
libceph: add function that reset client's entity addr
This function also re-open connections to OSD/MON, and re-send in-flight OSD requests after re-opening connections to OSD. Signed-off-by: "Yan, Zheng" <[email protected]> Reviewed-by: Jeff Layton <[email protected]> Signed-off-by: Ilya Dryomov <[email protected]>
This commit is contained in:
parent
e09580b343
commit
120a75ea9f
8 changed files with 43 additions and 0 deletions
|
|
@ -694,6 +694,14 @@ void ceph_destroy_client(struct ceph_client *client)
|
|||
}
|
||||
EXPORT_SYMBOL(ceph_destroy_client);
|
||||
|
||||
void ceph_reset_client_addr(struct ceph_client *client)
|
||||
{
|
||||
ceph_messenger_reset_nonce(&client->msgr);
|
||||
ceph_monc_reopen_session(&client->monc);
|
||||
ceph_osdc_reopen_osds(&client->osdc);
|
||||
}
|
||||
EXPORT_SYMBOL(ceph_reset_client_addr);
|
||||
|
||||
/*
|
||||
* true if we have the mon map (and have thus joined the cluster)
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -3031,6 +3031,12 @@ static void con_fault(struct ceph_connection *con)
|
|||
}
|
||||
|
||||
|
||||
void ceph_messenger_reset_nonce(struct ceph_messenger *msgr)
|
||||
{
|
||||
u32 nonce = le32_to_cpu(msgr->inst.addr.nonce) + 1000000;
|
||||
msgr->inst.addr.nonce = cpu_to_le32(nonce);
|
||||
encode_my_addr(msgr);
|
||||
}
|
||||
|
||||
/*
|
||||
* initialize a new messenger instance
|
||||
|
|
|
|||
|
|
@ -213,6 +213,13 @@ static void reopen_session(struct ceph_mon_client *monc)
|
|||
__open_session(monc);
|
||||
}
|
||||
|
||||
void ceph_monc_reopen_session(struct ceph_mon_client *monc)
|
||||
{
|
||||
mutex_lock(&monc->mutex);
|
||||
reopen_session(monc);
|
||||
mutex_unlock(&monc->mutex);
|
||||
}
|
||||
|
||||
static void un_backoff(struct ceph_mon_client *monc)
|
||||
{
|
||||
monc->hunt_mult /= 2; /* reduce by 50% */
|
||||
|
|
|
|||
|
|
@ -5086,6 +5086,24 @@ out_put_req:
|
|||
}
|
||||
EXPORT_SYMBOL(ceph_osdc_call);
|
||||
|
||||
/*
|
||||
* reset all osd connections
|
||||
*/
|
||||
void ceph_osdc_reopen_osds(struct ceph_osd_client *osdc)
|
||||
{
|
||||
struct rb_node *n;
|
||||
|
||||
down_write(&osdc->lock);
|
||||
for (n = rb_first(&osdc->osds); n; ) {
|
||||
struct ceph_osd *osd = rb_entry(n, struct ceph_osd, o_node);
|
||||
|
||||
n = rb_next(n);
|
||||
if (!reopen_osd(osd))
|
||||
kick_osd_requests(osd);
|
||||
}
|
||||
up_write(&osdc->lock);
|
||||
}
|
||||
|
||||
/*
|
||||
* init, shutdown
|
||||
*/
|
||||
|
|
|
|||
Loading…
Reference in a new issue