1c30dbb9cc7fc75ab1d0ee6fb084ba4684f7a665dSage Weil#ifndef __FS_CEPH_BUFFER_H 2c30dbb9cc7fc75ab1d0ee6fb084ba4684f7a665dSage Weil#define __FS_CEPH_BUFFER_H 3c30dbb9cc7fc75ab1d0ee6fb084ba4684f7a665dSage Weil 4dd26d857a7bf1b5b734a23180c19eac3e46db944Sage Weil#include <linux/kref.h> 5c30dbb9cc7fc75ab1d0ee6fb084ba4684f7a665dSage Weil#include <linux/mm.h> 6c30dbb9cc7fc75ab1d0ee6fb084ba4684f7a665dSage Weil#include <linux/vmalloc.h> 7c30dbb9cc7fc75ab1d0ee6fb084ba4684f7a665dSage Weil#include <linux/types.h> 8c30dbb9cc7fc75ab1d0ee6fb084ba4684f7a665dSage Weil#include <linux/uio.h> 9c30dbb9cc7fc75ab1d0ee6fb084ba4684f7a665dSage Weil 10c30dbb9cc7fc75ab1d0ee6fb084ba4684f7a665dSage Weil/* 11c30dbb9cc7fc75ab1d0ee6fb084ba4684f7a665dSage Weil * a simple reference counted buffer. 12c30dbb9cc7fc75ab1d0ee6fb084ba4684f7a665dSage Weil * 13c30dbb9cc7fc75ab1d0ee6fb084ba4684f7a665dSage Weil * use kmalloc for small sizes (<= one page), vmalloc for larger 14c30dbb9cc7fc75ab1d0ee6fb084ba4684f7a665dSage Weil * sizes. 15c30dbb9cc7fc75ab1d0ee6fb084ba4684f7a665dSage Weil */ 16c30dbb9cc7fc75ab1d0ee6fb084ba4684f7a665dSage Weilstruct ceph_buffer { 17dd26d857a7bf1b5b734a23180c19eac3e46db944Sage Weil struct kref kref; 18c30dbb9cc7fc75ab1d0ee6fb084ba4684f7a665dSage Weil struct kvec vec; 19c30dbb9cc7fc75ab1d0ee6fb084ba4684f7a665dSage Weil size_t alloc_len; 20c30dbb9cc7fc75ab1d0ee6fb084ba4684f7a665dSage Weil}; 21c30dbb9cc7fc75ab1d0ee6fb084ba4684f7a665dSage Weil 22b6c1d5b81ea0841ae9d3ce2cda319ab986b081cfSage Weilextern struct ceph_buffer *ceph_buffer_new(size_t len, gfp_t gfp); 23b6c1d5b81ea0841ae9d3ce2cda319ab986b081cfSage Weilextern void ceph_buffer_release(struct kref *kref); 24c30dbb9cc7fc75ab1d0ee6fb084ba4684f7a665dSage Weil 25c30dbb9cc7fc75ab1d0ee6fb084ba4684f7a665dSage Weilstatic inline struct ceph_buffer *ceph_buffer_get(struct ceph_buffer *b) 26c30dbb9cc7fc75ab1d0ee6fb084ba4684f7a665dSage Weil{ 27dd26d857a7bf1b5b734a23180c19eac3e46db944Sage Weil kref_get(&b->kref); 28c30dbb9cc7fc75ab1d0ee6fb084ba4684f7a665dSage Weil return b; 29c30dbb9cc7fc75ab1d0ee6fb084ba4684f7a665dSage Weil} 30c30dbb9cc7fc75ab1d0ee6fb084ba4684f7a665dSage Weil 31c30dbb9cc7fc75ab1d0ee6fb084ba4684f7a665dSage Weilstatic inline void ceph_buffer_put(struct ceph_buffer *b) 32c30dbb9cc7fc75ab1d0ee6fb084ba4684f7a665dSage Weil{ 33b6c1d5b81ea0841ae9d3ce2cda319ab986b081cfSage Weil kref_put(&b->kref, ceph_buffer_release); 34c30dbb9cc7fc75ab1d0ee6fb084ba4684f7a665dSage Weil} 35c30dbb9cc7fc75ab1d0ee6fb084ba4684f7a665dSage Weil 36c7e337d6490d6f2f5e66ddf1b04d00b0dbd10108Sage Weilextern int ceph_decode_buffer(struct ceph_buffer **b, void **p, void *end); 37c7e337d6490d6f2f5e66ddf1b04d00b0dbd10108Sage Weil 38c30dbb9cc7fc75ab1d0ee6fb084ba4684f7a665dSage Weil#endif 39