diff options
Diffstat (limited to 'fs/ceph/pagelist.h')
| -rw-r--r-- | fs/ceph/pagelist.h | 54 | 
1 files changed, 54 insertions, 0 deletions
diff --git a/fs/ceph/pagelist.h b/fs/ceph/pagelist.h new file mode 100644 index 00000000000..e8a4187e108 --- /dev/null +++ b/fs/ceph/pagelist.h @@ -0,0 +1,54 @@ +#ifndef __FS_CEPH_PAGELIST_H +#define __FS_CEPH_PAGELIST_H + +#include <linux/list.h> + +struct ceph_pagelist { +	struct list_head head; +	void *mapped_tail; +	size_t length; +	size_t room; +}; + +static inline void ceph_pagelist_init(struct ceph_pagelist *pl) +{ +	INIT_LIST_HEAD(&pl->head); +	pl->mapped_tail = NULL; +	pl->length = 0; +	pl->room = 0; +} +extern int ceph_pagelist_release(struct ceph_pagelist *pl); + +extern int ceph_pagelist_append(struct ceph_pagelist *pl, void *d, size_t l); + +static inline int ceph_pagelist_encode_64(struct ceph_pagelist *pl, u64 v) +{ +	__le64 ev = cpu_to_le64(v); +	return ceph_pagelist_append(pl, &ev, sizeof(ev)); +} +static inline int ceph_pagelist_encode_32(struct ceph_pagelist *pl, u32 v) +{ +	__le32 ev = cpu_to_le32(v); +	return ceph_pagelist_append(pl, &ev, sizeof(ev)); +} +static inline int ceph_pagelist_encode_16(struct ceph_pagelist *pl, u16 v) +{ +	__le16 ev = cpu_to_le16(v); +	return ceph_pagelist_append(pl, &ev, sizeof(ev)); +} +static inline int ceph_pagelist_encode_8(struct ceph_pagelist *pl, u8 v) +{ +	return ceph_pagelist_append(pl, &v, 1); +} +static inline int ceph_pagelist_encode_string(struct ceph_pagelist *pl, +					      char *s, size_t len) +{ +	int ret = ceph_pagelist_encode_32(pl, len); +	if (ret) +		return ret; +	if (len) +		return ceph_pagelist_append(pl, s, len); +	return 0; +} + +#endif  |