ceph: simplify ceph_buffer interface

We never allocate the ceph_buffer and buffer separtely, so use a single
constructor.

Disallow put on NULL buffer; make the caller check.

Signed-off-by: Sage Weil <sage@newdream.net>
This commit is contained in:
Sage Weil
2009-12-07 12:17:17 -08:00
parent dd26d857a7
commit b6c1d5b81e
5 changed files with 35 additions and 29 deletions

View File

@@ -20,8 +20,8 @@ struct ceph_buffer {
bool is_vmalloc;
};
struct ceph_buffer *ceph_buffer_new(gfp_t gfp);
int ceph_buffer_alloc(struct ceph_buffer *b, int len, gfp_t gfp);
extern struct ceph_buffer *ceph_buffer_new(size_t len, gfp_t gfp);
extern void ceph_buffer_release(struct kref *kref);
static inline struct ceph_buffer *ceph_buffer_get(struct ceph_buffer *b)
{
@@ -29,23 +29,9 @@ static inline struct ceph_buffer *ceph_buffer_get(struct ceph_buffer *b)
return b;
}
void ceph_buffer_release(struct kref *kref);
static inline void ceph_buffer_put(struct ceph_buffer *b)
{
if (b)
kref_put(&b->kref, ceph_buffer_release);
}
static inline struct ceph_buffer *ceph_buffer_new_alloc(int len, gfp_t gfp)
{
struct ceph_buffer *b = ceph_buffer_new(gfp);
if (b && ceph_buffer_alloc(b, len, gfp) < 0) {
ceph_buffer_put(b);
b = NULL;
}
return b;
kref_put(&b->kref, ceph_buffer_release);
}
#endif