Merge remote-tracking branch 'torvalds/master' into perf/core
[linux-2.6-microblaze.git] / fs / nfsd / blocklayoutxdr.h
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                 struct nfsd4_getdeviceinfo *gdp);
55 __be32 nfsd4_block_encode_layoutget(struct xdr_stream *xdr,
56                 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 */