ceph: name msgpools; useful error messages
Signed-off-by: Sage Weil <sage@newdream.net>
This commit is contained in:
parent
8c6efb58a5
commit
4f48280ee1
@ -10,8 +10,12 @@
|
|||||||
static void *alloc_fn(gfp_t gfp_mask, void *arg)
|
static void *alloc_fn(gfp_t gfp_mask, void *arg)
|
||||||
{
|
{
|
||||||
struct ceph_msgpool *pool = arg;
|
struct ceph_msgpool *pool = arg;
|
||||||
|
void *p;
|
||||||
|
|
||||||
return ceph_msg_new(0, pool->front_len);
|
p = ceph_msg_new(0, pool->front_len);
|
||||||
|
if (!p)
|
||||||
|
pr_err("msgpool %s alloc failed\n", pool->name);
|
||||||
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void free_fn(void *element, void *arg)
|
static void free_fn(void *element, void *arg)
|
||||||
@ -20,12 +24,13 @@ static void free_fn(void *element, void *arg)
|
|||||||
}
|
}
|
||||||
|
|
||||||
int ceph_msgpool_init(struct ceph_msgpool *pool,
|
int ceph_msgpool_init(struct ceph_msgpool *pool,
|
||||||
int front_len, int size, bool blocking)
|
int front_len, int size, bool blocking, const char *name)
|
||||||
{
|
{
|
||||||
pool->front_len = front_len;
|
pool->front_len = front_len;
|
||||||
pool->pool = mempool_create(size, alloc_fn, free_fn, pool);
|
pool->pool = mempool_create(size, alloc_fn, free_fn, pool);
|
||||||
if (!pool->pool)
|
if (!pool->pool)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
pool->name = name;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -38,8 +43,8 @@ struct ceph_msg *ceph_msgpool_get(struct ceph_msgpool *pool,
|
|||||||
int front_len)
|
int front_len)
|
||||||
{
|
{
|
||||||
if (front_len > pool->front_len) {
|
if (front_len > pool->front_len) {
|
||||||
pr_err("msgpool_get pool %p need front %d, pool size is %d\n",
|
pr_err("msgpool_get pool %s need front %d, pool size is %d\n",
|
||||||
pool, front_len, pool->front_len);
|
pool->name, front_len, pool->front_len);
|
||||||
WARN_ON(1);
|
WARN_ON(1);
|
||||||
|
|
||||||
/* try to alloc a fresh message */
|
/* try to alloc a fresh message */
|
||||||
|
@ -9,12 +9,14 @@
|
|||||||
* avoid unexpected OOM conditions.
|
* avoid unexpected OOM conditions.
|
||||||
*/
|
*/
|
||||||
struct ceph_msgpool {
|
struct ceph_msgpool {
|
||||||
|
const char *name;
|
||||||
mempool_t *pool;
|
mempool_t *pool;
|
||||||
int front_len; /* preallocated payload size */
|
int front_len; /* preallocated payload size */
|
||||||
};
|
};
|
||||||
|
|
||||||
extern int ceph_msgpool_init(struct ceph_msgpool *pool,
|
extern int ceph_msgpool_init(struct ceph_msgpool *pool,
|
||||||
int front_len, int size, bool blocking);
|
int front_len, int size, bool blocking,
|
||||||
|
const char *name);
|
||||||
extern void ceph_msgpool_destroy(struct ceph_msgpool *pool);
|
extern void ceph_msgpool_destroy(struct ceph_msgpool *pool);
|
||||||
extern struct ceph_msg *ceph_msgpool_get(struct ceph_msgpool *,
|
extern struct ceph_msg *ceph_msgpool_get(struct ceph_msgpool *,
|
||||||
int front_len);
|
int front_len);
|
||||||
|
@ -1214,11 +1214,13 @@ int ceph_osdc_init(struct ceph_osd_client *osdc, struct ceph_client *client)
|
|||||||
if (!osdc->req_mempool)
|
if (!osdc->req_mempool)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
err = ceph_msgpool_init(&osdc->msgpool_op, OSD_OP_FRONT_LEN, 10, true);
|
err = ceph_msgpool_init(&osdc->msgpool_op, OSD_OP_FRONT_LEN, 10, true,
|
||||||
|
"osd_op");
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
goto out_mempool;
|
goto out_mempool;
|
||||||
err = ceph_msgpool_init(&osdc->msgpool_op_reply,
|
err = ceph_msgpool_init(&osdc->msgpool_op_reply,
|
||||||
OSD_OPREPLY_FRONT_LEN, 10, true);
|
OSD_OPREPLY_FRONT_LEN, 10, true,
|
||||||
|
"osd_op_reply");
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
goto out_msgpool;
|
goto out_msgpool;
|
||||||
return 0;
|
return 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user