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