| #ifndef _NFSD_BLOCKLAYOUTXDR_H | 
 | #define _NFSD_BLOCKLAYOUTXDR_H 1 | 
 |  | 
 | #include <linux/blkdev.h> | 
 | #include "xdr4.h" | 
 |  | 
 | struct iomap; | 
 | struct xdr_stream; | 
 |  | 
 | struct pnfs_block_extent { | 
 | 	struct nfsd4_deviceid		vol_id; | 
 | 	u64				foff; | 
 | 	u64				len; | 
 | 	u64				soff; | 
 | 	enum pnfs_block_extent_state	es; | 
 | }; | 
 |  | 
 | /* | 
 |  * Random upper cap for the uuid length to avoid unbounded allocation. | 
 |  * Not actually limited by the protocol. | 
 |  */ | 
 | #define PNFS_BLOCK_UUID_LEN	128 | 
 |  | 
 | struct pnfs_block_volume { | 
 | 	enum pnfs_block_volume_type	type; | 
 | 	union { | 
 | 		struct { | 
 | 			u64		offset; | 
 | 			u32		sig_len; | 
 | 			u8		sig[PNFS_BLOCK_UUID_LEN]; | 
 | 		} simple; | 
 | 	}; | 
 | }; | 
 |  | 
 | struct pnfs_block_deviceaddr { | 
 | 	u32				nr_volumes; | 
 | 	struct pnfs_block_volume	volumes[]; | 
 | }; | 
 |  | 
 | __be32 nfsd4_block_encode_getdeviceinfo(struct xdr_stream *xdr, | 
 | 		struct nfsd4_getdeviceinfo *gdp); | 
 | __be32 nfsd4_block_encode_layoutget(struct xdr_stream *xdr, | 
 | 		struct nfsd4_layoutget *lgp); | 
 | int nfsd4_block_decode_layoutupdate(__be32 *p, u32 len, struct iomap **iomapp, | 
 | 		u32 block_size); | 
 |  | 
 | #endif /* _NFSD_BLOCKLAYOUTXDR_H */ |