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:
		
					parent
					
						
							
								8058fd4503
							
						
					
				
			
			
				commit
				
					
						ef4859d647
					
				
			
		
					 3 changed files with 27 additions and 41 deletions
				
			
		|  | @ -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, | ||||
|  |  | |||
|  | @ -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; | ||||
| 
 | ||||
|  |  | |||
|  | @ -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); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Alex Elder
				Alex Elder