diff options
author | Ilya Dryomov <idryomov@gmail.com> | 2016-04-28 16:07:25 +0200 |
---|---|---|
committer | Ilya Dryomov <idryomov@gmail.com> | 2016-05-26 00:36:29 +0200 |
commit | e5253a7bde13788d9dc75f42eb47ea119af5609f (patch) | |
tree | e5b05eeccbaf93c644cd1bbbb26bb0a9033958e8 /net/ceph/osd_client.c | |
parent | libceph: schedule tick from ceph_osdc_init() (diff) | |
download | linux-e5253a7bde13788d9dc75f42eb47ea119af5609f.tar.xz linux-e5253a7bde13788d9dc75f42eb47ea119af5609f.zip |
libceph: allocate dummy osdmap in ceph_osdc_init()
This leads to a simpler osdmap handling code, particularly when dealing
with pi->was_full, which is introduced in a later commit.
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
Diffstat (limited to 'net/ceph/osd_client.c')
-rw-r--r-- | net/ceph/osd_client.c | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/net/ceph/osd_client.c b/net/ceph/osd_client.c index 41dabce9c9c3..9c35fd84a410 100644 --- a/net/ceph/osd_client.c +++ b/net/ceph/osd_client.c @@ -2255,7 +2255,7 @@ void ceph_osdc_handle_map(struct ceph_osd_client *osdc, struct ceph_msg *msg) struct ceph_fsid fsid; bool was_full; - dout("handle_map have %u\n", osdc->osdmap ? osdc->osdmap->epoch : 0); + dout("handle_map have %u\n", osdc->osdmap->epoch); p = msg->front.iov_base; end = p + msg->front.iov_len; @@ -2278,7 +2278,7 @@ void ceph_osdc_handle_map(struct ceph_osd_client *osdc, struct ceph_msg *msg) maplen = ceph_decode_32(&p); ceph_decode_need(&p, end, maplen, bad); next = p + maplen; - if (osdc->osdmap && osdc->osdmap->epoch+1 == epoch) { + if (osdc->osdmap->epoch+1 == epoch) { dout("applying incremental map %u len %d\n", epoch, maplen); newmap = osdmap_apply_incremental(&p, next, @@ -2317,7 +2317,7 @@ void ceph_osdc_handle_map(struct ceph_osd_client *osdc, struct ceph_msg *msg) if (nr_maps > 1) { dout("skipping non-latest full map %u len %d\n", epoch, maplen); - } else if (osdc->osdmap && osdc->osdmap->epoch >= epoch) { + } else if (osdc->osdmap->epoch >= epoch) { dout("skipping full map %u len %d, " "older than our %u\n", epoch, maplen, osdc->osdmap->epoch); @@ -2347,8 +2347,6 @@ void ceph_osdc_handle_map(struct ceph_osd_client *osdc, struct ceph_msg *msg) nr_maps--; } - if (!osdc->osdmap) - goto bad; done: downgrade_write(&osdc->map_sem); ceph_monc_got_map(&osdc->client->monc, CEPH_SUB_OSDMAP, @@ -2690,7 +2688,6 @@ int ceph_osdc_init(struct ceph_osd_client *osdc, struct ceph_client *client) dout("init\n"); osdc->client = client; - osdc->osdmap = NULL; init_rwsem(&osdc->map_sem); mutex_init(&osdc->request_mutex); osdc->last_tid = 0; @@ -2709,10 +2706,14 @@ int ceph_osdc_init(struct ceph_osd_client *osdc, struct ceph_client *client) osdc->event_count = 0; err = -ENOMEM; + osdc->osdmap = ceph_osdmap_alloc(); + if (!osdc->osdmap) + goto out; + osdc->req_mempool = mempool_create_slab_pool(10, ceph_osd_request_cache); if (!osdc->req_mempool) - goto out; + goto out_map; err = ceph_msgpool_init(&osdc->msgpool_op, CEPH_MSG_OSD_OP, PAGE_SIZE, 10, true, "osd_op"); @@ -2741,6 +2742,8 @@ out_msgpool: ceph_msgpool_destroy(&osdc->msgpool_op); out_mempool: mempool_destroy(osdc->req_mempool); +out_map: + ceph_osdmap_destroy(osdc->osdmap); out: return err; } @@ -2760,10 +2763,7 @@ void ceph_osdc_stop(struct ceph_osd_client *osdc) } mutex_unlock(&osdc->request_mutex); - if (osdc->osdmap) { - ceph_osdmap_destroy(osdc->osdmap); - osdc->osdmap = NULL; - } + ceph_osdmap_destroy(osdc->osdmap); mempool_destroy(osdc->req_mempool); ceph_msgpool_destroy(&osdc->msgpool_op); ceph_msgpool_destroy(&osdc->msgpool_op_reply); |