Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ef4859d6 authored by Alex Elder's avatar Alex Elder Committed by Sage Weil
Browse files

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: default avatarAlex Elder <elder@inktank.com>
Reviewed-by: default avatarJosh Durgin <josh.durgin@inktank.com>
parent 8058fd45
Loading
Loading
Loading
Loading
+24 −0
Original line number Diff line number Diff line
@@ -3,6 +3,7 @@

#include <linux/rbtree.h>
#include <linux/ceph/types.h>
#include <linux/ceph/decode.h>
#include <linux/ceph/ceph_fs.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];
}

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_apply_incremental(void **p, void *end,
					    struct ceph_osdmap *map,
+1 −21
Original line number Diff line number Diff line
@@ -1268,26 +1268,6 @@ static void complete_request(struct ceph_osd_request *req)
	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,
 * 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);
	p += object_len;

	err = __decode_pgid(&p, end, &pg);
	err = ceph_decode_pgid(&p, end, &pg);
	if (err)
		goto bad;

+2 −20
Original line number Diff line number Diff line
@@ -654,24 +654,6 @@ static int osdmap_set_max_osd(struct ceph_osdmap *map, int max)
	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.
 */
@@ -765,7 +747,7 @@ struct ceph_osdmap *osdmap_decode(void **p, void *end)
		struct ceph_pg pgid;
		struct ceph_pg_mapping *pg;

		err = __decode_pgid(p, end, &pgid);
		err = ceph_decode_pgid(p, end, &pgid);
		if (err)
			goto 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;
		u32 pglen;

		err = __decode_pgid(p, end, &pgid);
		err = ceph_decode_pgid(p, end, &pgid);
		if (err)
			goto bad;
		ceph_decode_need(p, end, sizeof(u32), bad);