0001
0002 #ifndef _NFSD_BLOCKLAYOUTXDR_H
0003 #define _NFSD_BLOCKLAYOUTXDR_H 1
0004
0005 #include <linux/blkdev.h>
0006 #include "xdr4.h"
0007
0008 struct iomap;
0009 struct xdr_stream;
0010
0011 struct pnfs_block_extent {
0012 struct nfsd4_deviceid vol_id;
0013 u64 foff;
0014 u64 len;
0015 u64 soff;
0016 enum pnfs_block_extent_state es;
0017 };
0018
0019 struct pnfs_block_range {
0020 u64 foff;
0021 u64 len;
0022 };
0023
0024
0025
0026
0027
0028 #define PNFS_BLOCK_UUID_LEN 128
0029
0030 struct pnfs_block_volume {
0031 enum pnfs_block_volume_type type;
0032 union {
0033 struct {
0034 u64 offset;
0035 u32 sig_len;
0036 u8 sig[PNFS_BLOCK_UUID_LEN];
0037 } simple;
0038 struct {
0039 enum scsi_code_set code_set;
0040 enum scsi_designator_type designator_type;
0041 int designator_len;
0042 u8 designator[256];
0043 u64 pr_key;
0044 } scsi;
0045 };
0046 };
0047
0048 struct pnfs_block_deviceaddr {
0049 u32 nr_volumes;
0050 struct pnfs_block_volume volumes[];
0051 };
0052
0053 __be32 nfsd4_block_encode_getdeviceinfo(struct xdr_stream *xdr,
0054 struct nfsd4_getdeviceinfo *gdp);
0055 __be32 nfsd4_block_encode_layoutget(struct xdr_stream *xdr,
0056 struct nfsd4_layoutget *lgp);
0057 int nfsd4_block_decode_layoutupdate(__be32 *p, u32 len, struct iomap **iomapp,
0058 u32 block_size);
0059 int nfsd4_scsi_decode_layoutupdate(__be32 *p, u32 len, struct iomap **iomapp,
0060 u32 block_size);
0061
0062 #endif