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: Andy Adamson <andros@netapp.com> [fixup layout header pointer for encode_layoutreturn] Signed-off-by: Benny Halevy <bhalevy@panasas.com>
This commit is contained in:
committed by
Boaz Harrosh
parent
8a1636c459
commit
04a555498e
@@ -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);
|
||||||
p = reserve_space(xdr, 4);
|
if (NFS_SERVER(args->inode)->pnfs_curr_ld->encode_layoutreturn) {
|
||||||
*p = cpu_to_be32(0);
|
NFS_SERVER(args->inode)->pnfs_curr_ld->encode_layoutreturn(
|
||||||
|
NFS_I(args->inode)->layout, xdr, args);
|
||||||
|
} else {
|
||||||
|
p = reserve_space(xdr, 4);
|
||||||
|
*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 {
|
|||||||
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 {
|
||||||
|
Reference in New Issue
Block a user