[pnfs] minorversion 05 .x file

Garth Goodson Garth.Goodson at netapp.com
Wed Aug 16 19:19:11 EDT 2006


I have resolved where the change to LAYOUTGET comes from.  They are part 
of issue 2.

 From Mike Eisler:

>   http://www.nfsv4-editor.org/cgi-bin/roundup/nfsv4/issue2
> 
> The loga_signal_layout_avail field was added to allow
> clients to handle the case of a layout request denied to
> to resource exhaustion. The client can request notification
> from the server when it is possible to get a layout.

About the clientid:
> Since sessions are a required part of NFSv4.1, I believe
> it is sufficient to prefix the LAYOUTGET operation with
> a SEQUENCE operation.

So it looks like the clientid will be going away for all pnfs ops.  I 
think we need to leave it in for our prototyping until we have session 
support.  I know that we (NetApp) require it for our prototype.

-Garth

Garth Goodson wrote:
> I've gone through the minorversion-05 .x file and have found the 
> following changes that will need to be made to our prototypes (linux 
> client/server, Netapp server).
> 
> I've also pulled out all the pnfs structures and types into a separate 
> text file, putting the changed versions at the top; it is attached to 
> this message.  It appears as a lot of changes occurred, but I think in 
> reality the edits will be relatively minor.
> 
> Changes in consts:
> ------------------
> FATTR4_FS_LAYOUT_TYPE attr gone from 56->64
> OP_LAYOUTGET from 40->50
> OP_LAYOUTCOMMIT from 41->49
> OP_LAYOUTRETURN from 42->51
> OP_GETDEVINFO from 43->47
> OP_GETDEVLIST from 44->48
> 
> enums:
> ------
> struct layoutrecall_type4 -> added LAYOUTRECALL_ALL = 3 (shouldn't 
> affect xdr)
> 
> structs:
> --------
> devlist_item the deviceaddr has been changed from <layouttype, opaque> 
> to just opaque; need to remove layouttype in GETDEVICELIST results
> 
> nfsv4_file_layout, added uint32_t dev_index in between dev_id and fh; 
> impacts LAYOUTGET results; for our testing it should be set to 0
> 
> nfsv4_file_layouttype4, added uint32_t stripe_devs<> as second last 
> argument; impacts LAYOUTGET results; for our testing set to 0 length
> 
> LAYOUTGET4args/res: something strange happened here, I'm trying to track 
> down how this structure changed with Spencer.  For now assume it is the 
> same as it was.
> 
> LAYOUTCOMMIT4args: changed last_write_offset to a union switched on a 
> bool, client will probably always set to true (for now); server should 
> check
> 
> LAYOUTCOMMIT4resok: looks like newsize4 has been changed from a union 
> switched on a bool to a uint64 -- I think it should remain a switched union
> 
> LAYOUTRETURN4args: offset and length have been pulled out into a 
> separate structure switched on the return type (see layoutreturn4)
> 
> GETDEVICEINFOresok: changed to just return opaque address, rather than 
> layouttype plus opaque.
> 
> GETDEVLIST4resok: added a 'bool eof' flag to end to indicate no more 
> getdevlist calls are needed (server must check -- client can assume only 
> one call is needed)
> 
> layoutrecall4: added case for recall of ALL to switch (impacts 
> CB_LAYOUTRECALL4args)
> 
> file layout opaque struct: is now a switched union on SIMPLE or COMPLEX, 
> for implementation use SIMPLE types only
> 
> 
> ------------------------------------------------------------------------
> 
> Changed fields:
> ---------------
> 
> const FATTR4_LAYOUT_TYPE	= 64;  /* CHANGED */
> 
> 
> /* CHANGED op numbers (all) */
> 
>     OP_GETDEVICEINFO	= 47,
> 	OP_GETDEVICELIST	= 48,
> 	OP_LAYOUTCOMMIT		= 49,
> 	OP_LAYOUTGET		= 50,
> 	OP_LAYOUTRETURN		= 51,
> 
> 
> 
> /* FILE LAYOUT -- LAYOUTGET */
> 
> typedef netaddr4 nfsv4_file_layout_simple_device4;
> 
> /* NEW */
> enum file_layout_device_type {
> 	FILE_SIMPLE  = 1,
> 	FILE_COMPLEX = 2
> };
> 
> /* CHANGED -- used to be netaddr */
> union nfsv4_file_layout_device4 switch (file_layout_device_type fld_type) {
> 	case FILE_SIMPLE:
> 		nfsv4_file_layout_simple_device4 nfld_dev_list<>;
> 	case FILE_COMPLEX:
> 		deviceid4 dev_list<>;
> 	default:
> 		void;
> };
> 
> 
> struct nfsv4_file_layout4 {
> 	deviceid4	nfl_dev_id;
> 	uint32_t	nfl_dev_index;   /* CHANGED */
> 	nfs_fh4		nfl_fh;
> };
> 
> struct nfsv4_file_layouttype4 {
> 	stripetype4		nflt_stripe_type;
> 	bool			nflt_commit_through_mds;
> 	length4			nflt_stripe_unit;
> 	length4			nflt_file_size;
> 	uint32_t		nflt_stripe_devs<>;   /* CHANGED */
> 	nfsv4_file_layout4	nflt_dev_list<>;
> };
> 
> 
> 
> /* GETDEVLIST/INFO */
> 
> struct devlist_item4 {
> 	deviceid4		dli_id;
> 	opaque			dli_device_addr<>;  /* CHANGED -- no layouttype */
> };
> 
> 
> struct GETDEVICELIST4resok {
> 	nfs_cookie4		gdlr_cookie;
> 	verifier4		gdlr_cookieverf;
> 	devlist_item4	gdlr_device_addrs<>;
> 	bool			gdlr_eof;           /* CHANGED -- added */
> };
> 
> struct GETDEVICEINFO4resok {
> 	opaque			gdir_device_addr<>; /* CHANGED removed layouttype */
> };
> 
> 
> 
> /* LAYOUTCOMMIT */
> 
> /* NEW ADDED */
> union newoffset4 switch (bool newoffset) {
> case TRUE:
>         offset4           no_offset;
> case FALSE:
>         void;
> };
> 
> struct LAYOUTCOMMIT4args {
> 	/* CURRENT_FH: file */
> 	clientid4               loca_clientid;
> 	offset4                 loca_offset;
> 	length4                 loca_length;
> 	bool                    loca_reclaim;
> 	newoffset4              loca_last_write_offset; /* CHANGED - added */
> 	newtime4                loca_time_modify;
> 	newtime4                loca_time_access;
> 	layoutupdate4           loca_layoutupdate;
> };
> 
> 
> 
> /* LAYOUTGET */
> 
> /*
>  * TEMPORARY definition
>  */
> typedef uint64_t newsize4;   /* CHANGED -- leave as was -- switched union */
> 
> 
> /* NOT sure what happened here -- leave LAYOUTGET4args as it was */
> struct LAYOUTGET4args {
> 	/* CURRENT_FH: file */                            /* REMOVED clientid?? */
> 	bool                    loga_signal_layout_avail; /* NOT SURE ABOUT THIS */
> 	layouttype4             loga_layout_type;
> 	layoutiomode4			loga_iomode;
> 	offset4                 loga_offset;
> 	length4                 loga_length;
> 	length4                 loga_minlength;
> 	count4                  loga_maxcount;
> };
> 
> union LAYOUTGET4res switch (nfsstat4 status) {
> case NFS4_OK:
>         LAYOUTGET4resok     logr_resok4;
> case NFS4ERR_LAYOUTTRYLATER:
>         bool                logr_will_signal_layout_avail;  /* HMM... */
> default:
>         void;
> };
> 
> 
> 
> /* LAYOUTRETURN */
> 
> enum layoutreturn_type4 {
> 	LAYOUTRETURN_FILE = 1,
> 	LAYOUTRETURN_FSID = 2,
> 	LAYOUTRETURN_ALL  = 3   /* ADDED */
> };
> 
> /* NEW */
> struct layoutreturn_file4 {
> 	offset4		lrf_offset;
> 	length4		lrf_length;
> };
> 
> /* NEW */
> union layoutreturn4 switch(layoutreturn_type4 returntype) {
> 	case LAYOUTRETURN_FILE:
> 		layoutreturn_file4	lr_layout;
> 	default:
> 		void;
> };
> 
> struct LAYOUTRETURN4args {
> 	/* CURRENT_FH: file */
> 	clientid4		lora_clientid;
> 	bool			lora_reclaim;       /* PULLED out length, offset */
> 	layouttype4		lora_layout_type;   
> 	layoutiomode4		lora_iomode;
> 	layoutreturn4		lora_layoutreturn; /* ADDED */
> };
> 
> 
> /* LAYOUTRECALL */
> 
> enum layoutrecall_type4 {
> 	LAYOUTRECALL_FILE = 1,
> 	LAYOUTRECALL_FSID = 2,
> 	LAYOUTRECALL_ALL  = 3   /* ADDED */
> };
> 
> 
> union layoutrecall4 switch(layoutrecall_type4 recalltype) {
> case LAYOUTRECALL_FILE:
>         layoutrecall_file4 lor_layout;
> case LAYOUTRECALL_FSID:
>         fsid4              lor_fsid;
> case LAYOUTRECALL_ALL:                 /* ADDED */
> 	void;
> };
> 
> 
> 
> /* NEW for mds threshold attribute -- can ignore for now */
> 
> const TH4_READ_SIZE	= 0;
> const TH4_WRITE_SIZE	= 1;
> const TH4_READ_IOSIZE	= 2;
> const TH4_WRITE_IOSIZE	= 3;
> 
> typedef length4 threshold4_read_size;
> typedef length4 threshold4_write_size;
> typedef length4 threshold4_read_iosize;
> typedef length4 threshold4_write_iosize;
> 
> struct threshold_item4 {
> 	layouttype4	thi_layout_type;
> 	bitmap4		thi_hintset;
> 	opaque		thi_hintlist<>;
> };
> 
> struct mdsthreshold4 {
> 	threshold_item4	mth_hints<>;
> };
> 
> 
> No Change
> ---------
> 
> const FATTR4_LAYOUT_HINT	= 63;   
> const FATTR4_LAYOUT_BLKSIZE	= 65;
> const FATTR4_LAYOUT_ALIGNMENT	= 66;
> const FATTR4_MDSTHRESHOLD	= 68;
> 
> enum layouttype4 {
> 	LAYOUT_NFSV4_FILES  = 1,
> 	LAYOUT_OSD2_OBJECTS = 2,
> 	LAYOUT_BLOCK_VOLUME = 3
> };
> 
> struct layouthint4 {
> 	layouttype4		loh_type;
> 	opaque			loh_data<>;
> };
> 
> enum layoutiomode4 {
> 	LAYOUTIOMODE_READ	= 1,
> 	LAYOUTIOMODE_RW		= 2,
> 	LAYOUTIOMODE_ANY	= 3
> };
> 
> struct layout4 {
> 	offset4			lo_offset;
> 	length4			lo_length;
> 	layoutiomode4		lo_iomode;
> 	layouttype4		lo_type;
> 	opaque			lo_layout<>;
> };
> 
> typedef uint32_t deviceid4;
> 
> 
> struct layoutupdate4 {
> 	layouttype4		lou_type;
> 	opaque			lou_data<>;
> };
> 
> enum stripetype4 {
> 	STRIPE_SPARSE = 1,
> 	STRIPE_DENSE = 2
> };
> 
> struct nfsv4_file_layouthint4 {
> 	stripetype4	nflh_stripe_type;
> 	length4		nflh_stripe_unit;
> 	uint32_t	nflh_stripe_width;
> };
> 
> 
> typedef uint32_t	fattr4_layout_alignment;
> typedef uint32_t	fattr4_layout_blksize;
> typedef layouthint4	fattr4_layout_hint;
> typedef layouttype4	fattr4_layout_type;
> typedef mdsthreshold4	fattr4_mdsthreshold;
> typedef layouttype4	fattr4_fs_layout_type;
> 
> 
> struct GETDEVICEINFO4args {
> 	/* CURRENT_FH: file */
> 	deviceid4		gdia_device_id;
> 	layouttype4		gdia_layout_type;
> 	count4			gdia_maxcount;
> };
> 
> 
> union GETDEVICEINFO4res switch (nfsstat4 status) {
> case NFS4_OK:
> 	GETDEVICEINFO4resok	gdir_resok4;
> default:
> 	void;
> };
> 
> struct GETDEVICELIST4args {
> 	/* CURRENT_FH: file */
> 	layouttype4		gdla_layout_type;
> 	count4			gdla_maxcount;
> 	nfs_cookie4		gdla_cookie;
> 	verifier4		gdla_cookieverf;
> };
> 
> 
> union GETDEVICELIST4res switch (nfsstat4 status) {
> case NFS4_OK:
> 	GETDEVICELIST4resok	gdlr_resok4;
> default:
> 	void;
> };
> 
> union newtime4 switch (bool timechanged) {
> case TRUE:
>         nfstime4           nt_time;
> case FALSE:
>         void;
> };
> 
> 
> union LAYOUTCOMMIT4res switch (nfsstat4 status) {
> case NFS4_OK:
>         LAYOUTCOMMIT4resok  locr_resok4;
> default:
>         void;
> };
> 
> struct LAYOUTGET4resok {
> 	layout4            logr_layout;
> };
> 
> struct LAYOUTRETURN4res {
>     nfsstat4        lorr_status;
> };
> 
> 
> struct CB_LAYOUTRECALL4args {
> 	layouttype4             lora_type;
> 	layoutiomode4      lora_iomode;
> 	bool                    lora_changed;
> 	layoutrecall4           lora_recall;
> };
> 
> struct CB_LAYOUTRECALL4res {
> 	nfsstat4        lorr_status;
> };
> 
> 
> struct layoutrecall_file4 {
> 	nfs_fh4         lor_fh;
> 	offset4         lor_offset;
> 	length4         lor_length;
> };
> 
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> pNFS mailing list
> pNFS at linux-nfs.org
> http://linux-nfs.org/cgi-bin/mailman/listinfo/pnfs


More information about the pNFS mailing list