1 | /* SPDX-License-Identifier: GPL-2.0 */ |
---|---|
2 | #ifndef _NFSD_BLOCKLAYOUTXDR_H |
3 | #define _NFSD_BLOCKLAYOUTXDR_H 1 |
4 | |
5 | #include <linux/blkdev.h> |
6 | #include "xdr4.h" |
7 | |
8 | struct iomap; |
9 | struct xdr_stream; |
10 | |
11 | struct pnfs_block_extent { |
12 | struct nfsd4_deviceid vol_id; |
13 | u64 foff; |
14 | u64 len; |
15 | u64 soff; |
16 | enum pnfs_block_extent_state es; |
17 | }; |
18 | |
19 | struct pnfs_block_range { |
20 | u64 foff; |
21 | u64 len; |
22 | }; |
23 | |
24 | /* |
25 | * Random upper cap for the uuid length to avoid unbounded allocation. |
26 | * Not actually limited by the protocol. |
27 | */ |
28 | #define PNFS_BLOCK_UUID_LEN 128 |
29 | |
30 | struct pnfs_block_volume { |
31 | enum pnfs_block_volume_type type; |
32 | union { |
33 | struct { |
34 | u64 offset; |
35 | u32 sig_len; |
36 | u8 sig[PNFS_BLOCK_UUID_LEN]; |
37 | } simple; |
38 | struct { |
39 | enum scsi_code_set code_set; |
40 | enum scsi_designator_type designator_type; |
41 | int designator_len; |
42 | u8 designator[256]; |
43 | u64 pr_key; |
44 | } scsi; |
45 | }; |
46 | }; |
47 | |
48 | struct pnfs_block_deviceaddr { |
49 | u32 nr_volumes; |
50 | struct pnfs_block_volume volumes[]; |
51 | }; |
52 | |
53 | __be32 nfsd4_block_encode_getdeviceinfo(struct xdr_stream *xdr, |
54 | const struct nfsd4_getdeviceinfo *gdp); |
55 | __be32 nfsd4_block_encode_layoutget(struct xdr_stream *xdr, |
56 | const struct nfsd4_layoutget *lgp); |
57 | int nfsd4_block_decode_layoutupdate(__be32 *p, u32 len, struct iomap **iomapp, |
58 | u32 block_size); |
59 | int nfsd4_scsi_decode_layoutupdate(__be32 *p, u32 len, struct iomap **iomapp, |
60 | u32 block_size); |
61 | |
62 | #endif /* _NFSD_BLOCKLAYOUTXDR_H */ |
63 |