libceph: define ceph_decode_pgid() only once
There are two basically identical definitions of __decode_pgid() in libceph, one in "net/ceph/osdmap.c" and the other in "net/ceph/osd_client.c". Get rid of both, and instead define a single inline version in "include/linux/ceph/osdmap.h". Signed-off-by: Alex Elder <elder@inktank.com> Reviewed-by: Josh Durgin <josh.durgin@inktank.com>
This commit is contained in:
Родитель
8058fd4503
Коммит
ef4859d647
|
@ -3,6 +3,7 @@
|
||||||
|
|
||||||
#include <linux/rbtree.h>
|
#include <linux/rbtree.h>
|
||||||
#include <linux/ceph/types.h>
|
#include <linux/ceph/types.h>
|
||||||
|
#include <linux/ceph/decode.h>
|
||||||
#include <linux/ceph/ceph_fs.h>
|
#include <linux/ceph/ceph_fs.h>
|
||||||
#include <linux/crush/crush.h>
|
#include <linux/crush/crush.h>
|
||||||
|
|
||||||
|
@ -119,6 +120,29 @@ static inline struct ceph_entity_addr *ceph_osd_addr(struct ceph_osdmap *map,
|
||||||
return &map->osd_addr[osd];
|
return &map->osd_addr[osd];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline int ceph_decode_pgid(void **p, void *end, struct ceph_pg *pgid)
|
||||||
|
{
|
||||||
|
__u8 version;
|
||||||
|
|
||||||
|
if (!ceph_has_room(p, end, 1 + 8 + 4 + 4)) {
|
||||||
|
pr_warning("incomplete pg encoding");
|
||||||
|
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
version = ceph_decode_8(p);
|
||||||
|
if (version > 1) {
|
||||||
|
pr_warning("do not understand pg encoding %d > 1",
|
||||||
|
(int)version);
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
pgid->pool = ceph_decode_64(p);
|
||||||
|
pgid->seed = ceph_decode_32(p);
|
||||||
|
*p += 4; /* skip deprecated preferred value */
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
extern struct ceph_osdmap *osdmap_decode(void **p, void *end);
|
extern struct ceph_osdmap *osdmap_decode(void **p, void *end);
|
||||||
extern struct ceph_osdmap *osdmap_apply_incremental(void **p, void *end,
|
extern struct ceph_osdmap *osdmap_apply_incremental(void **p, void *end,
|
||||||
struct ceph_osdmap *map,
|
struct ceph_osdmap *map,
|
||||||
|
|
|
@ -1268,26 +1268,6 @@ static void complete_request(struct ceph_osd_request *req)
|
||||||
complete_all(&req->r_safe_completion); /* fsync waiter */
|
complete_all(&req->r_safe_completion); /* fsync waiter */
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __decode_pgid(void **p, void *end, struct ceph_pg *pgid)
|
|
||||||
{
|
|
||||||
__u8 v;
|
|
||||||
|
|
||||||
ceph_decode_need(p, end, 1 + 8 + 4 + 4, bad);
|
|
||||||
v = ceph_decode_8(p);
|
|
||||||
if (v > 1) {
|
|
||||||
pr_warning("do not understand pg encoding %d > 1", v);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
pgid->pool = ceph_decode_64(p);
|
|
||||||
pgid->seed = ceph_decode_32(p);
|
|
||||||
*p += 4;
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
bad:
|
|
||||||
pr_warning("incomplete pg encoding");
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* handle osd op reply. either call the callback if it is specified,
|
* handle osd op reply. either call the callback if it is specified,
|
||||||
* or do the completion to wake up the waiting thread.
|
* or do the completion to wake up the waiting thread.
|
||||||
|
@ -1321,7 +1301,7 @@ static void handle_reply(struct ceph_osd_client *osdc, struct ceph_msg *msg,
|
||||||
ceph_decode_need(&p, end, object_len, bad);
|
ceph_decode_need(&p, end, object_len, bad);
|
||||||
p += object_len;
|
p += object_len;
|
||||||
|
|
||||||
err = __decode_pgid(&p, end, &pg);
|
err = ceph_decode_pgid(&p, end, &pg);
|
||||||
if (err)
|
if (err)
|
||||||
goto bad;
|
goto bad;
|
||||||
|
|
||||||
|
|
|
@ -654,24 +654,6 @@ static int osdmap_set_max_osd(struct ceph_osdmap *map, int max)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __decode_pgid(void **p, void *end, struct ceph_pg *pg)
|
|
||||||
{
|
|
||||||
u8 v;
|
|
||||||
|
|
||||||
ceph_decode_need(p, end, 1+8+4+4, bad);
|
|
||||||
v = ceph_decode_8(p);
|
|
||||||
if (v != 1)
|
|
||||||
goto bad;
|
|
||||||
pg->pool = ceph_decode_64(p);
|
|
||||||
pg->seed = ceph_decode_32(p);
|
|
||||||
*p += 4; /* skip preferred */
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
bad:
|
|
||||||
dout("error decoding pgid\n");
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* decode a full map.
|
* decode a full map.
|
||||||
*/
|
*/
|
||||||
|
@ -765,7 +747,7 @@ struct ceph_osdmap *osdmap_decode(void **p, void *end)
|
||||||
struct ceph_pg pgid;
|
struct ceph_pg pgid;
|
||||||
struct ceph_pg_mapping *pg;
|
struct ceph_pg_mapping *pg;
|
||||||
|
|
||||||
err = __decode_pgid(p, end, &pgid);
|
err = ceph_decode_pgid(p, end, &pgid);
|
||||||
if (err)
|
if (err)
|
||||||
goto bad;
|
goto bad;
|
||||||
ceph_decode_need(p, end, sizeof(u32), bad);
|
ceph_decode_need(p, end, sizeof(u32), bad);
|
||||||
|
@ -983,7 +965,7 @@ struct ceph_osdmap *osdmap_apply_incremental(void **p, void *end,
|
||||||
struct ceph_pg pgid;
|
struct ceph_pg pgid;
|
||||||
u32 pglen;
|
u32 pglen;
|
||||||
|
|
||||||
err = __decode_pgid(p, end, &pgid);
|
err = ceph_decode_pgid(p, end, &pgid);
|
||||||
if (err)
|
if (err)
|
||||||
goto bad;
|
goto bad;
|
||||||
ceph_decode_need(p, end, sizeof(u32), bad);
|
ceph_decode_need(p, end, sizeof(u32), bad);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче