Loading fs/ceph/osd_client.c +18 −19 Original line number Diff line number Diff line Loading @@ -77,12 +77,12 @@ static void calc_layout(struct ceph_osd_client *osdc, /* * requests */ void ceph_osdc_put_request(struct ceph_osd_request *req) void ceph_osdc_release_request(struct kref *kref) { dout("osdc put_request %p %d -> %d\n", req, atomic_read(&req->r_ref), atomic_read(&req->r_ref)-1); BUG_ON(atomic_read(&req->r_ref) <= 0); if (atomic_dec_and_test(&req->r_ref)) { struct ceph_osd_request *req = container_of(kref, struct ceph_osd_request, r_kref); if (req->r_request) ceph_msg_put(req->r_request); if (req->r_reply) Loading @@ -96,7 +96,6 @@ void ceph_osdc_put_request(struct ceph_osd_request *req) else kfree(req); } } /* * build new request AND message, calculate layout, and adjust file Loading Loading @@ -149,7 +148,7 @@ struct ceph_osd_request *ceph_osdc_new_request(struct ceph_osd_client *osdc, req->r_osdc = osdc; req->r_mempool = use_mempool; atomic_set(&req->r_ref, 1); kref_init(&req->r_kref); init_completion(&req->r_completion); init_completion(&req->r_safe_completion); INIT_LIST_HEAD(&req->r_unsafe_item); Loading fs/ceph/osd_client.h +8 −3 Original line number Diff line number Diff line Loading @@ -2,6 +2,7 @@ #define _FS_CEPH_OSD_CLIENT_H #include <linux/completion.h> #include <linux/kref.h> #include <linux/mempool.h> #include <linux/rbtree.h> Loading Loading @@ -49,7 +50,7 @@ struct ceph_osd_request { int r_prepared_pages, r_got_reply; struct ceph_osd_client *r_osdc; atomic_t r_ref; struct kref r_kref; bool r_mempool; struct completion r_completion, r_safe_completion; ceph_osdc_callback_t r_callback, r_safe_callback; Loading Loading @@ -118,9 +119,13 @@ extern struct ceph_osd_request *ceph_osdc_new_request(struct ceph_osd_client *, static inline void ceph_osdc_get_request(struct ceph_osd_request *req) { atomic_inc(&req->r_ref); kref_get(&req->r_kref); } extern void ceph_osdc_release_request(struct kref *kref); static inline void ceph_osdc_put_request(struct ceph_osd_request *req) { kref_put(&req->r_kref, ceph_osdc_release_request); } extern void ceph_osdc_put_request(struct ceph_osd_request *req); extern int ceph_osdc_start_request(struct ceph_osd_client *osdc, struct ceph_osd_request *req, Loading Loading
fs/ceph/osd_client.c +18 −19 Original line number Diff line number Diff line Loading @@ -77,12 +77,12 @@ static void calc_layout(struct ceph_osd_client *osdc, /* * requests */ void ceph_osdc_put_request(struct ceph_osd_request *req) void ceph_osdc_release_request(struct kref *kref) { dout("osdc put_request %p %d -> %d\n", req, atomic_read(&req->r_ref), atomic_read(&req->r_ref)-1); BUG_ON(atomic_read(&req->r_ref) <= 0); if (atomic_dec_and_test(&req->r_ref)) { struct ceph_osd_request *req = container_of(kref, struct ceph_osd_request, r_kref); if (req->r_request) ceph_msg_put(req->r_request); if (req->r_reply) Loading @@ -96,7 +96,6 @@ void ceph_osdc_put_request(struct ceph_osd_request *req) else kfree(req); } } /* * build new request AND message, calculate layout, and adjust file Loading Loading @@ -149,7 +148,7 @@ struct ceph_osd_request *ceph_osdc_new_request(struct ceph_osd_client *osdc, req->r_osdc = osdc; req->r_mempool = use_mempool; atomic_set(&req->r_ref, 1); kref_init(&req->r_kref); init_completion(&req->r_completion); init_completion(&req->r_safe_completion); INIT_LIST_HEAD(&req->r_unsafe_item); Loading
fs/ceph/osd_client.h +8 −3 Original line number Diff line number Diff line Loading @@ -2,6 +2,7 @@ #define _FS_CEPH_OSD_CLIENT_H #include <linux/completion.h> #include <linux/kref.h> #include <linux/mempool.h> #include <linux/rbtree.h> Loading Loading @@ -49,7 +50,7 @@ struct ceph_osd_request { int r_prepared_pages, r_got_reply; struct ceph_osd_client *r_osdc; atomic_t r_ref; struct kref r_kref; bool r_mempool; struct completion r_completion, r_safe_completion; ceph_osdc_callback_t r_callback, r_safe_callback; Loading Loading @@ -118,9 +119,13 @@ extern struct ceph_osd_request *ceph_osdc_new_request(struct ceph_osd_client *, static inline void ceph_osdc_get_request(struct ceph_osd_request *req) { atomic_inc(&req->r_ref); kref_get(&req->r_kref); } extern void ceph_osdc_release_request(struct kref *kref); static inline void ceph_osdc_put_request(struct ceph_osd_request *req) { kref_put(&req->r_kref, ceph_osdc_release_request); } extern void ceph_osdc_put_request(struct ceph_osd_request *req); extern int ceph_osdc_start_request(struct ceph_osd_client *osdc, struct ceph_osd_request *req, Loading