Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
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  * Random upper cap for the uuid length to avoid unbounded allocation.
0026  * Not actually limited by the protocol.
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 /* _NFSD_BLOCKLAYOUTXDR_H */