Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -1920,8 +1920,13 @@ encode_layoutreturn(struct xdr_stream *xdr,
	spin_lock(&args->inode->i_lock);
	xdr_encode_opaque_fixed(p, &args->stateid.data, NFS4_STATEID_SIZE);
	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 = cpu_to_be32(0);
	}
	hdr->nops++;
	hdr->replen += decode_layoutreturn_maxsz;
}
+4 −0
Original line number Diff line number Diff line
@@ -104,6 +104,10 @@ struct pnfs_layoutdriver_type {
	enum pnfs_try_status (*write_pagelist) (struct nfs_write_data *nfs_data, int how);

	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 {