| /* SPDX-License-Identifier: GPL-2.0 */ | 
 | #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; | 
 | }; | 
 |  | 
 | struct pnfs_block_range { | 
 | 	u64				foff; | 
 | 	u64				len; | 
 | }; | 
 |  | 
 | /* | 
 |  * 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 { | 
 | 			enum scsi_code_set		code_set; | 
 | 			enum scsi_designator_type	designator_type; | 
 | 			int				designator_len; | 
 | 			u8				designator[256]; | 
 | 			u64				pr_key; | 
 | 		} scsi; | 
 | 	}; | 
 | }; | 
 |  | 
 | 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); | 
 | int nfsd4_scsi_decode_layoutupdate(__be32 *p, u32 len, struct iomap **iomapp, | 
 | 		u32 block_size); | 
 |  | 
 | #endif /* _NFSD_BLOCKLAYOUTXDR_H */ |