From 9a38a65e1b37188c7f059f6dbc60b05092449ae9 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Tue, 6 May 2008 15:55:38 -0700 Subject: [PATCH] kclient: sync stop osdc timeout timer on shutdown --- src/kernel/osd_client.c | 12 +++++++++++- src/kernel/osd_client.h | 2 ++ src/kernel/super.c | 2 ++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/kernel/osd_client.c b/src/kernel/osd_client.c index 7fd074e42a18..c7c6bfaccf92 100644 --- a/src/kernel/osd_client.c +++ b/src/kernel/osd_client.c @@ -466,7 +466,7 @@ int do_request(struct ceph_osd_client *osdc, struct ceph_osd_request *req) unregister_request(osdc, req); if (rc < 0) { struct ceph_msg *msg; - dout(0, "tid %llu err %d, revoking %p pages\n", req->r_tid, + dout(0, "tid %llu err %d, revoking %p pages\n", req->r_tid, rc, req->r_request); /* * mark req aborted _before_ revoking pages, so that @@ -525,6 +525,16 @@ void ceph_osdc_init(struct ceph_osd_client *osdc, struct ceph_client *client) INIT_DELAYED_WORK(&osdc->timeout_work, handle_timeout); } +void ceph_osdc_stop(struct ceph_osd_client *osdc) +{ + cancel_delayed_work_sync(&osdc->timeout_work); + + if (osdc->osdmap) { + osdmap_destroy(osdc->osdmap); + osdc->osdmap = 0; + } +} + /* diff --git a/src/kernel/osd_client.h b/src/kernel/osd_client.h index fc106e66f723..9c0949069b26 100644 --- a/src/kernel/osd_client.h +++ b/src/kernel/osd_client.h @@ -52,6 +52,8 @@ struct ceph_osd_client { extern void ceph_osdc_init(struct ceph_osd_client *osdc, struct ceph_client *client); +extern void ceph_osdc_stop(struct ceph_osd_client *osdc); + extern void ceph_osdc_handle_reply(struct ceph_osd_client *osdc, struct ceph_msg *msg); extern void ceph_osdc_handle_map(struct ceph_osd_client *osdc, diff --git a/src/kernel/super.c b/src/kernel/super.c index 94217abf9949..cea4b8a6d92c 100644 --- a/src/kernel/super.c +++ b/src/kernel/super.c @@ -599,6 +599,8 @@ void ceph_destroy_client(struct ceph_client *cl) /* unmount */ /* ... */ + ceph_osdc_stop(&cl->osdc); + #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,25) if (cl->client_kobj) kobject_put(cl->client_kobj); -- 2.47.3