summaryrefslogtreecommitdiffstats
path: root/fs/nfsd/blocklayoutxdr.h
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@lst.de>2016-03-04 20:46:17 +0100
committerJ. Bruce Fields <bfields@redhat.com>2016-03-18 16:42:53 +0100
commitf99d4fbdae6765d0bb4ed5441f6fa1f036122d59 (patch)
treeb2192caa11508d5107d2eea3be55c0ec68118e6c /fs/nfsd/blocklayoutxdr.h
parentnfsd: move some blocklayout code (diff)
downloadlinux-f99d4fbdae6765d0bb4ed5441f6fa1f036122d59.tar.xz
linux-f99d4fbdae6765d0bb4ed5441f6fa1f036122d59.zip
nfsd: add SCSI layout support
This is a simple extension to the block layout driver to use SCSI persistent reservations for access control and fencing, as well as SCSI VPD pages for device identification. For this we need to pass the nfs4_client to the proc_getdeviceinfo method to generate the reservation key, and add a new fence_client method to allow for fence actions in the layout driver. Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: J. Bruce Fields <bfields@redhat.com>
Diffstat (limited to 'fs/nfsd/blocklayoutxdr.h')
-rw-r--r--fs/nfsd/blocklayoutxdr.h14
1 files changed, 14 insertions, 0 deletions
diff --git a/fs/nfsd/blocklayoutxdr.h b/fs/nfsd/blocklayoutxdr.h
index 6de925fe8499..397bc7563a49 100644
--- a/fs/nfsd/blocklayoutxdr.h
+++ b/fs/nfsd/blocklayoutxdr.h
@@ -15,6 +15,11 @@ struct pnfs_block_extent {
enum pnfs_block_extent_state es;
};
+struct pnfs_block_range {
+ u64 foff;
+ u64 len;
+};
+
/*
* Random upper cap for the uuid length to avoid unbounded allocation.
* Not actually limited by the protocol.
@@ -29,6 +34,13 @@ struct pnfs_block_volume {
u32 sig_len;
u8 sig[PNFS_BLOCK_UUID_LEN];
} simple;
+ struct {
+ enum scsi_code_set code_set;
+ enum scsi_designator_type designator_type;
+ int designator_len;
+ u8 designator[256];
+ u64 pr_key;
+ } scsi;
};
};
@@ -43,5 +55,7 @@ __be32 nfsd4_block_encode_layoutget(struct xdr_stream *xdr,
struct nfsd4_layoutget *lgp);
int nfsd4_block_decode_layoutupdate(__be32 *p, u32 len, struct iomap **iomapp,
u32 block_size);
+int nfsd4_scsi_decode_layoutupdate(__be32 *p, u32 len, struct iomap **iomapp,
+ u32 block_size);
#endif /* _NFSD_BLOCKLAYOUTXDR_H */