Commit | Line | Data |
---|---|---|
b2441318 | 1 | /* SPDX-License-Identifier: GPL-2.0 */ |
8650b8a0 CH |
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 | ||
8650b8a0 CH |
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 | }; | |
8650b8a0 | 18 | |
f99d4fbd CH |
19 | struct pnfs_block_range { |
20 | u64 foff; | |
21 | u64 len; | |
22 | }; | |
23 | ||
8650b8a0 CH |
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; | |
f99d4fbd CH |
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; | |
8650b8a0 CH |
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, | |
82e93bab | 54 | const struct nfsd4_getdeviceinfo *gdp); |
8650b8a0 | 55 | __be32 nfsd4_block_encode_layoutget(struct xdr_stream *xdr, |
73debe47 | 56 | const struct nfsd4_layoutget *lgp); |
8650b8a0 CH |
57 | int nfsd4_block_decode_layoutupdate(__be32 *p, u32 len, struct iomap **iomapp, |
58 | u32 block_size); | |
f99d4fbd CH |
59 | int nfsd4_scsi_decode_layoutupdate(__be32 *p, u32 len, struct iomap **iomapp, |
60 | u32 block_size); | |
8650b8a0 CH |
61 | |
62 | #endif /* _NFSD_BLOCKLAYOUTXDR_H */ |