1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */ 28650b8a0SChristoph Hellwig #ifndef _NFSD_BLOCKLAYOUTXDR_H 38650b8a0SChristoph Hellwig #define _NFSD_BLOCKLAYOUTXDR_H 1 48650b8a0SChristoph Hellwig 58650b8a0SChristoph Hellwig #include <linux/blkdev.h> 68650b8a0SChristoph Hellwig #include "xdr4.h" 78650b8a0SChristoph Hellwig 88650b8a0SChristoph Hellwig struct iomap; 98650b8a0SChristoph Hellwig struct xdr_stream; 108650b8a0SChristoph Hellwig 118650b8a0SChristoph Hellwig struct pnfs_block_extent { 128650b8a0SChristoph Hellwig struct nfsd4_deviceid vol_id; 138650b8a0SChristoph Hellwig u64 foff; 148650b8a0SChristoph Hellwig u64 len; 158650b8a0SChristoph Hellwig u64 soff; 168650b8a0SChristoph Hellwig enum pnfs_block_extent_state es; 178650b8a0SChristoph Hellwig }; 188650b8a0SChristoph Hellwig 19f99d4fbdSChristoph Hellwig struct pnfs_block_range { 20f99d4fbdSChristoph Hellwig u64 foff; 21f99d4fbdSChristoph Hellwig u64 len; 22f99d4fbdSChristoph Hellwig }; 23f99d4fbdSChristoph Hellwig 248650b8a0SChristoph Hellwig /* 258650b8a0SChristoph Hellwig * Random upper cap for the uuid length to avoid unbounded allocation. 268650b8a0SChristoph Hellwig * Not actually limited by the protocol. 278650b8a0SChristoph Hellwig */ 288650b8a0SChristoph Hellwig #define PNFS_BLOCK_UUID_LEN 128 298650b8a0SChristoph Hellwig 308650b8a0SChristoph Hellwig struct pnfs_block_volume { 318650b8a0SChristoph Hellwig enum pnfs_block_volume_type type; 328650b8a0SChristoph Hellwig union { 338650b8a0SChristoph Hellwig struct { 348650b8a0SChristoph Hellwig u64 offset; 358650b8a0SChristoph Hellwig u32 sig_len; 368650b8a0SChristoph Hellwig u8 sig[PNFS_BLOCK_UUID_LEN]; 378650b8a0SChristoph Hellwig } simple; 38f99d4fbdSChristoph Hellwig struct { 39f99d4fbdSChristoph Hellwig enum scsi_code_set code_set; 40f99d4fbdSChristoph Hellwig enum scsi_designator_type designator_type; 41f99d4fbdSChristoph Hellwig int designator_len; 42f99d4fbdSChristoph Hellwig u8 designator[256]; 43f99d4fbdSChristoph Hellwig u64 pr_key; 44f99d4fbdSChristoph Hellwig } scsi; 458650b8a0SChristoph Hellwig }; 468650b8a0SChristoph Hellwig }; 478650b8a0SChristoph Hellwig 488650b8a0SChristoph Hellwig struct pnfs_block_deviceaddr { 498650b8a0SChristoph Hellwig u32 nr_volumes; 50*2869b3a0SThorsten Blum struct pnfs_block_volume volumes[] __counted_by(nr_volumes); 518650b8a0SChristoph Hellwig }; 528650b8a0SChristoph Hellwig 538650b8a0SChristoph Hellwig __be32 nfsd4_block_encode_getdeviceinfo(struct xdr_stream *xdr, 5482e93babSChuck Lever const struct nfsd4_getdeviceinfo *gdp); 558650b8a0SChristoph Hellwig __be32 nfsd4_block_encode_layoutget(struct xdr_stream *xdr, 5673debe47SChuck Lever const struct nfsd4_layoutget *lgp); 578650b8a0SChristoph Hellwig int nfsd4_block_decode_layoutupdate(__be32 *p, u32 len, struct iomap **iomapp, 588650b8a0SChristoph Hellwig u32 block_size); 59f99d4fbdSChristoph Hellwig int nfsd4_scsi_decode_layoutupdate(__be32 *p, u32 len, struct iomap **iomapp, 60f99d4fbdSChristoph Hellwig u32 block_size); 618650b8a0SChristoph Hellwig 628650b8a0SChristoph Hellwig #endif /* _NFSD_BLOCKLAYOUTXDR_H */ 63