[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