nfsv4.1 Add LAYOUTRETURN operation
Signed-off-by: Ronnie Sahlberg <ronniesahlberg@gmail.com>master
parent
61d235ae44
commit
a45799ca50
|
@ -3147,6 +3147,104 @@ zdr_LAYOUTGET4res (ZDR *zdrs, LAYOUTGET4res *objp)
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
uint32_t
|
||||
zdr_layoutreturn_type4 (ZDR *zdrs, layoutreturn_type4 *objp)
|
||||
{
|
||||
|
||||
|
||||
if (!zdr_enum (zdrs, (enum_t *) objp))
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
uint32_t
|
||||
zdr_layoutreturn_file4 (ZDR *zdrs, layoutreturn_file4 *objp)
|
||||
{
|
||||
|
||||
|
||||
if (!zdr_offset4 (zdrs, &objp->lrf_offset))
|
||||
return FALSE;
|
||||
if (!zdr_length4 (zdrs, &objp->lrf_length))
|
||||
return FALSE;
|
||||
if (!zdr_stateid4 (zdrs, &objp->lrf_stateid))
|
||||
return FALSE;
|
||||
if (!zdr_bytes (zdrs, (char **)&objp->lrf_body.lrf_body_val, (u_int *) &objp->lrf_body.lrf_body_len, ~0))
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
uint32_t
|
||||
zdr_layoutreturn4 (ZDR *zdrs, layoutreturn4 *objp)
|
||||
{
|
||||
|
||||
|
||||
if (!zdr_layoutreturn_type4 (zdrs, &objp->lr_returntype))
|
||||
return FALSE;
|
||||
switch (objp->lr_returntype) {
|
||||
case LAYOUTRETURN4_FILE:
|
||||
if (!zdr_layoutreturn_file4 (zdrs, &objp->layoutreturn4_u.lr_layout))
|
||||
return FALSE;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
uint32_t
|
||||
zdr_LAYOUTRETURN4args (ZDR *zdrs, LAYOUTRETURN4args *objp)
|
||||
{
|
||||
|
||||
|
||||
if (!zdr_bool (zdrs, &objp->lora_reclaim))
|
||||
return FALSE;
|
||||
if (!zdr_layouttype4 (zdrs, &objp->lora_layout_type))
|
||||
return FALSE;
|
||||
if (!zdr_layoutiomode4 (zdrs, &objp->lora_iomode))
|
||||
return FALSE;
|
||||
if (!zdr_layoutreturn4 (zdrs, &objp->lora_layoutreturn))
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
uint32_t
|
||||
zdr_layoutreturn_stateid (ZDR *zdrs, layoutreturn_stateid *objp)
|
||||
{
|
||||
|
||||
|
||||
if (!zdr_bool (zdrs, &objp->lrs_present))
|
||||
return FALSE;
|
||||
switch (objp->lrs_present) {
|
||||
case TRUE:
|
||||
if (!zdr_stateid4 (zdrs, &objp->layoutreturn_stateid_u.lrs_stateid))
|
||||
return FALSE;
|
||||
break;
|
||||
case FALSE:
|
||||
break;
|
||||
default:
|
||||
return FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
uint32_t
|
||||
zdr_LAYOUTRETURN4res (ZDR *zdrs, LAYOUTRETURN4res *objp)
|
||||
{
|
||||
|
||||
|
||||
if (!zdr_nfsstat4 (zdrs, &objp->lorr_status))
|
||||
return FALSE;
|
||||
switch (objp->lorr_status) {
|
||||
case NFS4_OK:
|
||||
if (!zdr_layoutreturn_stateid (zdrs, &objp->LAYOUTRETURN4res_u.lorr_stateid))
|
||||
return FALSE;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
uint32_t
|
||||
zdr_ILLEGAL4res (ZDR *zdrs, ILLEGAL4res *objp)
|
||||
{
|
||||
|
@ -3337,6 +3435,10 @@ zdr_nfs_argop4 (ZDR *zdrs, nfs_argop4 *objp)
|
|||
if (!zdr_LAYOUTGET4args (zdrs, &objp->nfs_argop4_u.oplayoutget))
|
||||
return FALSE;
|
||||
break;
|
||||
case OP_LAYOUTRETURN:
|
||||
if (!zdr_LAYOUTRETURN4args (zdrs, &objp->nfs_argop4_u.oplayoutreturn))
|
||||
return FALSE;
|
||||
break;
|
||||
case OP_ILLEGAL:
|
||||
break;
|
||||
default:
|
||||
|
@ -3529,6 +3631,10 @@ zdr_nfs_resop4 (ZDR *zdrs, nfs_resop4 *objp)
|
|||
if (!zdr_LAYOUTGET4res (zdrs, &objp->nfs_resop4_u.oplayoutget))
|
||||
return FALSE;
|
||||
break;
|
||||
case OP_LAYOUTRETURN:
|
||||
if (!zdr_LAYOUTRETURN4res (zdrs, &objp->nfs_resop4_u.oplayoutreturn))
|
||||
return FALSE;
|
||||
break;
|
||||
case OP_ILLEGAL:
|
||||
if (!zdr_ILLEGAL4res (zdrs, &objp->nfs_resop4_u.opillegal))
|
||||
return FALSE;
|
||||
|
|
|
@ -1573,6 +1573,59 @@ struct LAYOUTGET4res {
|
|||
} LAYOUTGET4res_u;
|
||||
};
|
||||
typedef struct LAYOUTGET4res LAYOUTGET4res;
|
||||
#define LAYOUT4_RET_REC_FILE 1
|
||||
#define LAYOUT4_RET_REC_FSID 2
|
||||
#define LAYOUT4_RET_REC_ALL 3
|
||||
|
||||
enum layoutreturn_type4 {
|
||||
LAYOUTRETURN4_FILE = LAYOUT4_RET_REC_FILE,
|
||||
LAYOUTRETURN4_FSID = LAYOUT4_RET_REC_FSID,
|
||||
LAYOUTRETURN4_ALL = LAYOUT4_RET_REC_ALL,
|
||||
};
|
||||
typedef enum layoutreturn_type4 layoutreturn_type4;
|
||||
|
||||
struct layoutreturn_file4 {
|
||||
offset4 lrf_offset;
|
||||
length4 lrf_length;
|
||||
stateid4 lrf_stateid;
|
||||
struct {
|
||||
u_int lrf_body_len;
|
||||
char *lrf_body_val;
|
||||
} lrf_body;
|
||||
};
|
||||
typedef struct layoutreturn_file4 layoutreturn_file4;
|
||||
|
||||
struct layoutreturn4 {
|
||||
layoutreturn_type4 lr_returntype;
|
||||
union {
|
||||
layoutreturn_file4 lr_layout;
|
||||
} layoutreturn4_u;
|
||||
};
|
||||
typedef struct layoutreturn4 layoutreturn4;
|
||||
|
||||
struct LAYOUTRETURN4args {
|
||||
uint32_t lora_reclaim;
|
||||
layouttype4 lora_layout_type;
|
||||
layoutiomode4 lora_iomode;
|
||||
layoutreturn4 lora_layoutreturn;
|
||||
};
|
||||
typedef struct LAYOUTRETURN4args LAYOUTRETURN4args;
|
||||
|
||||
struct layoutreturn_stateid {
|
||||
uint32_t lrs_present;
|
||||
union {
|
||||
stateid4 lrs_stateid;
|
||||
} layoutreturn_stateid_u;
|
||||
};
|
||||
typedef struct layoutreturn_stateid layoutreturn_stateid;
|
||||
|
||||
struct LAYOUTRETURN4res {
|
||||
nfsstat4 lorr_status;
|
||||
union {
|
||||
layoutreturn_stateid lorr_stateid;
|
||||
} LAYOUTRETURN4res_u;
|
||||
};
|
||||
typedef struct LAYOUTRETURN4res LAYOUTRETURN4res;
|
||||
|
||||
struct ILLEGAL4res {
|
||||
nfsstat4 status;
|
||||
|
@ -1625,6 +1678,7 @@ enum nfs_opnum4 {
|
|||
OP_GETDEVICELIST = 48,
|
||||
OP_LAYOUTCOMMIT = 49,
|
||||
OP_LAYOUTGET = 50,
|
||||
OP_LAYOUTRETURN = 51,
|
||||
OP_ILLEGAL = 10044,
|
||||
};
|
||||
typedef enum nfs_opnum4 nfs_opnum4;
|
||||
|
@ -1669,6 +1723,7 @@ struct nfs_argop4 {
|
|||
GETDEVICELIST4args opgetdevicelist;
|
||||
LAYOUTCOMMIT4args oplayoutcommit;
|
||||
LAYOUTGET4args oplayoutget;
|
||||
LAYOUTRETURN4args oplayoutreturn;
|
||||
} nfs_argop4_u;
|
||||
};
|
||||
typedef struct nfs_argop4 nfs_argop4;
|
||||
|
@ -1720,6 +1775,7 @@ struct nfs_resop4 {
|
|||
GETDEVICELIST4res opgetdevicelist;
|
||||
LAYOUTCOMMIT4res oplayoutcommit;
|
||||
LAYOUTGET4res oplayoutget;
|
||||
LAYOUTRETURN4res oplayoutreturn;
|
||||
ILLEGAL4res opillegal;
|
||||
} nfs_resop4_u;
|
||||
};
|
||||
|
@ -2119,6 +2175,12 @@ extern uint32_t zdr_LAYOUTCOMMIT4res (ZDR *, LAYOUTCOMMIT4res*);
|
|||
extern uint32_t zdr_LAYOUTGET4args (ZDR *, LAYOUTGET4args*);
|
||||
extern uint32_t zdr_LAYOUTGET4resok (ZDR *, LAYOUTGET4resok*);
|
||||
extern uint32_t zdr_LAYOUTGET4res (ZDR *, LAYOUTGET4res*);
|
||||
extern uint32_t zdr_layoutreturn_type4 (ZDR *, layoutreturn_type4*);
|
||||
extern uint32_t zdr_layoutreturn_file4 (ZDR *, layoutreturn_file4*);
|
||||
extern uint32_t zdr_layoutreturn4 (ZDR *, layoutreturn4*);
|
||||
extern uint32_t zdr_LAYOUTRETURN4args (ZDR *, LAYOUTRETURN4args*);
|
||||
extern uint32_t zdr_layoutreturn_stateid (ZDR *, layoutreturn_stateid*);
|
||||
extern uint32_t zdr_LAYOUTRETURN4res (ZDR *, LAYOUTRETURN4res*);
|
||||
extern uint32_t zdr_ILLEGAL4res (ZDR *, ILLEGAL4res*);
|
||||
extern uint32_t zdr_nfs_opnum4 (ZDR *, nfs_opnum4*);
|
||||
extern uint32_t zdr_nfs_argop4 (ZDR *, nfs_argop4*);
|
||||
|
@ -2382,6 +2444,12 @@ extern uint32_t zdr_LAYOUTCOMMIT4res ();
|
|||
extern uint32_t zdr_LAYOUTGET4args ();
|
||||
extern uint32_t zdr_LAYOUTGET4resok ();
|
||||
extern uint32_t zdr_LAYOUTGET4res ();
|
||||
extern uint32_t zdr_layoutreturn_type4 ();
|
||||
extern uint32_t zdr_layoutreturn_file4 ();
|
||||
extern uint32_t zdr_layoutreturn4 ();
|
||||
extern uint32_t zdr_LAYOUTRETURN4args ();
|
||||
extern uint32_t zdr_layoutreturn_stateid ();
|
||||
extern uint32_t zdr_LAYOUTRETURN4res ();
|
||||
extern uint32_t zdr_ILLEGAL4res ();
|
||||
extern uint32_t zdr_nfs_opnum4 ();
|
||||
extern uint32_t zdr_nfs_argop4 ();
|
||||
|
|
51
nfs4/nfs4.x
51
nfs4/nfs4.x
|
@ -1694,6 +1694,54 @@ default:
|
|||
void;
|
||||
};
|
||||
|
||||
/*
|
||||
* LAYOUTRETURN
|
||||
*/
|
||||
const LAYOUT4_RET_REC_FILE = 1;
|
||||
const LAYOUT4_RET_REC_FSID = 2;
|
||||
const LAYOUT4_RET_REC_ALL = 3;
|
||||
|
||||
enum layoutreturn_type4 {
|
||||
LAYOUTRETURN4_FILE = LAYOUT4_RET_REC_FILE,
|
||||
LAYOUTRETURN4_FSID = LAYOUT4_RET_REC_FSID,
|
||||
LAYOUTRETURN4_ALL = LAYOUT4_RET_REC_ALL
|
||||
};
|
||||
|
||||
struct layoutreturn_file4 {
|
||||
offset4 lrf_offset;
|
||||
length4 lrf_length;
|
||||
stateid4 lrf_stateid;
|
||||
opaque lrf_body<>;
|
||||
};
|
||||
|
||||
union layoutreturn4 switch(layoutreturn_type4 lr_returntype) {
|
||||
case LAYOUTRETURN4_FILE:
|
||||
layoutreturn_file4 lr_layout;
|
||||
default:
|
||||
void;
|
||||
};
|
||||
|
||||
struct LAYOUTRETURN4args {
|
||||
bool lora_reclaim;
|
||||
layouttype4 lora_layout_type;
|
||||
layoutiomode4 lora_iomode;
|
||||
layoutreturn4 lora_layoutreturn;
|
||||
};
|
||||
|
||||
union layoutreturn_stateid switch (bool lrs_present) {
|
||||
case TRUE:
|
||||
stateid4 lrs_stateid;
|
||||
case FALSE:
|
||||
void;
|
||||
};
|
||||
|
||||
union LAYOUTRETURN4res switch (nfsstat4 lorr_status) {
|
||||
case NFS4_OK:
|
||||
layoutreturn_stateid lorr_stateid;
|
||||
default:
|
||||
void;
|
||||
};
|
||||
|
||||
/*
|
||||
* ILLEGAL: Response for illegal operation numbers
|
||||
*/
|
||||
|
@ -1751,6 +1799,7 @@ enum nfs_opnum4 {
|
|||
OP_GETDEVICELIST = 48,
|
||||
OP_LAYOUTCOMMIT = 49,
|
||||
OP_LAYOUTGET = 50,
|
||||
OP_LAYOUTRETURN = 51,
|
||||
OP_ILLEGAL = 10044
|
||||
};
|
||||
|
||||
|
@ -1804,6 +1853,7 @@ union nfs_argop4 switch (nfs_opnum4 argop) {
|
|||
case OP_GETDEVICELIST: GETDEVICELIST4args opgetdevicelist;
|
||||
case OP_LAYOUTCOMMIT: LAYOUTCOMMIT4args oplayoutcommit;
|
||||
case OP_LAYOUTGET: LAYOUTGET4args oplayoutget;
|
||||
case OP_LAYOUTRETURN: LAYOUTRETURN4args oplayoutreturn;
|
||||
case OP_ILLEGAL: void;
|
||||
};
|
||||
|
||||
|
@ -1857,6 +1907,7 @@ union nfs_resop4 switch (nfs_opnum4 resop){
|
|||
case OP_GETDEVICELIST: GETDEVICELIST4res opgetdevicelist;
|
||||
case OP_LAYOUTCOMMIT: LAYOUTCOMMIT4res oplayoutcommit;
|
||||
case OP_LAYOUTGET: LAYOUTGET4res oplayoutget;
|
||||
case OP_LAYOUTRETURN: LAYOUTRETURN4res oplayoutreturn;
|
||||
case OP_ILLEGAL: ILLEGAL4res opillegal;
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue