aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ceph/msgpool.h
diff options
context:
space:
mode:
authorSage Weil <sage@newdream.net>2009-10-06 14:31:13 -0400
committerSage Weil <sage@newdream.net>2009-10-06 14:31:13 -0400
commit8fc91fd85950d106883852c6d215614ec28cc92d (patch)
treed2367bb82957da5ddfb48f64c6fd14e0dac6b4f8 /fs/ceph/msgpool.h
parent31b8006e1d79e127a776c9414e3e0b5f9508047e (diff)
ceph: message pools
The msgpool is a basic mempool_t-like structure to preallocate messages we expect to receive over the wire. This ensures we have the necessary memory preallocated to process replies to requests, or to process unsolicited messages from various servers. Signed-off-by: Sage Weil <sage@newdream.net>
Diffstat (limited to 'fs/ceph/msgpool.h')
-rw-r--r--fs/ceph/msgpool.h26
1 files changed, 26 insertions, 0 deletions
diff --git a/fs/ceph/msgpool.h b/fs/ceph/msgpool.h
new file mode 100644
index 000000000000..07a2decaa6d8
--- /dev/null
+++ b/fs/ceph/msgpool.h
@@ -0,0 +1,26 @@
1#ifndef _FS_CEPH_MSGPOOL
2#define _FS_CEPH_MSGPOOL
3
4#include "messenger.h"
5
6/*
7 * we use memory pools for preallocating messages we may receive, to
8 * avoid unexpected OOM conditions.
9 */
10struct ceph_msgpool {
11 spinlock_t lock;
12 int front_len; /* preallocated payload size */
13 struct list_head msgs; /* msgs in the pool; each has 1 ref */
14 int num, min; /* cur, min # msgs in the pool */
15 bool blocking;
16 wait_queue_head_t wait;
17};
18
19extern int ceph_msgpool_init(struct ceph_msgpool *pool,
20 int front_len, int size, bool blocking);
21extern void ceph_msgpool_destroy(struct ceph_msgpool *pool);
22extern int ceph_msgpool_resv(struct ceph_msgpool *, int delta);
23extern struct ceph_msg *ceph_msgpool_get(struct ceph_msgpool *);
24extern void ceph_msgpool_put(struct ceph_msgpool *, struct ceph_msg *);
25
26#endif