Commit 04a55549 authored by Andy Adamson's avatar Andy Adamson Committed by Boaz Harrosh

pnfs: encode_layoutreturn

Add a layout driver method to encode the layout type specific
opaque part of layout return in-line in the xdr stream.

Currently the pnfs-objects layout driver uses it to encode i/o error
information on LAYOUTRETURN.
Signed-off-by: default avatarAndy Adamson <andros@netapp.com>
[fixup layout header pointer for encode_layoutreturn]
Signed-off-by: default avatarBenny Halevy <bhalevy@panasas.com>
parent 8a1636c4
...@@ -1920,8 +1920,13 @@ encode_layoutreturn(struct xdr_stream *xdr, ...@@ -1920,8 +1920,13 @@ encode_layoutreturn(struct xdr_stream *xdr,
spin_lock(&args->inode->i_lock); spin_lock(&args->inode->i_lock);
xdr_encode_opaque_fixed(p, &args->stateid.data, NFS4_STATEID_SIZE); xdr_encode_opaque_fixed(p, &args->stateid.data, NFS4_STATEID_SIZE);
spin_unlock(&args->inode->i_lock); spin_unlock(&args->inode->i_lock);
if (NFS_SERVER(args->inode)->pnfs_curr_ld->encode_layoutreturn) {
NFS_SERVER(args->inode)->pnfs_curr_ld->encode_layoutreturn(
NFS_I(args->inode)->layout, xdr, args);
} else {
p = reserve_space(xdr, 4); p = reserve_space(xdr, 4);
*p = cpu_to_be32(0); *p = cpu_to_be32(0);
}
hdr->nops++; hdr->nops++;
hdr->replen += decode_layoutreturn_maxsz; hdr->replen += decode_layoutreturn_maxsz;
} }
......
...@@ -104,6 +104,10 @@ struct pnfs_layoutdriver_type { ...@@ -104,6 +104,10 @@ struct pnfs_layoutdriver_type {
enum pnfs_try_status (*write_pagelist) (struct nfs_write_data *nfs_data, int how); enum pnfs_try_status (*write_pagelist) (struct nfs_write_data *nfs_data, int how);
void (*free_deviceid_node) (struct nfs4_deviceid_node *); void (*free_deviceid_node) (struct nfs4_deviceid_node *);
void (*encode_layoutreturn) (struct pnfs_layout_hdr *layoutid,
struct xdr_stream *xdr,
const struct nfs4_layoutreturn_args *args);
}; };
struct pnfs_layout_hdr { struct pnfs_layout_hdr {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment