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

Commit 224736d9 authored by Stratos Psomadakis's avatar Stratos Psomadakis Committed by Sage Weil
Browse files

libceph: Allocate larger oid buffer in request msgs



ceph_osd_request struct allocates a 40-byte buffer for object names.
RBD image names can be up to 96 chars long (100 with the .rbd suffix),
which results in the object name for the image being truncated, and a
subsequent map failure.

Increase the oid buffer in request messages, in order to avoid the
truncation.

Signed-off-by: default avatarStratos Psomadakis <psomas@grnet.gr>
Signed-off-by: default avatarSage Weil <sage@newdream.net>
parent 774ac21d
Loading
Loading
Loading
Loading
+7 −1
Original line number Original line Diff line number Diff line
@@ -10,6 +10,12 @@
#include "osdmap.h"
#include "osdmap.h"
#include "messenger.h"
#include "messenger.h"


/* 
 * Maximum object name size 
 * (must be at least as big as RBD_MAX_MD_NAME_LEN -- currently 100) 
 */
#define MAX_OBJ_NAME_SIZE 100

struct ceph_msg;
struct ceph_msg;
struct ceph_snap_context;
struct ceph_snap_context;
struct ceph_osd_request;
struct ceph_osd_request;
@@ -75,7 +81,7 @@ struct ceph_osd_request {
	struct inode *r_inode;         	      /* for use by callbacks */
	struct inode *r_inode;         	      /* for use by callbacks */
	void *r_priv;			      /* ditto */
	void *r_priv;			      /* ditto */


	char              r_oid[40];          /* object name */
	char              r_oid[MAX_OBJ_NAME_SIZE];          /* object name */
	int               r_oid_len;
	int               r_oid_len;
	unsigned long     r_stamp;            /* send OR check time */
	unsigned long     r_stamp;            /* send OR check time */


+1 −1
Original line number Original line Diff line number Diff line
@@ -244,7 +244,7 @@ struct ceph_osd_request *ceph_osdc_alloc_request(struct ceph_osd_client *osdc,
		ceph_pagelist_init(req->r_trail);
		ceph_pagelist_init(req->r_trail);
	}
	}
	/* create request message; allow space for oid */
	/* create request message; allow space for oid */
	msg_size += 40;
	msg_size += MAX_OBJ_NAME_SIZE;
	if (snapc)
	if (snapc)
		msg_size += sizeof(u64) * snapc->num_snaps;
		msg_size += sizeof(u64) * snapc->num_snaps;
	if (use_mempool)
	if (use_mempool)