|
@@ -71,8 +71,8 @@ static int nfs4_stat_to_errno(int);
|
|
|
/* lock,open owner id:
|
|
|
* we currently use size 2 (u64) out of (NFS4_OPAQUE_LIMIT >> 2)
|
|
|
*/
|
|
|
-#define open_owner_id_maxsz (1 + 4)
|
|
|
-#define lock_owner_id_maxsz (1 + 4)
|
|
|
+#define open_owner_id_maxsz (1 + 1 + 4)
|
|
|
+#define lock_owner_id_maxsz (1 + 1 + 4)
|
|
|
#define decode_lockowner_maxsz (1 + XDR_QUADLEN(IDMAP_NAMESZ))
|
|
|
#define compound_encode_hdr_maxsz (3 + (NFS4_MAXTAGLEN >> 2))
|
|
|
#define compound_decode_hdr_maxsz (3 + (NFS4_MAXTAGLEN >> 2))
|
|
@@ -1088,10 +1088,11 @@ static void encode_lockowner(struct xdr_stream *xdr, const struct nfs_lowner *lo
|
|
|
{
|
|
|
__be32 *p;
|
|
|
|
|
|
- p = reserve_space(xdr, 28);
|
|
|
+ p = reserve_space(xdr, 32);
|
|
|
p = xdr_encode_hyper(p, lowner->clientid);
|
|
|
- *p++ = cpu_to_be32(16);
|
|
|
+ *p++ = cpu_to_be32(20);
|
|
|
p = xdr_encode_opaque_fixed(p, "lock id:", 8);
|
|
|
+ *p++ = cpu_to_be32(lowner->s_dev);
|
|
|
xdr_encode_hyper(p, lowner->id);
|
|
|
}
|
|
|
|
|
@@ -1210,10 +1211,11 @@ static inline void encode_openhdr(struct xdr_stream *xdr, const struct nfs_opena
|
|
|
*p++ = cpu_to_be32(OP_OPEN);
|
|
|
*p = cpu_to_be32(arg->seqid->sequence->counter);
|
|
|
encode_share_access(xdr, arg->fmode);
|
|
|
- p = reserve_space(xdr, 28);
|
|
|
+ p = reserve_space(xdr, 32);
|
|
|
p = xdr_encode_hyper(p, arg->clientid);
|
|
|
- *p++ = cpu_to_be32(16);
|
|
|
+ *p++ = cpu_to_be32(20);
|
|
|
p = xdr_encode_opaque_fixed(p, "open id:", 8);
|
|
|
+ *p++ = cpu_to_be32(arg->server->s_dev);
|
|
|
xdr_encode_hyper(p, arg->id);
|
|
|
}
|
|
|
|
|
@@ -1510,7 +1512,7 @@ encode_restorefh(struct xdr_stream *xdr, struct compound_hdr *hdr)
|
|
|
hdr->replen += decode_restorefh_maxsz;
|
|
|
}
|
|
|
|
|
|
-static int
|
|
|
+static void
|
|
|
encode_setacl(struct xdr_stream *xdr, struct nfs_setaclargs *arg, struct compound_hdr *hdr)
|
|
|
{
|
|
|
__be32 *p;
|
|
@@ -1521,14 +1523,12 @@ encode_setacl(struct xdr_stream *xdr, struct nfs_setaclargs *arg, struct compoun
|
|
|
p = reserve_space(xdr, 2*4);
|
|
|
*p++ = cpu_to_be32(1);
|
|
|
*p = cpu_to_be32(FATTR4_WORD0_ACL);
|
|
|
- if (arg->acl_len % 4)
|
|
|
- return -EINVAL;
|
|
|
+ BUG_ON(arg->acl_len % 4);
|
|
|
p = reserve_space(xdr, 4);
|
|
|
*p = cpu_to_be32(arg->acl_len);
|
|
|
xdr_write_pages(xdr, arg->acl_pages, arg->acl_pgbase, arg->acl_len);
|
|
|
hdr->nops++;
|
|
|
hdr->replen += decode_setacl_maxsz;
|
|
|
- return 0;
|
|
|
}
|
|
|
|
|
|
static void
|
|
@@ -1789,7 +1789,6 @@ encode_layoutget(struct xdr_stream *xdr,
|
|
|
const struct nfs4_layoutget_args *args,
|
|
|
struct compound_hdr *hdr)
|
|
|
{
|
|
|
- nfs4_stateid stateid;
|
|
|
__be32 *p;
|
|
|
|
|
|
p = reserve_space(xdr, 44 + NFS4_STATEID_SIZE);
|
|
@@ -1800,9 +1799,7 @@ encode_layoutget(struct xdr_stream *xdr,
|
|
|
p = xdr_encode_hyper(p, args->range.offset);
|
|
|
p = xdr_encode_hyper(p, args->range.length);
|
|
|
p = xdr_encode_hyper(p, args->minlength);
|
|
|
- pnfs_get_layout_stateid(&stateid, NFS_I(args->inode)->layout,
|
|
|
- args->ctx->state);
|
|
|
- p = xdr_encode_opaque_fixed(p, &stateid.data, NFS4_STATEID_SIZE);
|
|
|
+ p = xdr_encode_opaque_fixed(p, &args->stateid.data, NFS4_STATEID_SIZE);
|
|
|
*p = cpu_to_be32(args->maxcount);
|
|
|
|
|
|
dprintk("%s: 1st type:0x%x iomode:%d off:%lu len:%lu mc:%d\n",
|
|
@@ -1833,393 +1830,362 @@ static u32 nfs4_xdr_minorversion(const struct nfs4_sequence_args *args)
|
|
|
/*
|
|
|
* Encode an ACCESS request
|
|
|
*/
|
|
|
-static int nfs4_xdr_enc_access(struct rpc_rqst *req, __be32 *p, const struct nfs4_accessargs *args)
|
|
|
+static void nfs4_xdr_enc_access(struct rpc_rqst *req, struct xdr_stream *xdr,
|
|
|
+ const struct nfs4_accessargs *args)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr = {
|
|
|
.minorversion = nfs4_xdr_minorversion(&args->seq_args),
|
|
|
};
|
|
|
|
|
|
- xdr_init_encode(&xdr, &req->rq_snd_buf, p);
|
|
|
- encode_compound_hdr(&xdr, req, &hdr);
|
|
|
- encode_sequence(&xdr, &args->seq_args, &hdr);
|
|
|
- encode_putfh(&xdr, args->fh, &hdr);
|
|
|
- encode_access(&xdr, args->access, &hdr);
|
|
|
- encode_getfattr(&xdr, args->bitmask, &hdr);
|
|
|
+ encode_compound_hdr(xdr, req, &hdr);
|
|
|
+ encode_sequence(xdr, &args->seq_args, &hdr);
|
|
|
+ encode_putfh(xdr, args->fh, &hdr);
|
|
|
+ encode_access(xdr, args->access, &hdr);
|
|
|
+ encode_getfattr(xdr, args->bitmask, &hdr);
|
|
|
encode_nops(&hdr);
|
|
|
- return 0;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* Encode LOOKUP request
|
|
|
*/
|
|
|
-static int nfs4_xdr_enc_lookup(struct rpc_rqst *req, __be32 *p, const struct nfs4_lookup_arg *args)
|
|
|
+static void nfs4_xdr_enc_lookup(struct rpc_rqst *req, struct xdr_stream *xdr,
|
|
|
+ const struct nfs4_lookup_arg *args)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr = {
|
|
|
.minorversion = nfs4_xdr_minorversion(&args->seq_args),
|
|
|
};
|
|
|
|
|
|
- xdr_init_encode(&xdr, &req->rq_snd_buf, p);
|
|
|
- encode_compound_hdr(&xdr, req, &hdr);
|
|
|
- encode_sequence(&xdr, &args->seq_args, &hdr);
|
|
|
- encode_putfh(&xdr, args->dir_fh, &hdr);
|
|
|
- encode_lookup(&xdr, args->name, &hdr);
|
|
|
- encode_getfh(&xdr, &hdr);
|
|
|
- encode_getfattr(&xdr, args->bitmask, &hdr);
|
|
|
+ encode_compound_hdr(xdr, req, &hdr);
|
|
|
+ encode_sequence(xdr, &args->seq_args, &hdr);
|
|
|
+ encode_putfh(xdr, args->dir_fh, &hdr);
|
|
|
+ encode_lookup(xdr, args->name, &hdr);
|
|
|
+ encode_getfh(xdr, &hdr);
|
|
|
+ encode_getfattr(xdr, args->bitmask, &hdr);
|
|
|
encode_nops(&hdr);
|
|
|
- return 0;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* Encode LOOKUP_ROOT request
|
|
|
*/
|
|
|
-static int nfs4_xdr_enc_lookup_root(struct rpc_rqst *req, __be32 *p, const struct nfs4_lookup_root_arg *args)
|
|
|
+static void nfs4_xdr_enc_lookup_root(struct rpc_rqst *req,
|
|
|
+ struct xdr_stream *xdr,
|
|
|
+ const struct nfs4_lookup_root_arg *args)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr = {
|
|
|
.minorversion = nfs4_xdr_minorversion(&args->seq_args),
|
|
|
};
|
|
|
|
|
|
- xdr_init_encode(&xdr, &req->rq_snd_buf, p);
|
|
|
- encode_compound_hdr(&xdr, req, &hdr);
|
|
|
- encode_sequence(&xdr, &args->seq_args, &hdr);
|
|
|
- encode_putrootfh(&xdr, &hdr);
|
|
|
- encode_getfh(&xdr, &hdr);
|
|
|
- encode_getfattr(&xdr, args->bitmask, &hdr);
|
|
|
+ encode_compound_hdr(xdr, req, &hdr);
|
|
|
+ encode_sequence(xdr, &args->seq_args, &hdr);
|
|
|
+ encode_putrootfh(xdr, &hdr);
|
|
|
+ encode_getfh(xdr, &hdr);
|
|
|
+ encode_getfattr(xdr, args->bitmask, &hdr);
|
|
|
encode_nops(&hdr);
|
|
|
- return 0;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* Encode REMOVE request
|
|
|
*/
|
|
|
-static int nfs4_xdr_enc_remove(struct rpc_rqst *req, __be32 *p, const struct nfs_removeargs *args)
|
|
|
+static void nfs4_xdr_enc_remove(struct rpc_rqst *req, struct xdr_stream *xdr,
|
|
|
+ const struct nfs_removeargs *args)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr = {
|
|
|
.minorversion = nfs4_xdr_minorversion(&args->seq_args),
|
|
|
};
|
|
|
|
|
|
- xdr_init_encode(&xdr, &req->rq_snd_buf, p);
|
|
|
- encode_compound_hdr(&xdr, req, &hdr);
|
|
|
- encode_sequence(&xdr, &args->seq_args, &hdr);
|
|
|
- encode_putfh(&xdr, args->fh, &hdr);
|
|
|
- encode_remove(&xdr, &args->name, &hdr);
|
|
|
- encode_getfattr(&xdr, args->bitmask, &hdr);
|
|
|
+ encode_compound_hdr(xdr, req, &hdr);
|
|
|
+ encode_sequence(xdr, &args->seq_args, &hdr);
|
|
|
+ encode_putfh(xdr, args->fh, &hdr);
|
|
|
+ encode_remove(xdr, &args->name, &hdr);
|
|
|
+ encode_getfattr(xdr, args->bitmask, &hdr);
|
|
|
encode_nops(&hdr);
|
|
|
- return 0;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* Encode RENAME request
|
|
|
*/
|
|
|
-static int nfs4_xdr_enc_rename(struct rpc_rqst *req, __be32 *p, const struct nfs_renameargs *args)
|
|
|
+static void nfs4_xdr_enc_rename(struct rpc_rqst *req, struct xdr_stream *xdr,
|
|
|
+ const struct nfs_renameargs *args)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr = {
|
|
|
.minorversion = nfs4_xdr_minorversion(&args->seq_args),
|
|
|
};
|
|
|
|
|
|
- xdr_init_encode(&xdr, &req->rq_snd_buf, p);
|
|
|
- encode_compound_hdr(&xdr, req, &hdr);
|
|
|
- encode_sequence(&xdr, &args->seq_args, &hdr);
|
|
|
- encode_putfh(&xdr, args->old_dir, &hdr);
|
|
|
- encode_savefh(&xdr, &hdr);
|
|
|
- encode_putfh(&xdr, args->new_dir, &hdr);
|
|
|
- encode_rename(&xdr, args->old_name, args->new_name, &hdr);
|
|
|
- encode_getfattr(&xdr, args->bitmask, &hdr);
|
|
|
- encode_restorefh(&xdr, &hdr);
|
|
|
- encode_getfattr(&xdr, args->bitmask, &hdr);
|
|
|
+ encode_compound_hdr(xdr, req, &hdr);
|
|
|
+ encode_sequence(xdr, &args->seq_args, &hdr);
|
|
|
+ encode_putfh(xdr, args->old_dir, &hdr);
|
|
|
+ encode_savefh(xdr, &hdr);
|
|
|
+ encode_putfh(xdr, args->new_dir, &hdr);
|
|
|
+ encode_rename(xdr, args->old_name, args->new_name, &hdr);
|
|
|
+ encode_getfattr(xdr, args->bitmask, &hdr);
|
|
|
+ encode_restorefh(xdr, &hdr);
|
|
|
+ encode_getfattr(xdr, args->bitmask, &hdr);
|
|
|
encode_nops(&hdr);
|
|
|
- return 0;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* Encode LINK request
|
|
|
*/
|
|
|
-static int nfs4_xdr_enc_link(struct rpc_rqst *req, __be32 *p, const struct nfs4_link_arg *args)
|
|
|
+static void nfs4_xdr_enc_link(struct rpc_rqst *req, struct xdr_stream *xdr,
|
|
|
+ const struct nfs4_link_arg *args)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr = {
|
|
|
.minorversion = nfs4_xdr_minorversion(&args->seq_args),
|
|
|
};
|
|
|
|
|
|
- xdr_init_encode(&xdr, &req->rq_snd_buf, p);
|
|
|
- encode_compound_hdr(&xdr, req, &hdr);
|
|
|
- encode_sequence(&xdr, &args->seq_args, &hdr);
|
|
|
- encode_putfh(&xdr, args->fh, &hdr);
|
|
|
- encode_savefh(&xdr, &hdr);
|
|
|
- encode_putfh(&xdr, args->dir_fh, &hdr);
|
|
|
- encode_link(&xdr, args->name, &hdr);
|
|
|
- encode_getfattr(&xdr, args->bitmask, &hdr);
|
|
|
- encode_restorefh(&xdr, &hdr);
|
|
|
- encode_getfattr(&xdr, args->bitmask, &hdr);
|
|
|
+ encode_compound_hdr(xdr, req, &hdr);
|
|
|
+ encode_sequence(xdr, &args->seq_args, &hdr);
|
|
|
+ encode_putfh(xdr, args->fh, &hdr);
|
|
|
+ encode_savefh(xdr, &hdr);
|
|
|
+ encode_putfh(xdr, args->dir_fh, &hdr);
|
|
|
+ encode_link(xdr, args->name, &hdr);
|
|
|
+ encode_getfattr(xdr, args->bitmask, &hdr);
|
|
|
+ encode_restorefh(xdr, &hdr);
|
|
|
+ encode_getfattr(xdr, args->bitmask, &hdr);
|
|
|
encode_nops(&hdr);
|
|
|
- return 0;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* Encode CREATE request
|
|
|
*/
|
|
|
-static int nfs4_xdr_enc_create(struct rpc_rqst *req, __be32 *p, const struct nfs4_create_arg *args)
|
|
|
+static void nfs4_xdr_enc_create(struct rpc_rqst *req, struct xdr_stream *xdr,
|
|
|
+ const struct nfs4_create_arg *args)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr = {
|
|
|
.minorversion = nfs4_xdr_minorversion(&args->seq_args),
|
|
|
};
|
|
|
|
|
|
- xdr_init_encode(&xdr, &req->rq_snd_buf, p);
|
|
|
- encode_compound_hdr(&xdr, req, &hdr);
|
|
|
- encode_sequence(&xdr, &args->seq_args, &hdr);
|
|
|
- encode_putfh(&xdr, args->dir_fh, &hdr);
|
|
|
- encode_savefh(&xdr, &hdr);
|
|
|
- encode_create(&xdr, args, &hdr);
|
|
|
- encode_getfh(&xdr, &hdr);
|
|
|
- encode_getfattr(&xdr, args->bitmask, &hdr);
|
|
|
- encode_restorefh(&xdr, &hdr);
|
|
|
- encode_getfattr(&xdr, args->bitmask, &hdr);
|
|
|
+ encode_compound_hdr(xdr, req, &hdr);
|
|
|
+ encode_sequence(xdr, &args->seq_args, &hdr);
|
|
|
+ encode_putfh(xdr, args->dir_fh, &hdr);
|
|
|
+ encode_savefh(xdr, &hdr);
|
|
|
+ encode_create(xdr, args, &hdr);
|
|
|
+ encode_getfh(xdr, &hdr);
|
|
|
+ encode_getfattr(xdr, args->bitmask, &hdr);
|
|
|
+ encode_restorefh(xdr, &hdr);
|
|
|
+ encode_getfattr(xdr, args->bitmask, &hdr);
|
|
|
encode_nops(&hdr);
|
|
|
- return 0;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* Encode SYMLINK request
|
|
|
*/
|
|
|
-static int nfs4_xdr_enc_symlink(struct rpc_rqst *req, __be32 *p, const struct nfs4_create_arg *args)
|
|
|
+static void nfs4_xdr_enc_symlink(struct rpc_rqst *req, struct xdr_stream *xdr,
|
|
|
+ const struct nfs4_create_arg *args)
|
|
|
{
|
|
|
- return nfs4_xdr_enc_create(req, p, args);
|
|
|
+ nfs4_xdr_enc_create(req, xdr, args);
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* Encode GETATTR request
|
|
|
*/
|
|
|
-static int nfs4_xdr_enc_getattr(struct rpc_rqst *req, __be32 *p, const struct nfs4_getattr_arg *args)
|
|
|
+static void nfs4_xdr_enc_getattr(struct rpc_rqst *req, struct xdr_stream *xdr,
|
|
|
+ const struct nfs4_getattr_arg *args)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr = {
|
|
|
.minorversion = nfs4_xdr_minorversion(&args->seq_args),
|
|
|
};
|
|
|
|
|
|
- xdr_init_encode(&xdr, &req->rq_snd_buf, p);
|
|
|
- encode_compound_hdr(&xdr, req, &hdr);
|
|
|
- encode_sequence(&xdr, &args->seq_args, &hdr);
|
|
|
- encode_putfh(&xdr, args->fh, &hdr);
|
|
|
- encode_getfattr(&xdr, args->bitmask, &hdr);
|
|
|
+ encode_compound_hdr(xdr, req, &hdr);
|
|
|
+ encode_sequence(xdr, &args->seq_args, &hdr);
|
|
|
+ encode_putfh(xdr, args->fh, &hdr);
|
|
|
+ encode_getfattr(xdr, args->bitmask, &hdr);
|
|
|
encode_nops(&hdr);
|
|
|
- return 0;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* Encode a CLOSE request
|
|
|
*/
|
|
|
-static int nfs4_xdr_enc_close(struct rpc_rqst *req, __be32 *p, struct nfs_closeargs *args)
|
|
|
+static void nfs4_xdr_enc_close(struct rpc_rqst *req, struct xdr_stream *xdr,
|
|
|
+ struct nfs_closeargs *args)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr = {
|
|
|
.minorversion = nfs4_xdr_minorversion(&args->seq_args),
|
|
|
};
|
|
|
|
|
|
- xdr_init_encode(&xdr, &req->rq_snd_buf, p);
|
|
|
- encode_compound_hdr(&xdr, req, &hdr);
|
|
|
- encode_sequence(&xdr, &args->seq_args, &hdr);
|
|
|
- encode_putfh(&xdr, args->fh, &hdr);
|
|
|
- encode_close(&xdr, args, &hdr);
|
|
|
- encode_getfattr(&xdr, args->bitmask, &hdr);
|
|
|
+ encode_compound_hdr(xdr, req, &hdr);
|
|
|
+ encode_sequence(xdr, &args->seq_args, &hdr);
|
|
|
+ encode_putfh(xdr, args->fh, &hdr);
|
|
|
+ encode_close(xdr, args, &hdr);
|
|
|
+ encode_getfattr(xdr, args->bitmask, &hdr);
|
|
|
encode_nops(&hdr);
|
|
|
- return 0;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* Encode an OPEN request
|
|
|
*/
|
|
|
-static int nfs4_xdr_enc_open(struct rpc_rqst *req, __be32 *p, struct nfs_openargs *args)
|
|
|
+static void nfs4_xdr_enc_open(struct rpc_rqst *req, struct xdr_stream *xdr,
|
|
|
+ struct nfs_openargs *args)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr = {
|
|
|
.minorversion = nfs4_xdr_minorversion(&args->seq_args),
|
|
|
};
|
|
|
|
|
|
- xdr_init_encode(&xdr, &req->rq_snd_buf, p);
|
|
|
- encode_compound_hdr(&xdr, req, &hdr);
|
|
|
- encode_sequence(&xdr, &args->seq_args, &hdr);
|
|
|
- encode_putfh(&xdr, args->fh, &hdr);
|
|
|
- encode_savefh(&xdr, &hdr);
|
|
|
- encode_open(&xdr, args, &hdr);
|
|
|
- encode_getfh(&xdr, &hdr);
|
|
|
- encode_getfattr(&xdr, args->bitmask, &hdr);
|
|
|
- encode_restorefh(&xdr, &hdr);
|
|
|
- encode_getfattr(&xdr, args->bitmask, &hdr);
|
|
|
+ encode_compound_hdr(xdr, req, &hdr);
|
|
|
+ encode_sequence(xdr, &args->seq_args, &hdr);
|
|
|
+ encode_putfh(xdr, args->fh, &hdr);
|
|
|
+ encode_savefh(xdr, &hdr);
|
|
|
+ encode_open(xdr, args, &hdr);
|
|
|
+ encode_getfh(xdr, &hdr);
|
|
|
+ encode_getfattr(xdr, args->bitmask, &hdr);
|
|
|
+ encode_restorefh(xdr, &hdr);
|
|
|
+ encode_getfattr(xdr, args->bitmask, &hdr);
|
|
|
encode_nops(&hdr);
|
|
|
- return 0;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* Encode an OPEN_CONFIRM request
|
|
|
*/
|
|
|
-static int nfs4_xdr_enc_open_confirm(struct rpc_rqst *req, __be32 *p, struct nfs_open_confirmargs *args)
|
|
|
+static void nfs4_xdr_enc_open_confirm(struct rpc_rqst *req,
|
|
|
+ struct xdr_stream *xdr,
|
|
|
+ struct nfs_open_confirmargs *args)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr = {
|
|
|
.nops = 0,
|
|
|
};
|
|
|
|
|
|
- xdr_init_encode(&xdr, &req->rq_snd_buf, p);
|
|
|
- encode_compound_hdr(&xdr, req, &hdr);
|
|
|
- encode_putfh(&xdr, args->fh, &hdr);
|
|
|
- encode_open_confirm(&xdr, args, &hdr);
|
|
|
+ encode_compound_hdr(xdr, req, &hdr);
|
|
|
+ encode_putfh(xdr, args->fh, &hdr);
|
|
|
+ encode_open_confirm(xdr, args, &hdr);
|
|
|
encode_nops(&hdr);
|
|
|
- return 0;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* Encode an OPEN request with no attributes.
|
|
|
*/
|
|
|
-static int nfs4_xdr_enc_open_noattr(struct rpc_rqst *req, __be32 *p, struct nfs_openargs *args)
|
|
|
+static void nfs4_xdr_enc_open_noattr(struct rpc_rqst *req,
|
|
|
+ struct xdr_stream *xdr,
|
|
|
+ struct nfs_openargs *args)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr = {
|
|
|
.minorversion = nfs4_xdr_minorversion(&args->seq_args),
|
|
|
};
|
|
|
|
|
|
- xdr_init_encode(&xdr, &req->rq_snd_buf, p);
|
|
|
- encode_compound_hdr(&xdr, req, &hdr);
|
|
|
- encode_sequence(&xdr, &args->seq_args, &hdr);
|
|
|
- encode_putfh(&xdr, args->fh, &hdr);
|
|
|
- encode_open(&xdr, args, &hdr);
|
|
|
- encode_getfattr(&xdr, args->bitmask, &hdr);
|
|
|
+ encode_compound_hdr(xdr, req, &hdr);
|
|
|
+ encode_sequence(xdr, &args->seq_args, &hdr);
|
|
|
+ encode_putfh(xdr, args->fh, &hdr);
|
|
|
+ encode_open(xdr, args, &hdr);
|
|
|
+ encode_getfattr(xdr, args->bitmask, &hdr);
|
|
|
encode_nops(&hdr);
|
|
|
- return 0;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* Encode an OPEN_DOWNGRADE request
|
|
|
*/
|
|
|
-static int nfs4_xdr_enc_open_downgrade(struct rpc_rqst *req, __be32 *p, struct nfs_closeargs *args)
|
|
|
+static void nfs4_xdr_enc_open_downgrade(struct rpc_rqst *req,
|
|
|
+ struct xdr_stream *xdr,
|
|
|
+ struct nfs_closeargs *args)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr = {
|
|
|
.minorversion = nfs4_xdr_minorversion(&args->seq_args),
|
|
|
};
|
|
|
|
|
|
- xdr_init_encode(&xdr, &req->rq_snd_buf, p);
|
|
|
- encode_compound_hdr(&xdr, req, &hdr);
|
|
|
- encode_sequence(&xdr, &args->seq_args, &hdr);
|
|
|
- encode_putfh(&xdr, args->fh, &hdr);
|
|
|
- encode_open_downgrade(&xdr, args, &hdr);
|
|
|
- encode_getfattr(&xdr, args->bitmask, &hdr);
|
|
|
+ encode_compound_hdr(xdr, req, &hdr);
|
|
|
+ encode_sequence(xdr, &args->seq_args, &hdr);
|
|
|
+ encode_putfh(xdr, args->fh, &hdr);
|
|
|
+ encode_open_downgrade(xdr, args, &hdr);
|
|
|
+ encode_getfattr(xdr, args->bitmask, &hdr);
|
|
|
encode_nops(&hdr);
|
|
|
- return 0;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* Encode a LOCK request
|
|
|
*/
|
|
|
-static int nfs4_xdr_enc_lock(struct rpc_rqst *req, __be32 *p, struct nfs_lock_args *args)
|
|
|
+static void nfs4_xdr_enc_lock(struct rpc_rqst *req, struct xdr_stream *xdr,
|
|
|
+ struct nfs_lock_args *args)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr = {
|
|
|
.minorversion = nfs4_xdr_minorversion(&args->seq_args),
|
|
|
};
|
|
|
|
|
|
- xdr_init_encode(&xdr, &req->rq_snd_buf, p);
|
|
|
- encode_compound_hdr(&xdr, req, &hdr);
|
|
|
- encode_sequence(&xdr, &args->seq_args, &hdr);
|
|
|
- encode_putfh(&xdr, args->fh, &hdr);
|
|
|
- encode_lock(&xdr, args, &hdr);
|
|
|
+ encode_compound_hdr(xdr, req, &hdr);
|
|
|
+ encode_sequence(xdr, &args->seq_args, &hdr);
|
|
|
+ encode_putfh(xdr, args->fh, &hdr);
|
|
|
+ encode_lock(xdr, args, &hdr);
|
|
|
encode_nops(&hdr);
|
|
|
- return 0;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* Encode a LOCKT request
|
|
|
*/
|
|
|
-static int nfs4_xdr_enc_lockt(struct rpc_rqst *req, __be32 *p, struct nfs_lockt_args *args)
|
|
|
+static void nfs4_xdr_enc_lockt(struct rpc_rqst *req, struct xdr_stream *xdr,
|
|
|
+ struct nfs_lockt_args *args)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr = {
|
|
|
.minorversion = nfs4_xdr_minorversion(&args->seq_args),
|
|
|
};
|
|
|
|
|
|
- xdr_init_encode(&xdr, &req->rq_snd_buf, p);
|
|
|
- encode_compound_hdr(&xdr, req, &hdr);
|
|
|
- encode_sequence(&xdr, &args->seq_args, &hdr);
|
|
|
- encode_putfh(&xdr, args->fh, &hdr);
|
|
|
- encode_lockt(&xdr, args, &hdr);
|
|
|
+ encode_compound_hdr(xdr, req, &hdr);
|
|
|
+ encode_sequence(xdr, &args->seq_args, &hdr);
|
|
|
+ encode_putfh(xdr, args->fh, &hdr);
|
|
|
+ encode_lockt(xdr, args, &hdr);
|
|
|
encode_nops(&hdr);
|
|
|
- return 0;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* Encode a LOCKU request
|
|
|
*/
|
|
|
-static int nfs4_xdr_enc_locku(struct rpc_rqst *req, __be32 *p, struct nfs_locku_args *args)
|
|
|
+static void nfs4_xdr_enc_locku(struct rpc_rqst *req, struct xdr_stream *xdr,
|
|
|
+ struct nfs_locku_args *args)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr = {
|
|
|
.minorversion = nfs4_xdr_minorversion(&args->seq_args),
|
|
|
};
|
|
|
|
|
|
- xdr_init_encode(&xdr, &req->rq_snd_buf, p);
|
|
|
- encode_compound_hdr(&xdr, req, &hdr);
|
|
|
- encode_sequence(&xdr, &args->seq_args, &hdr);
|
|
|
- encode_putfh(&xdr, args->fh, &hdr);
|
|
|
- encode_locku(&xdr, args, &hdr);
|
|
|
+ encode_compound_hdr(xdr, req, &hdr);
|
|
|
+ encode_sequence(xdr, &args->seq_args, &hdr);
|
|
|
+ encode_putfh(xdr, args->fh, &hdr);
|
|
|
+ encode_locku(xdr, args, &hdr);
|
|
|
encode_nops(&hdr);
|
|
|
- return 0;
|
|
|
}
|
|
|
|
|
|
-static int nfs4_xdr_enc_release_lockowner(struct rpc_rqst *req, __be32 *p, struct nfs_release_lockowner_args *args)
|
|
|
+static void nfs4_xdr_enc_release_lockowner(struct rpc_rqst *req,
|
|
|
+ struct xdr_stream *xdr,
|
|
|
+ struct nfs_release_lockowner_args *args)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr = {
|
|
|
.minorversion = 0,
|
|
|
};
|
|
|
|
|
|
- xdr_init_encode(&xdr, &req->rq_snd_buf, p);
|
|
|
- encode_compound_hdr(&xdr, req, &hdr);
|
|
|
- encode_release_lockowner(&xdr, &args->lock_owner, &hdr);
|
|
|
+ encode_compound_hdr(xdr, req, &hdr);
|
|
|
+ encode_release_lockowner(xdr, &args->lock_owner, &hdr);
|
|
|
encode_nops(&hdr);
|
|
|
- return 0;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* Encode a READLINK request
|
|
|
*/
|
|
|
-static int nfs4_xdr_enc_readlink(struct rpc_rqst *req, __be32 *p, const struct nfs4_readlink *args)
|
|
|
+static void nfs4_xdr_enc_readlink(struct rpc_rqst *req, struct xdr_stream *xdr,
|
|
|
+ const struct nfs4_readlink *args)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr = {
|
|
|
.minorversion = nfs4_xdr_minorversion(&args->seq_args),
|
|
|
};
|
|
|
|
|
|
- xdr_init_encode(&xdr, &req->rq_snd_buf, p);
|
|
|
- encode_compound_hdr(&xdr, req, &hdr);
|
|
|
- encode_sequence(&xdr, &args->seq_args, &hdr);
|
|
|
- encode_putfh(&xdr, args->fh, &hdr);
|
|
|
- encode_readlink(&xdr, args, req, &hdr);
|
|
|
+ encode_compound_hdr(xdr, req, &hdr);
|
|
|
+ encode_sequence(xdr, &args->seq_args, &hdr);
|
|
|
+ encode_putfh(xdr, args->fh, &hdr);
|
|
|
+ encode_readlink(xdr, args, req, &hdr);
|
|
|
|
|
|
xdr_inline_pages(&req->rq_rcv_buf, hdr.replen << 2, args->pages,
|
|
|
args->pgbase, args->pglen);
|
|
|
encode_nops(&hdr);
|
|
|
- return 0;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* Encode a READDIR request
|
|
|
*/
|
|
|
-static int nfs4_xdr_enc_readdir(struct rpc_rqst *req, __be32 *p, const struct nfs4_readdir_arg *args)
|
|
|
+static void nfs4_xdr_enc_readdir(struct rpc_rqst *req, struct xdr_stream *xdr,
|
|
|
+ const struct nfs4_readdir_arg *args)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr = {
|
|
|
.minorversion = nfs4_xdr_minorversion(&args->seq_args),
|
|
|
};
|
|
|
|
|
|
- xdr_init_encode(&xdr, &req->rq_snd_buf, p);
|
|
|
- encode_compound_hdr(&xdr, req, &hdr);
|
|
|
- encode_sequence(&xdr, &args->seq_args, &hdr);
|
|
|
- encode_putfh(&xdr, args->fh, &hdr);
|
|
|
- encode_readdir(&xdr, args, req, &hdr);
|
|
|
+ encode_compound_hdr(xdr, req, &hdr);
|
|
|
+ encode_sequence(xdr, &args->seq_args, &hdr);
|
|
|
+ encode_putfh(xdr, args->fh, &hdr);
|
|
|
+ encode_readdir(xdr, args, req, &hdr);
|
|
|
|
|
|
xdr_inline_pages(&req->rq_rcv_buf, hdr.replen << 2, args->pages,
|
|
|
args->pgbase, args->count);
|
|
@@ -2227,428 +2193,387 @@ static int nfs4_xdr_enc_readdir(struct rpc_rqst *req, __be32 *p, const struct nf
|
|
|
__func__, hdr.replen << 2, args->pages,
|
|
|
args->pgbase, args->count);
|
|
|
encode_nops(&hdr);
|
|
|
- return 0;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* Encode a READ request
|
|
|
*/
|
|
|
-static int nfs4_xdr_enc_read(struct rpc_rqst *req, __be32 *p, struct nfs_readargs *args)
|
|
|
+static void nfs4_xdr_enc_read(struct rpc_rqst *req, struct xdr_stream *xdr,
|
|
|
+ struct nfs_readargs *args)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr = {
|
|
|
.minorversion = nfs4_xdr_minorversion(&args->seq_args),
|
|
|
};
|
|
|
|
|
|
- xdr_init_encode(&xdr, &req->rq_snd_buf, p);
|
|
|
- encode_compound_hdr(&xdr, req, &hdr);
|
|
|
- encode_sequence(&xdr, &args->seq_args, &hdr);
|
|
|
- encode_putfh(&xdr, args->fh, &hdr);
|
|
|
- encode_read(&xdr, args, &hdr);
|
|
|
+ encode_compound_hdr(xdr, req, &hdr);
|
|
|
+ encode_sequence(xdr, &args->seq_args, &hdr);
|
|
|
+ encode_putfh(xdr, args->fh, &hdr);
|
|
|
+ encode_read(xdr, args, &hdr);
|
|
|
|
|
|
xdr_inline_pages(&req->rq_rcv_buf, hdr.replen << 2,
|
|
|
args->pages, args->pgbase, args->count);
|
|
|
req->rq_rcv_buf.flags |= XDRBUF_READ;
|
|
|
encode_nops(&hdr);
|
|
|
- return 0;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* Encode an SETATTR request
|
|
|
*/
|
|
|
-static int nfs4_xdr_enc_setattr(struct rpc_rqst *req, __be32 *p, struct nfs_setattrargs *args)
|
|
|
+static void nfs4_xdr_enc_setattr(struct rpc_rqst *req, struct xdr_stream *xdr,
|
|
|
+ struct nfs_setattrargs *args)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr = {
|
|
|
.minorversion = nfs4_xdr_minorversion(&args->seq_args),
|
|
|
};
|
|
|
|
|
|
- xdr_init_encode(&xdr, &req->rq_snd_buf, p);
|
|
|
- encode_compound_hdr(&xdr, req, &hdr);
|
|
|
- encode_sequence(&xdr, &args->seq_args, &hdr);
|
|
|
- encode_putfh(&xdr, args->fh, &hdr);
|
|
|
- encode_setattr(&xdr, args, args->server, &hdr);
|
|
|
- encode_getfattr(&xdr, args->bitmask, &hdr);
|
|
|
+ encode_compound_hdr(xdr, req, &hdr);
|
|
|
+ encode_sequence(xdr, &args->seq_args, &hdr);
|
|
|
+ encode_putfh(xdr, args->fh, &hdr);
|
|
|
+ encode_setattr(xdr, args, args->server, &hdr);
|
|
|
+ encode_getfattr(xdr, args->bitmask, &hdr);
|
|
|
encode_nops(&hdr);
|
|
|
- return 0;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* Encode a GETACL request
|
|
|
*/
|
|
|
-static int
|
|
|
-nfs4_xdr_enc_getacl(struct rpc_rqst *req, __be32 *p,
|
|
|
- struct nfs_getaclargs *args)
|
|
|
+static void nfs4_xdr_enc_getacl(struct rpc_rqst *req, struct xdr_stream *xdr,
|
|
|
+ struct nfs_getaclargs *args)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr = {
|
|
|
.minorversion = nfs4_xdr_minorversion(&args->seq_args),
|
|
|
};
|
|
|
uint32_t replen;
|
|
|
|
|
|
- xdr_init_encode(&xdr, &req->rq_snd_buf, p);
|
|
|
- encode_compound_hdr(&xdr, req, &hdr);
|
|
|
- encode_sequence(&xdr, &args->seq_args, &hdr);
|
|
|
- encode_putfh(&xdr, args->fh, &hdr);
|
|
|
+ encode_compound_hdr(xdr, req, &hdr);
|
|
|
+ encode_sequence(xdr, &args->seq_args, &hdr);
|
|
|
+ encode_putfh(xdr, args->fh, &hdr);
|
|
|
replen = hdr.replen + op_decode_hdr_maxsz + nfs4_fattr_bitmap_maxsz + 1;
|
|
|
- encode_getattr_two(&xdr, FATTR4_WORD0_ACL, 0, &hdr);
|
|
|
+ encode_getattr_two(xdr, FATTR4_WORD0_ACL, 0, &hdr);
|
|
|
|
|
|
xdr_inline_pages(&req->rq_rcv_buf, replen << 2,
|
|
|
args->acl_pages, args->acl_pgbase, args->acl_len);
|
|
|
encode_nops(&hdr);
|
|
|
- return 0;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* Encode a WRITE request
|
|
|
*/
|
|
|
-static int nfs4_xdr_enc_write(struct rpc_rqst *req, __be32 *p, struct nfs_writeargs *args)
|
|
|
+static void nfs4_xdr_enc_write(struct rpc_rqst *req, struct xdr_stream *xdr,
|
|
|
+ struct nfs_writeargs *args)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr = {
|
|
|
.minorversion = nfs4_xdr_minorversion(&args->seq_args),
|
|
|
};
|
|
|
|
|
|
- xdr_init_encode(&xdr, &req->rq_snd_buf, p);
|
|
|
- encode_compound_hdr(&xdr, req, &hdr);
|
|
|
- encode_sequence(&xdr, &args->seq_args, &hdr);
|
|
|
- encode_putfh(&xdr, args->fh, &hdr);
|
|
|
- encode_write(&xdr, args, &hdr);
|
|
|
+ encode_compound_hdr(xdr, req, &hdr);
|
|
|
+ encode_sequence(xdr, &args->seq_args, &hdr);
|
|
|
+ encode_putfh(xdr, args->fh, &hdr);
|
|
|
+ encode_write(xdr, args, &hdr);
|
|
|
req->rq_snd_buf.flags |= XDRBUF_WRITE;
|
|
|
- encode_getfattr(&xdr, args->bitmask, &hdr);
|
|
|
+ encode_getfattr(xdr, args->bitmask, &hdr);
|
|
|
encode_nops(&hdr);
|
|
|
- return 0;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* a COMMIT request
|
|
|
*/
|
|
|
-static int nfs4_xdr_enc_commit(struct rpc_rqst *req, __be32 *p, struct nfs_writeargs *args)
|
|
|
+static void nfs4_xdr_enc_commit(struct rpc_rqst *req, struct xdr_stream *xdr,
|
|
|
+ struct nfs_writeargs *args)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr = {
|
|
|
.minorversion = nfs4_xdr_minorversion(&args->seq_args),
|
|
|
};
|
|
|
|
|
|
- xdr_init_encode(&xdr, &req->rq_snd_buf, p);
|
|
|
- encode_compound_hdr(&xdr, req, &hdr);
|
|
|
- encode_sequence(&xdr, &args->seq_args, &hdr);
|
|
|
- encode_putfh(&xdr, args->fh, &hdr);
|
|
|
- encode_commit(&xdr, args, &hdr);
|
|
|
- encode_getfattr(&xdr, args->bitmask, &hdr);
|
|
|
+ encode_compound_hdr(xdr, req, &hdr);
|
|
|
+ encode_sequence(xdr, &args->seq_args, &hdr);
|
|
|
+ encode_putfh(xdr, args->fh, &hdr);
|
|
|
+ encode_commit(xdr, args, &hdr);
|
|
|
+ encode_getfattr(xdr, args->bitmask, &hdr);
|
|
|
encode_nops(&hdr);
|
|
|
- return 0;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* FSINFO request
|
|
|
*/
|
|
|
-static int nfs4_xdr_enc_fsinfo(struct rpc_rqst *req, __be32 *p, struct nfs4_fsinfo_arg *args)
|
|
|
+static void nfs4_xdr_enc_fsinfo(struct rpc_rqst *req, struct xdr_stream *xdr,
|
|
|
+ struct nfs4_fsinfo_arg *args)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr = {
|
|
|
.minorversion = nfs4_xdr_minorversion(&args->seq_args),
|
|
|
};
|
|
|
|
|
|
- xdr_init_encode(&xdr, &req->rq_snd_buf, p);
|
|
|
- encode_compound_hdr(&xdr, req, &hdr);
|
|
|
- encode_sequence(&xdr, &args->seq_args, &hdr);
|
|
|
- encode_putfh(&xdr, args->fh, &hdr);
|
|
|
- encode_fsinfo(&xdr, args->bitmask, &hdr);
|
|
|
+ encode_compound_hdr(xdr, req, &hdr);
|
|
|
+ encode_sequence(xdr, &args->seq_args, &hdr);
|
|
|
+ encode_putfh(xdr, args->fh, &hdr);
|
|
|
+ encode_fsinfo(xdr, args->bitmask, &hdr);
|
|
|
encode_nops(&hdr);
|
|
|
- return 0;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* a PATHCONF request
|
|
|
*/
|
|
|
-static int nfs4_xdr_enc_pathconf(struct rpc_rqst *req, __be32 *p, const struct nfs4_pathconf_arg *args)
|
|
|
+static void nfs4_xdr_enc_pathconf(struct rpc_rqst *req, struct xdr_stream *xdr,
|
|
|
+ const struct nfs4_pathconf_arg *args)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr = {
|
|
|
.minorversion = nfs4_xdr_minorversion(&args->seq_args),
|
|
|
};
|
|
|
|
|
|
- xdr_init_encode(&xdr, &req->rq_snd_buf, p);
|
|
|
- encode_compound_hdr(&xdr, req, &hdr);
|
|
|
- encode_sequence(&xdr, &args->seq_args, &hdr);
|
|
|
- encode_putfh(&xdr, args->fh, &hdr);
|
|
|
- encode_getattr_one(&xdr, args->bitmask[0] & nfs4_pathconf_bitmap[0],
|
|
|
+ encode_compound_hdr(xdr, req, &hdr);
|
|
|
+ encode_sequence(xdr, &args->seq_args, &hdr);
|
|
|
+ encode_putfh(xdr, args->fh, &hdr);
|
|
|
+ encode_getattr_one(xdr, args->bitmask[0] & nfs4_pathconf_bitmap[0],
|
|
|
&hdr);
|
|
|
encode_nops(&hdr);
|
|
|
- return 0;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* a STATFS request
|
|
|
*/
|
|
|
-static int nfs4_xdr_enc_statfs(struct rpc_rqst *req, __be32 *p, const struct nfs4_statfs_arg *args)
|
|
|
+static void nfs4_xdr_enc_statfs(struct rpc_rqst *req, struct xdr_stream *xdr,
|
|
|
+ const struct nfs4_statfs_arg *args)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr = {
|
|
|
.minorversion = nfs4_xdr_minorversion(&args->seq_args),
|
|
|
};
|
|
|
|
|
|
- xdr_init_encode(&xdr, &req->rq_snd_buf, p);
|
|
|
- encode_compound_hdr(&xdr, req, &hdr);
|
|
|
- encode_sequence(&xdr, &args->seq_args, &hdr);
|
|
|
- encode_putfh(&xdr, args->fh, &hdr);
|
|
|
- encode_getattr_two(&xdr, args->bitmask[0] & nfs4_statfs_bitmap[0],
|
|
|
+ encode_compound_hdr(xdr, req, &hdr);
|
|
|
+ encode_sequence(xdr, &args->seq_args, &hdr);
|
|
|
+ encode_putfh(xdr, args->fh, &hdr);
|
|
|
+ encode_getattr_two(xdr, args->bitmask[0] & nfs4_statfs_bitmap[0],
|
|
|
args->bitmask[1] & nfs4_statfs_bitmap[1], &hdr);
|
|
|
encode_nops(&hdr);
|
|
|
- return 0;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* GETATTR_BITMAP request
|
|
|
*/
|
|
|
-static int nfs4_xdr_enc_server_caps(struct rpc_rqst *req, __be32 *p,
|
|
|
- struct nfs4_server_caps_arg *args)
|
|
|
+static void nfs4_xdr_enc_server_caps(struct rpc_rqst *req,
|
|
|
+ struct xdr_stream *xdr,
|
|
|
+ struct nfs4_server_caps_arg *args)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr = {
|
|
|
.minorversion = nfs4_xdr_minorversion(&args->seq_args),
|
|
|
};
|
|
|
|
|
|
- xdr_init_encode(&xdr, &req->rq_snd_buf, p);
|
|
|
- encode_compound_hdr(&xdr, req, &hdr);
|
|
|
- encode_sequence(&xdr, &args->seq_args, &hdr);
|
|
|
- encode_putfh(&xdr, args->fhandle, &hdr);
|
|
|
- encode_getattr_one(&xdr, FATTR4_WORD0_SUPPORTED_ATTRS|
|
|
|
+ encode_compound_hdr(xdr, req, &hdr);
|
|
|
+ encode_sequence(xdr, &args->seq_args, &hdr);
|
|
|
+ encode_putfh(xdr, args->fhandle, &hdr);
|
|
|
+ encode_getattr_one(xdr, FATTR4_WORD0_SUPPORTED_ATTRS|
|
|
|
FATTR4_WORD0_LINK_SUPPORT|
|
|
|
FATTR4_WORD0_SYMLINK_SUPPORT|
|
|
|
FATTR4_WORD0_ACLSUPPORT, &hdr);
|
|
|
encode_nops(&hdr);
|
|
|
- return 0;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* a RENEW request
|
|
|
*/
|
|
|
-static int nfs4_xdr_enc_renew(struct rpc_rqst *req, __be32 *p, struct nfs_client *clp)
|
|
|
+static void nfs4_xdr_enc_renew(struct rpc_rqst *req, struct xdr_stream *xdr,
|
|
|
+ struct nfs_client *clp)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr = {
|
|
|
.nops = 0,
|
|
|
};
|
|
|
|
|
|
- xdr_init_encode(&xdr, &req->rq_snd_buf, p);
|
|
|
- encode_compound_hdr(&xdr, req, &hdr);
|
|
|
- encode_renew(&xdr, clp, &hdr);
|
|
|
+ encode_compound_hdr(xdr, req, &hdr);
|
|
|
+ encode_renew(xdr, clp, &hdr);
|
|
|
encode_nops(&hdr);
|
|
|
- return 0;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* a SETCLIENTID request
|
|
|
*/
|
|
|
-static int nfs4_xdr_enc_setclientid(struct rpc_rqst *req, __be32 *p, struct nfs4_setclientid *sc)
|
|
|
+static void nfs4_xdr_enc_setclientid(struct rpc_rqst *req,
|
|
|
+ struct xdr_stream *xdr,
|
|
|
+ struct nfs4_setclientid *sc)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr = {
|
|
|
.nops = 0,
|
|
|
};
|
|
|
|
|
|
- xdr_init_encode(&xdr, &req->rq_snd_buf, p);
|
|
|
- encode_compound_hdr(&xdr, req, &hdr);
|
|
|
- encode_setclientid(&xdr, sc, &hdr);
|
|
|
+ encode_compound_hdr(xdr, req, &hdr);
|
|
|
+ encode_setclientid(xdr, sc, &hdr);
|
|
|
encode_nops(&hdr);
|
|
|
- return 0;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* a SETCLIENTID_CONFIRM request
|
|
|
*/
|
|
|
-static int nfs4_xdr_enc_setclientid_confirm(struct rpc_rqst *req, __be32 *p, struct nfs4_setclientid_res *arg)
|
|
|
+static void nfs4_xdr_enc_setclientid_confirm(struct rpc_rqst *req,
|
|
|
+ struct xdr_stream *xdr,
|
|
|
+ struct nfs4_setclientid_res *arg)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr = {
|
|
|
.nops = 0,
|
|
|
};
|
|
|
const u32 lease_bitmap[2] = { FATTR4_WORD0_LEASE_TIME, 0 };
|
|
|
|
|
|
- xdr_init_encode(&xdr, &req->rq_snd_buf, p);
|
|
|
- encode_compound_hdr(&xdr, req, &hdr);
|
|
|
- encode_setclientid_confirm(&xdr, arg, &hdr);
|
|
|
- encode_putrootfh(&xdr, &hdr);
|
|
|
- encode_fsinfo(&xdr, lease_bitmap, &hdr);
|
|
|
+ encode_compound_hdr(xdr, req, &hdr);
|
|
|
+ encode_setclientid_confirm(xdr, arg, &hdr);
|
|
|
+ encode_putrootfh(xdr, &hdr);
|
|
|
+ encode_fsinfo(xdr, lease_bitmap, &hdr);
|
|
|
encode_nops(&hdr);
|
|
|
- return 0;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* DELEGRETURN request
|
|
|
*/
|
|
|
-static int nfs4_xdr_enc_delegreturn(struct rpc_rqst *req, __be32 *p, const struct nfs4_delegreturnargs *args)
|
|
|
+static void nfs4_xdr_enc_delegreturn(struct rpc_rqst *req,
|
|
|
+ struct xdr_stream *xdr,
|
|
|
+ const struct nfs4_delegreturnargs *args)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr = {
|
|
|
.minorversion = nfs4_xdr_minorversion(&args->seq_args),
|
|
|
};
|
|
|
|
|
|
- xdr_init_encode(&xdr, &req->rq_snd_buf, p);
|
|
|
- encode_compound_hdr(&xdr, req, &hdr);
|
|
|
- encode_sequence(&xdr, &args->seq_args, &hdr);
|
|
|
- encode_putfh(&xdr, args->fhandle, &hdr);
|
|
|
- encode_delegreturn(&xdr, args->stateid, &hdr);
|
|
|
- encode_getfattr(&xdr, args->bitmask, &hdr);
|
|
|
+ encode_compound_hdr(xdr, req, &hdr);
|
|
|
+ encode_sequence(xdr, &args->seq_args, &hdr);
|
|
|
+ encode_putfh(xdr, args->fhandle, &hdr);
|
|
|
+ encode_delegreturn(xdr, args->stateid, &hdr);
|
|
|
+ encode_getfattr(xdr, args->bitmask, &hdr);
|
|
|
encode_nops(&hdr);
|
|
|
- return 0;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* Encode FS_LOCATIONS request
|
|
|
*/
|
|
|
-static int nfs4_xdr_enc_fs_locations(struct rpc_rqst *req, __be32 *p, struct nfs4_fs_locations_arg *args)
|
|
|
+static void nfs4_xdr_enc_fs_locations(struct rpc_rqst *req,
|
|
|
+ struct xdr_stream *xdr,
|
|
|
+ struct nfs4_fs_locations_arg *args)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr = {
|
|
|
.minorversion = nfs4_xdr_minorversion(&args->seq_args),
|
|
|
};
|
|
|
uint32_t replen;
|
|
|
|
|
|
- xdr_init_encode(&xdr, &req->rq_snd_buf, p);
|
|
|
- encode_compound_hdr(&xdr, req, &hdr);
|
|
|
- encode_sequence(&xdr, &args->seq_args, &hdr);
|
|
|
- encode_putfh(&xdr, args->dir_fh, &hdr);
|
|
|
- encode_lookup(&xdr, args->name, &hdr);
|
|
|
+ encode_compound_hdr(xdr, req, &hdr);
|
|
|
+ encode_sequence(xdr, &args->seq_args, &hdr);
|
|
|
+ encode_putfh(xdr, args->dir_fh, &hdr);
|
|
|
+ encode_lookup(xdr, args->name, &hdr);
|
|
|
replen = hdr.replen; /* get the attribute into args->page */
|
|
|
- encode_fs_locations(&xdr, args->bitmask, &hdr);
|
|
|
+ encode_fs_locations(xdr, args->bitmask, &hdr);
|
|
|
|
|
|
xdr_inline_pages(&req->rq_rcv_buf, replen << 2, &args->page,
|
|
|
0, PAGE_SIZE);
|
|
|
encode_nops(&hdr);
|
|
|
- return 0;
|
|
|
}
|
|
|
|
|
|
#if defined(CONFIG_NFS_V4_1)
|
|
|
/*
|
|
|
* EXCHANGE_ID request
|
|
|
*/
|
|
|
-static int nfs4_xdr_enc_exchange_id(struct rpc_rqst *req, uint32_t *p,
|
|
|
- struct nfs41_exchange_id_args *args)
|
|
|
+static void nfs4_xdr_enc_exchange_id(struct rpc_rqst *req,
|
|
|
+ struct xdr_stream *xdr,
|
|
|
+ struct nfs41_exchange_id_args *args)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr = {
|
|
|
.minorversion = args->client->cl_mvops->minor_version,
|
|
|
};
|
|
|
|
|
|
- xdr_init_encode(&xdr, &req->rq_snd_buf, p);
|
|
|
- encode_compound_hdr(&xdr, req, &hdr);
|
|
|
- encode_exchange_id(&xdr, args, &hdr);
|
|
|
+ encode_compound_hdr(xdr, req, &hdr);
|
|
|
+ encode_exchange_id(xdr, args, &hdr);
|
|
|
encode_nops(&hdr);
|
|
|
- return 0;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* a CREATE_SESSION request
|
|
|
*/
|
|
|
-static int nfs4_xdr_enc_create_session(struct rpc_rqst *req, uint32_t *p,
|
|
|
- struct nfs41_create_session_args *args)
|
|
|
+static void nfs4_xdr_enc_create_session(struct rpc_rqst *req,
|
|
|
+ struct xdr_stream *xdr,
|
|
|
+ struct nfs41_create_session_args *args)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr = {
|
|
|
.minorversion = args->client->cl_mvops->minor_version,
|
|
|
};
|
|
|
|
|
|
- xdr_init_encode(&xdr, &req->rq_snd_buf, p);
|
|
|
- encode_compound_hdr(&xdr, req, &hdr);
|
|
|
- encode_create_session(&xdr, args, &hdr);
|
|
|
+ encode_compound_hdr(xdr, req, &hdr);
|
|
|
+ encode_create_session(xdr, args, &hdr);
|
|
|
encode_nops(&hdr);
|
|
|
- return 0;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* a DESTROY_SESSION request
|
|
|
*/
|
|
|
-static int nfs4_xdr_enc_destroy_session(struct rpc_rqst *req, uint32_t *p,
|
|
|
- struct nfs4_session *session)
|
|
|
+static void nfs4_xdr_enc_destroy_session(struct rpc_rqst *req,
|
|
|
+ struct xdr_stream *xdr,
|
|
|
+ struct nfs4_session *session)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr = {
|
|
|
.minorversion = session->clp->cl_mvops->minor_version,
|
|
|
};
|
|
|
|
|
|
- xdr_init_encode(&xdr, &req->rq_snd_buf, p);
|
|
|
- encode_compound_hdr(&xdr, req, &hdr);
|
|
|
- encode_destroy_session(&xdr, session, &hdr);
|
|
|
+ encode_compound_hdr(xdr, req, &hdr);
|
|
|
+ encode_destroy_session(xdr, session, &hdr);
|
|
|
encode_nops(&hdr);
|
|
|
- return 0;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* a SEQUENCE request
|
|
|
*/
|
|
|
-static int nfs4_xdr_enc_sequence(struct rpc_rqst *req, uint32_t *p,
|
|
|
- struct nfs4_sequence_args *args)
|
|
|
+static void nfs4_xdr_enc_sequence(struct rpc_rqst *req, struct xdr_stream *xdr,
|
|
|
+ struct nfs4_sequence_args *args)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr = {
|
|
|
.minorversion = nfs4_xdr_minorversion(args),
|
|
|
};
|
|
|
|
|
|
- xdr_init_encode(&xdr, &req->rq_snd_buf, p);
|
|
|
- encode_compound_hdr(&xdr, req, &hdr);
|
|
|
- encode_sequence(&xdr, args, &hdr);
|
|
|
+ encode_compound_hdr(xdr, req, &hdr);
|
|
|
+ encode_sequence(xdr, args, &hdr);
|
|
|
encode_nops(&hdr);
|
|
|
- return 0;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* a GET_LEASE_TIME request
|
|
|
*/
|
|
|
-static int nfs4_xdr_enc_get_lease_time(struct rpc_rqst *req, uint32_t *p,
|
|
|
- struct nfs4_get_lease_time_args *args)
|
|
|
+static void nfs4_xdr_enc_get_lease_time(struct rpc_rqst *req,
|
|
|
+ struct xdr_stream *xdr,
|
|
|
+ struct nfs4_get_lease_time_args *args)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr = {
|
|
|
.minorversion = nfs4_xdr_minorversion(&args->la_seq_args),
|
|
|
};
|
|
|
const u32 lease_bitmap[2] = { FATTR4_WORD0_LEASE_TIME, 0 };
|
|
|
|
|
|
- xdr_init_encode(&xdr, &req->rq_snd_buf, p);
|
|
|
- encode_compound_hdr(&xdr, req, &hdr);
|
|
|
- encode_sequence(&xdr, &args->la_seq_args, &hdr);
|
|
|
- encode_putrootfh(&xdr, &hdr);
|
|
|
- encode_fsinfo(&xdr, lease_bitmap, &hdr);
|
|
|
+ encode_compound_hdr(xdr, req, &hdr);
|
|
|
+ encode_sequence(xdr, &args->la_seq_args, &hdr);
|
|
|
+ encode_putrootfh(xdr, &hdr);
|
|
|
+ encode_fsinfo(xdr, lease_bitmap, &hdr);
|
|
|
encode_nops(&hdr);
|
|
|
- return 0;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* a RECLAIM_COMPLETE request
|
|
|
*/
|
|
|
-static int nfs4_xdr_enc_reclaim_complete(struct rpc_rqst *req, uint32_t *p,
|
|
|
- struct nfs41_reclaim_complete_args *args)
|
|
|
+static void nfs4_xdr_enc_reclaim_complete(struct rpc_rqst *req,
|
|
|
+ struct xdr_stream *xdr,
|
|
|
+ struct nfs41_reclaim_complete_args *args)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr = {
|
|
|
.minorversion = nfs4_xdr_minorversion(&args->seq_args)
|
|
|
};
|
|
|
|
|
|
- xdr_init_encode(&xdr, &req->rq_snd_buf, p);
|
|
|
- encode_compound_hdr(&xdr, req, &hdr);
|
|
|
- encode_sequence(&xdr, &args->seq_args, &hdr);
|
|
|
- encode_reclaim_complete(&xdr, args, &hdr);
|
|
|
+ encode_compound_hdr(xdr, req, &hdr);
|
|
|
+ encode_sequence(xdr, &args->seq_args, &hdr);
|
|
|
+ encode_reclaim_complete(xdr, args, &hdr);
|
|
|
encode_nops(&hdr);
|
|
|
- return 0;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* Encode GETDEVICEINFO request
|
|
|
*/
|
|
|
-static int nfs4_xdr_enc_getdeviceinfo(struct rpc_rqst *req, uint32_t *p,
|
|
|
- struct nfs4_getdeviceinfo_args *args)
|
|
|
+static void nfs4_xdr_enc_getdeviceinfo(struct rpc_rqst *req,
|
|
|
+ struct xdr_stream *xdr,
|
|
|
+ struct nfs4_getdeviceinfo_args *args)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr = {
|
|
|
.minorversion = nfs4_xdr_minorversion(&args->seq_args),
|
|
|
};
|
|
|
|
|
|
- xdr_init_encode(&xdr, &req->rq_snd_buf, p);
|
|
|
- encode_compound_hdr(&xdr, req, &hdr);
|
|
|
- encode_sequence(&xdr, &args->seq_args, &hdr);
|
|
|
- encode_getdeviceinfo(&xdr, args, &hdr);
|
|
|
+ encode_compound_hdr(xdr, req, &hdr);
|
|
|
+ encode_sequence(xdr, &args->seq_args, &hdr);
|
|
|
+ encode_getdeviceinfo(xdr, args, &hdr);
|
|
|
|
|
|
/* set up reply kvec. Subtract notification bitmap max size (2)
|
|
|
* so that notification bitmap is put in xdr_buf tail */
|
|
@@ -2657,27 +2582,24 @@ static int nfs4_xdr_enc_getdeviceinfo(struct rpc_rqst *req, uint32_t *p,
|
|
|
args->pdev->pglen);
|
|
|
|
|
|
encode_nops(&hdr);
|
|
|
- return 0;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* Encode LAYOUTGET request
|
|
|
*/
|
|
|
-static int nfs4_xdr_enc_layoutget(struct rpc_rqst *req, uint32_t *p,
|
|
|
- struct nfs4_layoutget_args *args)
|
|
|
+static void nfs4_xdr_enc_layoutget(struct rpc_rqst *req,
|
|
|
+ struct xdr_stream *xdr,
|
|
|
+ struct nfs4_layoutget_args *args)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr = {
|
|
|
.minorversion = nfs4_xdr_minorversion(&args->seq_args),
|
|
|
};
|
|
|
|
|
|
- xdr_init_encode(&xdr, &req->rq_snd_buf, p);
|
|
|
- encode_compound_hdr(&xdr, req, &hdr);
|
|
|
- encode_sequence(&xdr, &args->seq_args, &hdr);
|
|
|
- encode_putfh(&xdr, NFS_FH(args->inode), &hdr);
|
|
|
- encode_layoutget(&xdr, args, &hdr);
|
|
|
+ encode_compound_hdr(xdr, req, &hdr);
|
|
|
+ encode_sequence(xdr, &args->seq_args, &hdr);
|
|
|
+ encode_putfh(xdr, NFS_FH(args->inode), &hdr);
|
|
|
+ encode_layoutget(xdr, args, &hdr);
|
|
|
encode_nops(&hdr);
|
|
|
- return 0;
|
|
|
}
|
|
|
#endif /* CONFIG_NFS_V4_1 */
|
|
|
|
|
@@ -4475,7 +4397,7 @@ static int decode_read(struct xdr_stream *xdr, struct rpc_rqst *req, struct nfs_
|
|
|
goto out_overflow;
|
|
|
eof = be32_to_cpup(p++);
|
|
|
count = be32_to_cpup(p);
|
|
|
- hdrlen = (u8 *) p - (u8 *) iov->iov_base;
|
|
|
+ hdrlen = (u8 *) xdr->p - (u8 *) iov->iov_base;
|
|
|
recvd = req->rq_rcv_buf.len - hdrlen;
|
|
|
if (count > recvd) {
|
|
|
dprintk("NFS: server cheating in read reply: "
|
|
@@ -5000,7 +4922,7 @@ static int decode_getdeviceinfo(struct xdr_stream *xdr,
|
|
|
goto out_overflow;
|
|
|
len = be32_to_cpup(p);
|
|
|
if (len) {
|
|
|
- int i;
|
|
|
+ uint32_t i;
|
|
|
|
|
|
p = xdr_inline_decode(xdr, 4 * len);
|
|
|
if (unlikely(!p))
|
|
@@ -5090,26 +5012,26 @@ out_overflow:
|
|
|
/*
|
|
|
* Decode OPEN_DOWNGRADE response
|
|
|
*/
|
|
|
-static int nfs4_xdr_dec_open_downgrade(struct rpc_rqst *rqstp, __be32 *p, struct nfs_closeres *res)
|
|
|
+static int nfs4_xdr_dec_open_downgrade(struct rpc_rqst *rqstp,
|
|
|
+ struct xdr_stream *xdr,
|
|
|
+ struct nfs_closeres *res)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr;
|
|
|
int status;
|
|
|
|
|
|
- xdr_init_decode(&xdr, &rqstp->rq_rcv_buf, p);
|
|
|
- status = decode_compound_hdr(&xdr, &hdr);
|
|
|
+ status = decode_compound_hdr(xdr, &hdr);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- status = decode_sequence(&xdr, &res->seq_res, rqstp);
|
|
|
+ status = decode_sequence(xdr, &res->seq_res, rqstp);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- status = decode_putfh(&xdr);
|
|
|
+ status = decode_putfh(xdr);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- status = decode_open_downgrade(&xdr, res);
|
|
|
+ status = decode_open_downgrade(xdr, res);
|
|
|
if (status != 0)
|
|
|
goto out;
|
|
|
- decode_getfattr(&xdr, res->fattr, res->server,
|
|
|
+ decode_getfattr(xdr, res->fattr, res->server,
|
|
|
!RPC_IS_ASYNC(rqstp->rq_task));
|
|
|
out:
|
|
|
return status;
|
|
@@ -5118,26 +5040,25 @@ out:
|
|
|
/*
|
|
|
* Decode ACCESS response
|
|
|
*/
|
|
|
-static int nfs4_xdr_dec_access(struct rpc_rqst *rqstp, __be32 *p, struct nfs4_accessres *res)
|
|
|
+static int nfs4_xdr_dec_access(struct rpc_rqst *rqstp, struct xdr_stream *xdr,
|
|
|
+ struct nfs4_accessres *res)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr;
|
|
|
int status;
|
|
|
|
|
|
- xdr_init_decode(&xdr, &rqstp->rq_rcv_buf, p);
|
|
|
- status = decode_compound_hdr(&xdr, &hdr);
|
|
|
+ status = decode_compound_hdr(xdr, &hdr);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- status = decode_sequence(&xdr, &res->seq_res, rqstp);
|
|
|
+ status = decode_sequence(xdr, &res->seq_res, rqstp);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- status = decode_putfh(&xdr);
|
|
|
+ status = decode_putfh(xdr);
|
|
|
if (status != 0)
|
|
|
goto out;
|
|
|
- status = decode_access(&xdr, res);
|
|
|
+ status = decode_access(xdr, res);
|
|
|
if (status != 0)
|
|
|
goto out;
|
|
|
- decode_getfattr(&xdr, res->fattr, res->server,
|
|
|
+ decode_getfattr(xdr, res->fattr, res->server,
|
|
|
!RPC_IS_ASYNC(rqstp->rq_task));
|
|
|
out:
|
|
|
return status;
|
|
@@ -5146,26 +5067,28 @@ out:
|
|
|
/*
|
|
|
* Decode LOOKUP response
|
|
|
*/
|
|
|
-static int nfs4_xdr_dec_lookup(struct rpc_rqst *rqstp, __be32 *p, struct nfs4_lookup_res *res)
|
|
|
+static int nfs4_xdr_dec_lookup(struct rpc_rqst *rqstp, struct xdr_stream *xdr,
|
|
|
+ struct nfs4_lookup_res *res)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr;
|
|
|
int status;
|
|
|
|
|
|
- xdr_init_decode(&xdr, &rqstp->rq_rcv_buf, p);
|
|
|
- status = decode_compound_hdr(&xdr, &hdr);
|
|
|
+ status = decode_compound_hdr(xdr, &hdr);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- status = decode_sequence(&xdr, &res->seq_res, rqstp);
|
|
|
+ status = decode_sequence(xdr, &res->seq_res, rqstp);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- if ((status = decode_putfh(&xdr)) != 0)
|
|
|
+ status = decode_putfh(xdr);
|
|
|
+ if (status)
|
|
|
goto out;
|
|
|
- if ((status = decode_lookup(&xdr)) != 0)
|
|
|
+ status = decode_lookup(xdr);
|
|
|
+ if (status)
|
|
|
goto out;
|
|
|
- if ((status = decode_getfh(&xdr, res->fh)) != 0)
|
|
|
+ status = decode_getfh(xdr, res->fh);
|
|
|
+ if (status)
|
|
|
goto out;
|
|
|
- status = decode_getfattr(&xdr, res->fattr, res->server
|
|
|
+ status = decode_getfattr(xdr, res->fattr, res->server
|
|
|
,!RPC_IS_ASYNC(rqstp->rq_task));
|
|
|
out:
|
|
|
return status;
|
|
@@ -5174,23 +5097,25 @@ out:
|
|
|
/*
|
|
|
* Decode LOOKUP_ROOT response
|
|
|
*/
|
|
|
-static int nfs4_xdr_dec_lookup_root(struct rpc_rqst *rqstp, __be32 *p, struct nfs4_lookup_res *res)
|
|
|
+static int nfs4_xdr_dec_lookup_root(struct rpc_rqst *rqstp,
|
|
|
+ struct xdr_stream *xdr,
|
|
|
+ struct nfs4_lookup_res *res)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr;
|
|
|
int status;
|
|
|
|
|
|
- xdr_init_decode(&xdr, &rqstp->rq_rcv_buf, p);
|
|
|
- status = decode_compound_hdr(&xdr, &hdr);
|
|
|
+ status = decode_compound_hdr(xdr, &hdr);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- status = decode_sequence(&xdr, &res->seq_res, rqstp);
|
|
|
+ status = decode_sequence(xdr, &res->seq_res, rqstp);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- if ((status = decode_putrootfh(&xdr)) != 0)
|
|
|
+ status = decode_putrootfh(xdr);
|
|
|
+ if (status)
|
|
|
goto out;
|
|
|
- if ((status = decode_getfh(&xdr, res->fh)) == 0)
|
|
|
- status = decode_getfattr(&xdr, res->fattr, res->server,
|
|
|
+ status = decode_getfh(xdr, res->fh);
|
|
|
+ if (status == 0)
|
|
|
+ status = decode_getfattr(xdr, res->fattr, res->server,
|
|
|
!RPC_IS_ASYNC(rqstp->rq_task));
|
|
|
out:
|
|
|
return status;
|
|
@@ -5199,24 +5124,25 @@ out:
|
|
|
/*
|
|
|
* Decode REMOVE response
|
|
|
*/
|
|
|
-static int nfs4_xdr_dec_remove(struct rpc_rqst *rqstp, __be32 *p, struct nfs_removeres *res)
|
|
|
+static int nfs4_xdr_dec_remove(struct rpc_rqst *rqstp, struct xdr_stream *xdr,
|
|
|
+ struct nfs_removeres *res)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr;
|
|
|
int status;
|
|
|
|
|
|
- xdr_init_decode(&xdr, &rqstp->rq_rcv_buf, p);
|
|
|
- status = decode_compound_hdr(&xdr, &hdr);
|
|
|
+ status = decode_compound_hdr(xdr, &hdr);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- status = decode_sequence(&xdr, &res->seq_res, rqstp);
|
|
|
+ status = decode_sequence(xdr, &res->seq_res, rqstp);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- if ((status = decode_putfh(&xdr)) != 0)
|
|
|
+ status = decode_putfh(xdr);
|
|
|
+ if (status)
|
|
|
goto out;
|
|
|
- if ((status = decode_remove(&xdr, &res->cinfo)) != 0)
|
|
|
+ status = decode_remove(xdr, &res->cinfo);
|
|
|
+ if (status)
|
|
|
goto out;
|
|
|
- decode_getfattr(&xdr, res->dir_attr, res->server,
|
|
|
+ decode_getfattr(xdr, res->dir_attr, res->server,
|
|
|
!RPC_IS_ASYNC(rqstp->rq_task));
|
|
|
out:
|
|
|
return status;
|
|
@@ -5225,34 +5151,38 @@ out:
|
|
|
/*
|
|
|
* Decode RENAME response
|
|
|
*/
|
|
|
-static int nfs4_xdr_dec_rename(struct rpc_rqst *rqstp, __be32 *p, struct nfs_renameres *res)
|
|
|
+static int nfs4_xdr_dec_rename(struct rpc_rqst *rqstp, struct xdr_stream *xdr,
|
|
|
+ struct nfs_renameres *res)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr;
|
|
|
int status;
|
|
|
|
|
|
- xdr_init_decode(&xdr, &rqstp->rq_rcv_buf, p);
|
|
|
- status = decode_compound_hdr(&xdr, &hdr);
|
|
|
+ status = decode_compound_hdr(xdr, &hdr);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- status = decode_sequence(&xdr, &res->seq_res, rqstp);
|
|
|
+ status = decode_sequence(xdr, &res->seq_res, rqstp);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- if ((status = decode_putfh(&xdr)) != 0)
|
|
|
+ status = decode_putfh(xdr);
|
|
|
+ if (status)
|
|
|
goto out;
|
|
|
- if ((status = decode_savefh(&xdr)) != 0)
|
|
|
+ status = decode_savefh(xdr);
|
|
|
+ if (status)
|
|
|
goto out;
|
|
|
- if ((status = decode_putfh(&xdr)) != 0)
|
|
|
+ status = decode_putfh(xdr);
|
|
|
+ if (status)
|
|
|
goto out;
|
|
|
- if ((status = decode_rename(&xdr, &res->old_cinfo, &res->new_cinfo)) != 0)
|
|
|
+ status = decode_rename(xdr, &res->old_cinfo, &res->new_cinfo);
|
|
|
+ if (status)
|
|
|
goto out;
|
|
|
/* Current FH is target directory */
|
|
|
- if (decode_getfattr(&xdr, res->new_fattr, res->server,
|
|
|
+ if (decode_getfattr(xdr, res->new_fattr, res->server,
|
|
|
!RPC_IS_ASYNC(rqstp->rq_task)) != 0)
|
|
|
goto out;
|
|
|
- if ((status = decode_restorefh(&xdr)) != 0)
|
|
|
+ status = decode_restorefh(xdr);
|
|
|
+ if (status)
|
|
|
goto out;
|
|
|
- decode_getfattr(&xdr, res->old_fattr, res->server,
|
|
|
+ decode_getfattr(xdr, res->old_fattr, res->server,
|
|
|
!RPC_IS_ASYNC(rqstp->rq_task));
|
|
|
out:
|
|
|
return status;
|
|
@@ -5261,37 +5191,41 @@ out:
|
|
|
/*
|
|
|
* Decode LINK response
|
|
|
*/
|
|
|
-static int nfs4_xdr_dec_link(struct rpc_rqst *rqstp, __be32 *p, struct nfs4_link_res *res)
|
|
|
+static int nfs4_xdr_dec_link(struct rpc_rqst *rqstp, struct xdr_stream *xdr,
|
|
|
+ struct nfs4_link_res *res)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr;
|
|
|
int status;
|
|
|
|
|
|
- xdr_init_decode(&xdr, &rqstp->rq_rcv_buf, p);
|
|
|
- status = decode_compound_hdr(&xdr, &hdr);
|
|
|
+ status = decode_compound_hdr(xdr, &hdr);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- status = decode_sequence(&xdr, &res->seq_res, rqstp);
|
|
|
+ status = decode_sequence(xdr, &res->seq_res, rqstp);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- if ((status = decode_putfh(&xdr)) != 0)
|
|
|
+ status = decode_putfh(xdr);
|
|
|
+ if (status)
|
|
|
goto out;
|
|
|
- if ((status = decode_savefh(&xdr)) != 0)
|
|
|
+ status = decode_savefh(xdr);
|
|
|
+ if (status)
|
|
|
goto out;
|
|
|
- if ((status = decode_putfh(&xdr)) != 0)
|
|
|
+ status = decode_putfh(xdr);
|
|
|
+ if (status)
|
|
|
goto out;
|
|
|
- if ((status = decode_link(&xdr, &res->cinfo)) != 0)
|
|
|
+ status = decode_link(xdr, &res->cinfo);
|
|
|
+ if (status)
|
|
|
goto out;
|
|
|
/*
|
|
|
* Note order: OP_LINK leaves the directory as the current
|
|
|
* filehandle.
|
|
|
*/
|
|
|
- if (decode_getfattr(&xdr, res->dir_attr, res->server,
|
|
|
+ if (decode_getfattr(xdr, res->dir_attr, res->server,
|
|
|
!RPC_IS_ASYNC(rqstp->rq_task)) != 0)
|
|
|
goto out;
|
|
|
- if ((status = decode_restorefh(&xdr)) != 0)
|
|
|
+ status = decode_restorefh(xdr);
|
|
|
+ if (status)
|
|
|
goto out;
|
|
|
- decode_getfattr(&xdr, res->fattr, res->server,
|
|
|
+ decode_getfattr(xdr, res->fattr, res->server,
|
|
|
!RPC_IS_ASYNC(rqstp->rq_task));
|
|
|
out:
|
|
|
return status;
|
|
@@ -5300,33 +5234,37 @@ out:
|
|
|
/*
|
|
|
* Decode CREATE response
|
|
|
*/
|
|
|
-static int nfs4_xdr_dec_create(struct rpc_rqst *rqstp, __be32 *p, struct nfs4_create_res *res)
|
|
|
+static int nfs4_xdr_dec_create(struct rpc_rqst *rqstp, struct xdr_stream *xdr,
|
|
|
+ struct nfs4_create_res *res)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr;
|
|
|
int status;
|
|
|
|
|
|
- xdr_init_decode(&xdr, &rqstp->rq_rcv_buf, p);
|
|
|
- status = decode_compound_hdr(&xdr, &hdr);
|
|
|
+ status = decode_compound_hdr(xdr, &hdr);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- status = decode_sequence(&xdr, &res->seq_res, rqstp);
|
|
|
+ status = decode_sequence(xdr, &res->seq_res, rqstp);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- if ((status = decode_putfh(&xdr)) != 0)
|
|
|
+ status = decode_putfh(xdr);
|
|
|
+ if (status)
|
|
|
goto out;
|
|
|
- if ((status = decode_savefh(&xdr)) != 0)
|
|
|
+ status = decode_savefh(xdr);
|
|
|
+ if (status)
|
|
|
goto out;
|
|
|
- if ((status = decode_create(&xdr,&res->dir_cinfo)) != 0)
|
|
|
+ status = decode_create(xdr, &res->dir_cinfo);
|
|
|
+ if (status)
|
|
|
goto out;
|
|
|
- if ((status = decode_getfh(&xdr, res->fh)) != 0)
|
|
|
+ status = decode_getfh(xdr, res->fh);
|
|
|
+ if (status)
|
|
|
goto out;
|
|
|
- if (decode_getfattr(&xdr, res->fattr, res->server,
|
|
|
+ if (decode_getfattr(xdr, res->fattr, res->server,
|
|
|
!RPC_IS_ASYNC(rqstp->rq_task)) != 0)
|
|
|
goto out;
|
|
|
- if ((status = decode_restorefh(&xdr)) != 0)
|
|
|
+ status = decode_restorefh(xdr);
|
|
|
+ if (status)
|
|
|
goto out;
|
|
|
- decode_getfattr(&xdr, res->dir_fattr, res->server,
|
|
|
+ decode_getfattr(xdr, res->dir_fattr, res->server,
|
|
|
!RPC_IS_ASYNC(rqstp->rq_task));
|
|
|
out:
|
|
|
return status;
|
|
@@ -5335,31 +5273,31 @@ out:
|
|
|
/*
|
|
|
* Decode SYMLINK response
|
|
|
*/
|
|
|
-static int nfs4_xdr_dec_symlink(struct rpc_rqst *rqstp, __be32 *p, struct nfs4_create_res *res)
|
|
|
+static int nfs4_xdr_dec_symlink(struct rpc_rqst *rqstp, struct xdr_stream *xdr,
|
|
|
+ struct nfs4_create_res *res)
|
|
|
{
|
|
|
- return nfs4_xdr_dec_create(rqstp, p, res);
|
|
|
+ return nfs4_xdr_dec_create(rqstp, xdr, res);
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* Decode GETATTR response
|
|
|
*/
|
|
|
-static int nfs4_xdr_dec_getattr(struct rpc_rqst *rqstp, __be32 *p, struct nfs4_getattr_res *res)
|
|
|
+static int nfs4_xdr_dec_getattr(struct rpc_rqst *rqstp, struct xdr_stream *xdr,
|
|
|
+ struct nfs4_getattr_res *res)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr;
|
|
|
int status;
|
|
|
|
|
|
- xdr_init_decode(&xdr, &rqstp->rq_rcv_buf, p);
|
|
|
- status = decode_compound_hdr(&xdr, &hdr);
|
|
|
+ status = decode_compound_hdr(xdr, &hdr);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- status = decode_sequence(&xdr, &res->seq_res, rqstp);
|
|
|
+ status = decode_sequence(xdr, &res->seq_res, rqstp);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- status = decode_putfh(&xdr);
|
|
|
+ status = decode_putfh(xdr);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- status = decode_getfattr(&xdr, res->fattr, res->server,
|
|
|
+ status = decode_getfattr(xdr, res->fattr, res->server,
|
|
|
!RPC_IS_ASYNC(rqstp->rq_task));
|
|
|
out:
|
|
|
return status;
|
|
@@ -5368,46 +5306,40 @@ out:
|
|
|
/*
|
|
|
* Encode an SETACL request
|
|
|
*/
|
|
|
-static int
|
|
|
-nfs4_xdr_enc_setacl(struct rpc_rqst *req, __be32 *p, struct nfs_setaclargs *args)
|
|
|
+static void nfs4_xdr_enc_setacl(struct rpc_rqst *req, struct xdr_stream *xdr,
|
|
|
+ struct nfs_setaclargs *args)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr = {
|
|
|
.minorversion = nfs4_xdr_minorversion(&args->seq_args),
|
|
|
};
|
|
|
- int status;
|
|
|
|
|
|
- xdr_init_encode(&xdr, &req->rq_snd_buf, p);
|
|
|
- encode_compound_hdr(&xdr, req, &hdr);
|
|
|
- encode_sequence(&xdr, &args->seq_args, &hdr);
|
|
|
- encode_putfh(&xdr, args->fh, &hdr);
|
|
|
- status = encode_setacl(&xdr, args, &hdr);
|
|
|
+ encode_compound_hdr(xdr, req, &hdr);
|
|
|
+ encode_sequence(xdr, &args->seq_args, &hdr);
|
|
|
+ encode_putfh(xdr, args->fh, &hdr);
|
|
|
+ encode_setacl(xdr, args, &hdr);
|
|
|
encode_nops(&hdr);
|
|
|
- return status;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* Decode SETACL response
|
|
|
*/
|
|
|
static int
|
|
|
-nfs4_xdr_dec_setacl(struct rpc_rqst *rqstp, __be32 *p,
|
|
|
+nfs4_xdr_dec_setacl(struct rpc_rqst *rqstp, struct xdr_stream *xdr,
|
|
|
struct nfs_setaclres *res)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr;
|
|
|
int status;
|
|
|
|
|
|
- xdr_init_decode(&xdr, &rqstp->rq_rcv_buf, p);
|
|
|
- status = decode_compound_hdr(&xdr, &hdr);
|
|
|
+ status = decode_compound_hdr(xdr, &hdr);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- status = decode_sequence(&xdr, &res->seq_res, rqstp);
|
|
|
+ status = decode_sequence(xdr, &res->seq_res, rqstp);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- status = decode_putfh(&xdr);
|
|
|
+ status = decode_putfh(xdr);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- status = decode_setattr(&xdr);
|
|
|
+ status = decode_setattr(xdr);
|
|
|
out:
|
|
|
return status;
|
|
|
}
|
|
@@ -5416,24 +5348,22 @@ out:
|
|
|
* Decode GETACL response
|
|
|
*/
|
|
|
static int
|
|
|
-nfs4_xdr_dec_getacl(struct rpc_rqst *rqstp, __be32 *p,
|
|
|
+nfs4_xdr_dec_getacl(struct rpc_rqst *rqstp, struct xdr_stream *xdr,
|
|
|
struct nfs_getaclres *res)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr;
|
|
|
int status;
|
|
|
|
|
|
- xdr_init_decode(&xdr, &rqstp->rq_rcv_buf, p);
|
|
|
- status = decode_compound_hdr(&xdr, &hdr);
|
|
|
+ status = decode_compound_hdr(xdr, &hdr);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- status = decode_sequence(&xdr, &res->seq_res, rqstp);
|
|
|
+ status = decode_sequence(xdr, &res->seq_res, rqstp);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- status = decode_putfh(&xdr);
|
|
|
+ status = decode_putfh(xdr);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- status = decode_getacl(&xdr, rqstp, &res->acl_len);
|
|
|
+ status = decode_getacl(xdr, rqstp, &res->acl_len);
|
|
|
|
|
|
out:
|
|
|
return status;
|
|
@@ -5442,23 +5372,22 @@ out:
|
|
|
/*
|
|
|
* Decode CLOSE response
|
|
|
*/
|
|
|
-static int nfs4_xdr_dec_close(struct rpc_rqst *rqstp, __be32 *p, struct nfs_closeres *res)
|
|
|
+static int nfs4_xdr_dec_close(struct rpc_rqst *rqstp, struct xdr_stream *xdr,
|
|
|
+ struct nfs_closeres *res)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr;
|
|
|
int status;
|
|
|
|
|
|
- xdr_init_decode(&xdr, &rqstp->rq_rcv_buf, p);
|
|
|
- status = decode_compound_hdr(&xdr, &hdr);
|
|
|
+ status = decode_compound_hdr(xdr, &hdr);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- status = decode_sequence(&xdr, &res->seq_res, rqstp);
|
|
|
+ status = decode_sequence(xdr, &res->seq_res, rqstp);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- status = decode_putfh(&xdr);
|
|
|
+ status = decode_putfh(xdr);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- status = decode_close(&xdr, res);
|
|
|
+ status = decode_close(xdr, res);
|
|
|
if (status != 0)
|
|
|
goto out;
|
|
|
/*
|
|
@@ -5467,7 +5396,7 @@ static int nfs4_xdr_dec_close(struct rpc_rqst *rqstp, __be32 *p, struct nfs_clos
|
|
|
* an ESTALE error. Shouldn't be a problem,
|
|
|
* though, since fattr->valid will remain unset.
|
|
|
*/
|
|
|
- decode_getfattr(&xdr, res->fattr, res->server,
|
|
|
+ decode_getfattr(xdr, res->fattr, res->server,
|
|
|
!RPC_IS_ASYNC(rqstp->rq_task));
|
|
|
out:
|
|
|
return status;
|
|
@@ -5476,36 +5405,35 @@ out:
|
|
|
/*
|
|
|
* Decode OPEN response
|
|
|
*/
|
|
|
-static int nfs4_xdr_dec_open(struct rpc_rqst *rqstp, __be32 *p, struct nfs_openres *res)
|
|
|
+static int nfs4_xdr_dec_open(struct rpc_rqst *rqstp, struct xdr_stream *xdr,
|
|
|
+ struct nfs_openres *res)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr;
|
|
|
int status;
|
|
|
|
|
|
- xdr_init_decode(&xdr, &rqstp->rq_rcv_buf, p);
|
|
|
- status = decode_compound_hdr(&xdr, &hdr);
|
|
|
+ status = decode_compound_hdr(xdr, &hdr);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- status = decode_sequence(&xdr, &res->seq_res, rqstp);
|
|
|
+ status = decode_sequence(xdr, &res->seq_res, rqstp);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- status = decode_putfh(&xdr);
|
|
|
+ status = decode_putfh(xdr);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- status = decode_savefh(&xdr);
|
|
|
+ status = decode_savefh(xdr);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- status = decode_open(&xdr, res);
|
|
|
+ status = decode_open(xdr, res);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- if (decode_getfh(&xdr, &res->fh) != 0)
|
|
|
+ if (decode_getfh(xdr, &res->fh) != 0)
|
|
|
goto out;
|
|
|
- if (decode_getfattr(&xdr, res->f_attr, res->server,
|
|
|
+ if (decode_getfattr(xdr, res->f_attr, res->server,
|
|
|
!RPC_IS_ASYNC(rqstp->rq_task)) != 0)
|
|
|
goto out;
|
|
|
- if (decode_restorefh(&xdr) != 0)
|
|
|
+ if (decode_restorefh(xdr) != 0)
|
|
|
goto out;
|
|
|
- decode_getfattr(&xdr, res->dir_attr, res->server,
|
|
|
+ decode_getfattr(xdr, res->dir_attr, res->server,
|
|
|
!RPC_IS_ASYNC(rqstp->rq_task));
|
|
|
out:
|
|
|
return status;
|
|
@@ -5514,20 +5442,20 @@ out:
|
|
|
/*
|
|
|
* Decode OPEN_CONFIRM response
|
|
|
*/
|
|
|
-static int nfs4_xdr_dec_open_confirm(struct rpc_rqst *rqstp, __be32 *p, struct nfs_open_confirmres *res)
|
|
|
+static int nfs4_xdr_dec_open_confirm(struct rpc_rqst *rqstp,
|
|
|
+ struct xdr_stream *xdr,
|
|
|
+ struct nfs_open_confirmres *res)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr;
|
|
|
int status;
|
|
|
|
|
|
- xdr_init_decode(&xdr, &rqstp->rq_rcv_buf, p);
|
|
|
- status = decode_compound_hdr(&xdr, &hdr);
|
|
|
+ status = decode_compound_hdr(xdr, &hdr);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- status = decode_putfh(&xdr);
|
|
|
+ status = decode_putfh(xdr);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- status = decode_open_confirm(&xdr, res);
|
|
|
+ status = decode_open_confirm(xdr, res);
|
|
|
out:
|
|
|
return status;
|
|
|
}
|
|
@@ -5535,26 +5463,26 @@ out:
|
|
|
/*
|
|
|
* Decode OPEN response
|
|
|
*/
|
|
|
-static int nfs4_xdr_dec_open_noattr(struct rpc_rqst *rqstp, __be32 *p, struct nfs_openres *res)
|
|
|
+static int nfs4_xdr_dec_open_noattr(struct rpc_rqst *rqstp,
|
|
|
+ struct xdr_stream *xdr,
|
|
|
+ struct nfs_openres *res)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr;
|
|
|
int status;
|
|
|
|
|
|
- xdr_init_decode(&xdr, &rqstp->rq_rcv_buf, p);
|
|
|
- status = decode_compound_hdr(&xdr, &hdr);
|
|
|
+ status = decode_compound_hdr(xdr, &hdr);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- status = decode_sequence(&xdr, &res->seq_res, rqstp);
|
|
|
+ status = decode_sequence(xdr, &res->seq_res, rqstp);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- status = decode_putfh(&xdr);
|
|
|
+ status = decode_putfh(xdr);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- status = decode_open(&xdr, res);
|
|
|
+ status = decode_open(xdr, res);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- decode_getfattr(&xdr, res->f_attr, res->server,
|
|
|
+ decode_getfattr(xdr, res->f_attr, res->server,
|
|
|
!RPC_IS_ASYNC(rqstp->rq_task));
|
|
|
out:
|
|
|
return status;
|
|
@@ -5563,26 +5491,26 @@ out:
|
|
|
/*
|
|
|
* Decode SETATTR response
|
|
|
*/
|
|
|
-static int nfs4_xdr_dec_setattr(struct rpc_rqst *rqstp, __be32 *p, struct nfs_setattrres *res)
|
|
|
+static int nfs4_xdr_dec_setattr(struct rpc_rqst *rqstp,
|
|
|
+ struct xdr_stream *xdr,
|
|
|
+ struct nfs_setattrres *res)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr;
|
|
|
int status;
|
|
|
|
|
|
- xdr_init_decode(&xdr, &rqstp->rq_rcv_buf, p);
|
|
|
- status = decode_compound_hdr(&xdr, &hdr);
|
|
|
+ status = decode_compound_hdr(xdr, &hdr);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- status = decode_sequence(&xdr, &res->seq_res, rqstp);
|
|
|
+ status = decode_sequence(xdr, &res->seq_res, rqstp);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- status = decode_putfh(&xdr);
|
|
|
+ status = decode_putfh(xdr);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- status = decode_setattr(&xdr);
|
|
|
+ status = decode_setattr(xdr);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- decode_getfattr(&xdr, res->fattr, res->server,
|
|
|
+ decode_getfattr(xdr, res->fattr, res->server,
|
|
|
!RPC_IS_ASYNC(rqstp->rq_task));
|
|
|
out:
|
|
|
return status;
|
|
@@ -5591,23 +5519,22 @@ out:
|
|
|
/*
|
|
|
* Decode LOCK response
|
|
|
*/
|
|
|
-static int nfs4_xdr_dec_lock(struct rpc_rqst *rqstp, __be32 *p, struct nfs_lock_res *res)
|
|
|
+static int nfs4_xdr_dec_lock(struct rpc_rqst *rqstp, struct xdr_stream *xdr,
|
|
|
+ struct nfs_lock_res *res)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr;
|
|
|
int status;
|
|
|
|
|
|
- xdr_init_decode(&xdr, &rqstp->rq_rcv_buf, p);
|
|
|
- status = decode_compound_hdr(&xdr, &hdr);
|
|
|
+ status = decode_compound_hdr(xdr, &hdr);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- status = decode_sequence(&xdr, &res->seq_res, rqstp);
|
|
|
+ status = decode_sequence(xdr, &res->seq_res, rqstp);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- status = decode_putfh(&xdr);
|
|
|
+ status = decode_putfh(xdr);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- status = decode_lock(&xdr, res);
|
|
|
+ status = decode_lock(xdr, res);
|
|
|
out:
|
|
|
return status;
|
|
|
}
|
|
@@ -5615,23 +5542,22 @@ out:
|
|
|
/*
|
|
|
* Decode LOCKT response
|
|
|
*/
|
|
|
-static int nfs4_xdr_dec_lockt(struct rpc_rqst *rqstp, __be32 *p, struct nfs_lockt_res *res)
|
|
|
+static int nfs4_xdr_dec_lockt(struct rpc_rqst *rqstp, struct xdr_stream *xdr,
|
|
|
+ struct nfs_lockt_res *res)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr;
|
|
|
int status;
|
|
|
|
|
|
- xdr_init_decode(&xdr, &rqstp->rq_rcv_buf, p);
|
|
|
- status = decode_compound_hdr(&xdr, &hdr);
|
|
|
+ status = decode_compound_hdr(xdr, &hdr);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- status = decode_sequence(&xdr, &res->seq_res, rqstp);
|
|
|
+ status = decode_sequence(xdr, &res->seq_res, rqstp);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- status = decode_putfh(&xdr);
|
|
|
+ status = decode_putfh(xdr);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- status = decode_lockt(&xdr, res);
|
|
|
+ status = decode_lockt(xdr, res);
|
|
|
out:
|
|
|
return status;
|
|
|
}
|
|
@@ -5639,61 +5565,58 @@ out:
|
|
|
/*
|
|
|
* Decode LOCKU response
|
|
|
*/
|
|
|
-static int nfs4_xdr_dec_locku(struct rpc_rqst *rqstp, __be32 *p, struct nfs_locku_res *res)
|
|
|
+static int nfs4_xdr_dec_locku(struct rpc_rqst *rqstp, struct xdr_stream *xdr,
|
|
|
+ struct nfs_locku_res *res)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr;
|
|
|
int status;
|
|
|
|
|
|
- xdr_init_decode(&xdr, &rqstp->rq_rcv_buf, p);
|
|
|
- status = decode_compound_hdr(&xdr, &hdr);
|
|
|
+ status = decode_compound_hdr(xdr, &hdr);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- status = decode_sequence(&xdr, &res->seq_res, rqstp);
|
|
|
+ status = decode_sequence(xdr, &res->seq_res, rqstp);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- status = decode_putfh(&xdr);
|
|
|
+ status = decode_putfh(xdr);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- status = decode_locku(&xdr, res);
|
|
|
+ status = decode_locku(xdr, res);
|
|
|
out:
|
|
|
return status;
|
|
|
}
|
|
|
|
|
|
-static int nfs4_xdr_dec_release_lockowner(struct rpc_rqst *rqstp, __be32 *p, void *dummy)
|
|
|
+static int nfs4_xdr_dec_release_lockowner(struct rpc_rqst *rqstp,
|
|
|
+ struct xdr_stream *xdr, void *dummy)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr;
|
|
|
int status;
|
|
|
|
|
|
- xdr_init_decode(&xdr, &rqstp->rq_rcv_buf, p);
|
|
|
- status = decode_compound_hdr(&xdr, &hdr);
|
|
|
+ status = decode_compound_hdr(xdr, &hdr);
|
|
|
if (!status)
|
|
|
- status = decode_release_lockowner(&xdr);
|
|
|
+ status = decode_release_lockowner(xdr);
|
|
|
return status;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* Decode READLINK response
|
|
|
*/
|
|
|
-static int nfs4_xdr_dec_readlink(struct rpc_rqst *rqstp, __be32 *p,
|
|
|
+static int nfs4_xdr_dec_readlink(struct rpc_rqst *rqstp,
|
|
|
+ struct xdr_stream *xdr,
|
|
|
struct nfs4_readlink_res *res)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr;
|
|
|
int status;
|
|
|
|
|
|
- xdr_init_decode(&xdr, &rqstp->rq_rcv_buf, p);
|
|
|
- status = decode_compound_hdr(&xdr, &hdr);
|
|
|
+ status = decode_compound_hdr(xdr, &hdr);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- status = decode_sequence(&xdr, &res->seq_res, rqstp);
|
|
|
+ status = decode_sequence(xdr, &res->seq_res, rqstp);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- status = decode_putfh(&xdr);
|
|
|
+ status = decode_putfh(xdr);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- status = decode_readlink(&xdr, rqstp);
|
|
|
+ status = decode_readlink(xdr, rqstp);
|
|
|
out:
|
|
|
return status;
|
|
|
}
|
|
@@ -5701,23 +5624,22 @@ out:
|
|
|
/*
|
|
|
* Decode READDIR response
|
|
|
*/
|
|
|
-static int nfs4_xdr_dec_readdir(struct rpc_rqst *rqstp, __be32 *p, struct nfs4_readdir_res *res)
|
|
|
+static int nfs4_xdr_dec_readdir(struct rpc_rqst *rqstp, struct xdr_stream *xdr,
|
|
|
+ struct nfs4_readdir_res *res)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr;
|
|
|
int status;
|
|
|
|
|
|
- xdr_init_decode(&xdr, &rqstp->rq_rcv_buf, p);
|
|
|
- status = decode_compound_hdr(&xdr, &hdr);
|
|
|
+ status = decode_compound_hdr(xdr, &hdr);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- status = decode_sequence(&xdr, &res->seq_res, rqstp);
|
|
|
+ status = decode_sequence(xdr, &res->seq_res, rqstp);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- status = decode_putfh(&xdr);
|
|
|
+ status = decode_putfh(xdr);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- status = decode_readdir(&xdr, rqstp, res);
|
|
|
+ status = decode_readdir(xdr, rqstp, res);
|
|
|
out:
|
|
|
return status;
|
|
|
}
|
|
@@ -5725,23 +5647,22 @@ out:
|
|
|
/*
|
|
|
* Decode Read response
|
|
|
*/
|
|
|
-static int nfs4_xdr_dec_read(struct rpc_rqst *rqstp, __be32 *p, struct nfs_readres *res)
|
|
|
+static int nfs4_xdr_dec_read(struct rpc_rqst *rqstp, struct xdr_stream *xdr,
|
|
|
+ struct nfs_readres *res)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr;
|
|
|
int status;
|
|
|
|
|
|
- xdr_init_decode(&xdr, &rqstp->rq_rcv_buf, p);
|
|
|
- status = decode_compound_hdr(&xdr, &hdr);
|
|
|
+ status = decode_compound_hdr(xdr, &hdr);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- status = decode_sequence(&xdr, &res->seq_res, rqstp);
|
|
|
+ status = decode_sequence(xdr, &res->seq_res, rqstp);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- status = decode_putfh(&xdr);
|
|
|
+ status = decode_putfh(xdr);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- status = decode_read(&xdr, rqstp, res);
|
|
|
+ status = decode_read(xdr, rqstp, res);
|
|
|
if (!status)
|
|
|
status = res->count;
|
|
|
out:
|
|
@@ -5751,26 +5672,25 @@ out:
|
|
|
/*
|
|
|
* Decode WRITE response
|
|
|
*/
|
|
|
-static int nfs4_xdr_dec_write(struct rpc_rqst *rqstp, __be32 *p, struct nfs_writeres *res)
|
|
|
+static int nfs4_xdr_dec_write(struct rpc_rqst *rqstp, struct xdr_stream *xdr,
|
|
|
+ struct nfs_writeres *res)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr;
|
|
|
int status;
|
|
|
|
|
|
- xdr_init_decode(&xdr, &rqstp->rq_rcv_buf, p);
|
|
|
- status = decode_compound_hdr(&xdr, &hdr);
|
|
|
+ status = decode_compound_hdr(xdr, &hdr);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- status = decode_sequence(&xdr, &res->seq_res, rqstp);
|
|
|
+ status = decode_sequence(xdr, &res->seq_res, rqstp);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- status = decode_putfh(&xdr);
|
|
|
+ status = decode_putfh(xdr);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- status = decode_write(&xdr, res);
|
|
|
+ status = decode_write(xdr, res);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- decode_getfattr(&xdr, res->fattr, res->server,
|
|
|
+ decode_getfattr(xdr, res->fattr, res->server,
|
|
|
!RPC_IS_ASYNC(rqstp->rq_task));
|
|
|
if (!status)
|
|
|
status = res->count;
|
|
@@ -5781,26 +5701,25 @@ out:
|
|
|
/*
|
|
|
* Decode COMMIT response
|
|
|
*/
|
|
|
-static int nfs4_xdr_dec_commit(struct rpc_rqst *rqstp, __be32 *p, struct nfs_writeres *res)
|
|
|
+static int nfs4_xdr_dec_commit(struct rpc_rqst *rqstp, struct xdr_stream *xdr,
|
|
|
+ struct nfs_writeres *res)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr;
|
|
|
int status;
|
|
|
|
|
|
- xdr_init_decode(&xdr, &rqstp->rq_rcv_buf, p);
|
|
|
- status = decode_compound_hdr(&xdr, &hdr);
|
|
|
+ status = decode_compound_hdr(xdr, &hdr);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- status = decode_sequence(&xdr, &res->seq_res, rqstp);
|
|
|
+ status = decode_sequence(xdr, &res->seq_res, rqstp);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- status = decode_putfh(&xdr);
|
|
|
+ status = decode_putfh(xdr);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- status = decode_commit(&xdr, res);
|
|
|
+ status = decode_commit(xdr, res);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- decode_getfattr(&xdr, res->fattr, res->server,
|
|
|
+ decode_getfattr(xdr, res->fattr, res->server,
|
|
|
!RPC_IS_ASYNC(rqstp->rq_task));
|
|
|
out:
|
|
|
return status;
|
|
@@ -5809,85 +5728,80 @@ out:
|
|
|
/*
|
|
|
* Decode FSINFO response
|
|
|
*/
|
|
|
-static int nfs4_xdr_dec_fsinfo(struct rpc_rqst *req, __be32 *p,
|
|
|
+static int nfs4_xdr_dec_fsinfo(struct rpc_rqst *req, struct xdr_stream *xdr,
|
|
|
struct nfs4_fsinfo_res *res)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr;
|
|
|
int status;
|
|
|
|
|
|
- xdr_init_decode(&xdr, &req->rq_rcv_buf, p);
|
|
|
- status = decode_compound_hdr(&xdr, &hdr);
|
|
|
+ status = decode_compound_hdr(xdr, &hdr);
|
|
|
if (!status)
|
|
|
- status = decode_sequence(&xdr, &res->seq_res, req);
|
|
|
+ status = decode_sequence(xdr, &res->seq_res, req);
|
|
|
if (!status)
|
|
|
- status = decode_putfh(&xdr);
|
|
|
+ status = decode_putfh(xdr);
|
|
|
if (!status)
|
|
|
- status = decode_fsinfo(&xdr, res->fsinfo);
|
|
|
+ status = decode_fsinfo(xdr, res->fsinfo);
|
|
|
return status;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* Decode PATHCONF response
|
|
|
*/
|
|
|
-static int nfs4_xdr_dec_pathconf(struct rpc_rqst *req, __be32 *p,
|
|
|
+static int nfs4_xdr_dec_pathconf(struct rpc_rqst *req, struct xdr_stream *xdr,
|
|
|
struct nfs4_pathconf_res *res)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr;
|
|
|
int status;
|
|
|
|
|
|
- xdr_init_decode(&xdr, &req->rq_rcv_buf, p);
|
|
|
- status = decode_compound_hdr(&xdr, &hdr);
|
|
|
+ status = decode_compound_hdr(xdr, &hdr);
|
|
|
if (!status)
|
|
|
- status = decode_sequence(&xdr, &res->seq_res, req);
|
|
|
+ status = decode_sequence(xdr, &res->seq_res, req);
|
|
|
if (!status)
|
|
|
- status = decode_putfh(&xdr);
|
|
|
+ status = decode_putfh(xdr);
|
|
|
if (!status)
|
|
|
- status = decode_pathconf(&xdr, res->pathconf);
|
|
|
+ status = decode_pathconf(xdr, res->pathconf);
|
|
|
return status;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* Decode STATFS response
|
|
|
*/
|
|
|
-static int nfs4_xdr_dec_statfs(struct rpc_rqst *req, __be32 *p,
|
|
|
+static int nfs4_xdr_dec_statfs(struct rpc_rqst *req, struct xdr_stream *xdr,
|
|
|
struct nfs4_statfs_res *res)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr;
|
|
|
int status;
|
|
|
|
|
|
- xdr_init_decode(&xdr, &req->rq_rcv_buf, p);
|
|
|
- status = decode_compound_hdr(&xdr, &hdr);
|
|
|
+ status = decode_compound_hdr(xdr, &hdr);
|
|
|
if (!status)
|
|
|
- status = decode_sequence(&xdr, &res->seq_res, req);
|
|
|
+ status = decode_sequence(xdr, &res->seq_res, req);
|
|
|
if (!status)
|
|
|
- status = decode_putfh(&xdr);
|
|
|
+ status = decode_putfh(xdr);
|
|
|
if (!status)
|
|
|
- status = decode_statfs(&xdr, res->fsstat);
|
|
|
+ status = decode_statfs(xdr, res->fsstat);
|
|
|
return status;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* Decode GETATTR_BITMAP response
|
|
|
*/
|
|
|
-static int nfs4_xdr_dec_server_caps(struct rpc_rqst *req, __be32 *p, struct nfs4_server_caps_res *res)
|
|
|
+static int nfs4_xdr_dec_server_caps(struct rpc_rqst *req,
|
|
|
+ struct xdr_stream *xdr,
|
|
|
+ struct nfs4_server_caps_res *res)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr;
|
|
|
int status;
|
|
|
|
|
|
- xdr_init_decode(&xdr, &req->rq_rcv_buf, p);
|
|
|
- status = decode_compound_hdr(&xdr, &hdr);
|
|
|
+ status = decode_compound_hdr(xdr, &hdr);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- status = decode_sequence(&xdr, &res->seq_res, req);
|
|
|
+ status = decode_sequence(xdr, &res->seq_res, req);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- if ((status = decode_putfh(&xdr)) != 0)
|
|
|
+ status = decode_putfh(xdr);
|
|
|
+ if (status)
|
|
|
goto out;
|
|
|
- status = decode_server_caps(&xdr, res);
|
|
|
+ status = decode_server_caps(xdr, res);
|
|
|
out:
|
|
|
return status;
|
|
|
}
|
|
@@ -5895,79 +5809,77 @@ out:
|
|
|
/*
|
|
|
* Decode RENEW response
|
|
|
*/
|
|
|
-static int nfs4_xdr_dec_renew(struct rpc_rqst *rqstp, __be32 *p, void *dummy)
|
|
|
+static int nfs4_xdr_dec_renew(struct rpc_rqst *rqstp, struct xdr_stream *xdr,
|
|
|
+ void *__unused)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr;
|
|
|
int status;
|
|
|
|
|
|
- xdr_init_decode(&xdr, &rqstp->rq_rcv_buf, p);
|
|
|
- status = decode_compound_hdr(&xdr, &hdr);
|
|
|
+ status = decode_compound_hdr(xdr, &hdr);
|
|
|
if (!status)
|
|
|
- status = decode_renew(&xdr);
|
|
|
+ status = decode_renew(xdr);
|
|
|
return status;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* Decode SETCLIENTID response
|
|
|
*/
|
|
|
-static int nfs4_xdr_dec_setclientid(struct rpc_rqst *req, __be32 *p,
|
|
|
- struct nfs4_setclientid_res *res)
|
|
|
+static int nfs4_xdr_dec_setclientid(struct rpc_rqst *req,
|
|
|
+ struct xdr_stream *xdr,
|
|
|
+ struct nfs4_setclientid_res *res)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr;
|
|
|
int status;
|
|
|
|
|
|
- xdr_init_decode(&xdr, &req->rq_rcv_buf, p);
|
|
|
- status = decode_compound_hdr(&xdr, &hdr);
|
|
|
+ status = decode_compound_hdr(xdr, &hdr);
|
|
|
if (!status)
|
|
|
- status = decode_setclientid(&xdr, res);
|
|
|
+ status = decode_setclientid(xdr, res);
|
|
|
return status;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* Decode SETCLIENTID_CONFIRM response
|
|
|
*/
|
|
|
-static int nfs4_xdr_dec_setclientid_confirm(struct rpc_rqst *req, __be32 *p, struct nfs_fsinfo *fsinfo)
|
|
|
+static int nfs4_xdr_dec_setclientid_confirm(struct rpc_rqst *req,
|
|
|
+ struct xdr_stream *xdr,
|
|
|
+ struct nfs_fsinfo *fsinfo)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr;
|
|
|
int status;
|
|
|
|
|
|
- xdr_init_decode(&xdr, &req->rq_rcv_buf, p);
|
|
|
- status = decode_compound_hdr(&xdr, &hdr);
|
|
|
+ status = decode_compound_hdr(xdr, &hdr);
|
|
|
if (!status)
|
|
|
- status = decode_setclientid_confirm(&xdr);
|
|
|
+ status = decode_setclientid_confirm(xdr);
|
|
|
if (!status)
|
|
|
- status = decode_putrootfh(&xdr);
|
|
|
+ status = decode_putrootfh(xdr);
|
|
|
if (!status)
|
|
|
- status = decode_fsinfo(&xdr, fsinfo);
|
|
|
+ status = decode_fsinfo(xdr, fsinfo);
|
|
|
return status;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* Decode DELEGRETURN response
|
|
|
*/
|
|
|
-static int nfs4_xdr_dec_delegreturn(struct rpc_rqst *rqstp, __be32 *p, struct nfs4_delegreturnres *res)
|
|
|
+static int nfs4_xdr_dec_delegreturn(struct rpc_rqst *rqstp,
|
|
|
+ struct xdr_stream *xdr,
|
|
|
+ struct nfs4_delegreturnres *res)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr;
|
|
|
int status;
|
|
|
|
|
|
- xdr_init_decode(&xdr, &rqstp->rq_rcv_buf, p);
|
|
|
- status = decode_compound_hdr(&xdr, &hdr);
|
|
|
+ status = decode_compound_hdr(xdr, &hdr);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- status = decode_sequence(&xdr, &res->seq_res, rqstp);
|
|
|
+ status = decode_sequence(xdr, &res->seq_res, rqstp);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- status = decode_putfh(&xdr);
|
|
|
+ status = decode_putfh(xdr);
|
|
|
if (status != 0)
|
|
|
goto out;
|
|
|
- status = decode_delegreturn(&xdr);
|
|
|
+ status = decode_delegreturn(xdr);
|
|
|
if (status != 0)
|
|
|
goto out;
|
|
|
- decode_getfattr(&xdr, res->fattr, res->server,
|
|
|
+ decode_getfattr(xdr, res->fattr, res->server,
|
|
|
!RPC_IS_ASYNC(rqstp->rq_task));
|
|
|
out:
|
|
|
return status;
|
|
@@ -5976,26 +5888,27 @@ out:
|
|
|
/*
|
|
|
* Decode FS_LOCATIONS response
|
|
|
*/
|
|
|
-static int nfs4_xdr_dec_fs_locations(struct rpc_rqst *req, __be32 *p,
|
|
|
+static int nfs4_xdr_dec_fs_locations(struct rpc_rqst *req,
|
|
|
+ struct xdr_stream *xdr,
|
|
|
struct nfs4_fs_locations_res *res)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr;
|
|
|
int status;
|
|
|
|
|
|
- xdr_init_decode(&xdr, &req->rq_rcv_buf, p);
|
|
|
- status = decode_compound_hdr(&xdr, &hdr);
|
|
|
+ status = decode_compound_hdr(xdr, &hdr);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- status = decode_sequence(&xdr, &res->seq_res, req);
|
|
|
+ status = decode_sequence(xdr, &res->seq_res, req);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- if ((status = decode_putfh(&xdr)) != 0)
|
|
|
+ status = decode_putfh(xdr);
|
|
|
+ if (status)
|
|
|
goto out;
|
|
|
- if ((status = decode_lookup(&xdr)) != 0)
|
|
|
+ status = decode_lookup(xdr);
|
|
|
+ if (status)
|
|
|
goto out;
|
|
|
- xdr_enter_page(&xdr, PAGE_SIZE);
|
|
|
- status = decode_getfattr(&xdr, &res->fs_locations->fattr,
|
|
|
+ xdr_enter_page(xdr, PAGE_SIZE);
|
|
|
+ status = decode_getfattr(xdr, &res->fs_locations->fattr,
|
|
|
res->fs_locations->server,
|
|
|
!RPC_IS_ASYNC(req->rq_task));
|
|
|
out:
|
|
@@ -6006,129 +5919,122 @@ out:
|
|
|
/*
|
|
|
* Decode EXCHANGE_ID response
|
|
|
*/
|
|
|
-static int nfs4_xdr_dec_exchange_id(struct rpc_rqst *rqstp, uint32_t *p,
|
|
|
+static int nfs4_xdr_dec_exchange_id(struct rpc_rqst *rqstp,
|
|
|
+ struct xdr_stream *xdr,
|
|
|
void *res)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr;
|
|
|
int status;
|
|
|
|
|
|
- xdr_init_decode(&xdr, &rqstp->rq_rcv_buf, p);
|
|
|
- status = decode_compound_hdr(&xdr, &hdr);
|
|
|
+ status = decode_compound_hdr(xdr, &hdr);
|
|
|
if (!status)
|
|
|
- status = decode_exchange_id(&xdr, res);
|
|
|
+ status = decode_exchange_id(xdr, res);
|
|
|
return status;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* Decode CREATE_SESSION response
|
|
|
*/
|
|
|
-static int nfs4_xdr_dec_create_session(struct rpc_rqst *rqstp, uint32_t *p,
|
|
|
+static int nfs4_xdr_dec_create_session(struct rpc_rqst *rqstp,
|
|
|
+ struct xdr_stream *xdr,
|
|
|
struct nfs41_create_session_res *res)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr;
|
|
|
int status;
|
|
|
|
|
|
- xdr_init_decode(&xdr, &rqstp->rq_rcv_buf, p);
|
|
|
- status = decode_compound_hdr(&xdr, &hdr);
|
|
|
+ status = decode_compound_hdr(xdr, &hdr);
|
|
|
if (!status)
|
|
|
- status = decode_create_session(&xdr, res);
|
|
|
+ status = decode_create_session(xdr, res);
|
|
|
return status;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* Decode DESTROY_SESSION response
|
|
|
*/
|
|
|
-static int nfs4_xdr_dec_destroy_session(struct rpc_rqst *rqstp, uint32_t *p,
|
|
|
- void *dummy)
|
|
|
+static int nfs4_xdr_dec_destroy_session(struct rpc_rqst *rqstp,
|
|
|
+ struct xdr_stream *xdr,
|
|
|
+ void *res)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr;
|
|
|
int status;
|
|
|
|
|
|
- xdr_init_decode(&xdr, &rqstp->rq_rcv_buf, p);
|
|
|
- status = decode_compound_hdr(&xdr, &hdr);
|
|
|
+ status = decode_compound_hdr(xdr, &hdr);
|
|
|
if (!status)
|
|
|
- status = decode_destroy_session(&xdr, dummy);
|
|
|
+ status = decode_destroy_session(xdr, res);
|
|
|
return status;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* Decode SEQUENCE response
|
|
|
*/
|
|
|
-static int nfs4_xdr_dec_sequence(struct rpc_rqst *rqstp, uint32_t *p,
|
|
|
+static int nfs4_xdr_dec_sequence(struct rpc_rqst *rqstp,
|
|
|
+ struct xdr_stream *xdr,
|
|
|
struct nfs4_sequence_res *res)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr;
|
|
|
int status;
|
|
|
|
|
|
- xdr_init_decode(&xdr, &rqstp->rq_rcv_buf, p);
|
|
|
- status = decode_compound_hdr(&xdr, &hdr);
|
|
|
+ status = decode_compound_hdr(xdr, &hdr);
|
|
|
if (!status)
|
|
|
- status = decode_sequence(&xdr, res, rqstp);
|
|
|
+ status = decode_sequence(xdr, res, rqstp);
|
|
|
return status;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* Decode GET_LEASE_TIME response
|
|
|
*/
|
|
|
-static int nfs4_xdr_dec_get_lease_time(struct rpc_rqst *rqstp, uint32_t *p,
|
|
|
+static int nfs4_xdr_dec_get_lease_time(struct rpc_rqst *rqstp,
|
|
|
+ struct xdr_stream *xdr,
|
|
|
struct nfs4_get_lease_time_res *res)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr;
|
|
|
int status;
|
|
|
|
|
|
- xdr_init_decode(&xdr, &rqstp->rq_rcv_buf, p);
|
|
|
- status = decode_compound_hdr(&xdr, &hdr);
|
|
|
+ status = decode_compound_hdr(xdr, &hdr);
|
|
|
if (!status)
|
|
|
- status = decode_sequence(&xdr, &res->lr_seq_res, rqstp);
|
|
|
+ status = decode_sequence(xdr, &res->lr_seq_res, rqstp);
|
|
|
if (!status)
|
|
|
- status = decode_putrootfh(&xdr);
|
|
|
+ status = decode_putrootfh(xdr);
|
|
|
if (!status)
|
|
|
- status = decode_fsinfo(&xdr, res->lr_fsinfo);
|
|
|
+ status = decode_fsinfo(xdr, res->lr_fsinfo);
|
|
|
return status;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* Decode RECLAIM_COMPLETE response
|
|
|
*/
|
|
|
-static int nfs4_xdr_dec_reclaim_complete(struct rpc_rqst *rqstp, uint32_t *p,
|
|
|
+static int nfs4_xdr_dec_reclaim_complete(struct rpc_rqst *rqstp,
|
|
|
+ struct xdr_stream *xdr,
|
|
|
struct nfs41_reclaim_complete_res *res)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr;
|
|
|
int status;
|
|
|
|
|
|
- xdr_init_decode(&xdr, &rqstp->rq_rcv_buf, p);
|
|
|
- status = decode_compound_hdr(&xdr, &hdr);
|
|
|
+ status = decode_compound_hdr(xdr, &hdr);
|
|
|
if (!status)
|
|
|
- status = decode_sequence(&xdr, &res->seq_res, rqstp);
|
|
|
+ status = decode_sequence(xdr, &res->seq_res, rqstp);
|
|
|
if (!status)
|
|
|
- status = decode_reclaim_complete(&xdr, (void *)NULL);
|
|
|
+ status = decode_reclaim_complete(xdr, (void *)NULL);
|
|
|
return status;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
* Decode GETDEVINFO response
|
|
|
*/
|
|
|
-static int nfs4_xdr_dec_getdeviceinfo(struct rpc_rqst *rqstp, uint32_t *p,
|
|
|
+static int nfs4_xdr_dec_getdeviceinfo(struct rpc_rqst *rqstp,
|
|
|
+ struct xdr_stream *xdr,
|
|
|
struct nfs4_getdeviceinfo_res *res)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr;
|
|
|
int status;
|
|
|
|
|
|
- xdr_init_decode(&xdr, &rqstp->rq_rcv_buf, p);
|
|
|
- status = decode_compound_hdr(&xdr, &hdr);
|
|
|
+ status = decode_compound_hdr(xdr, &hdr);
|
|
|
if (status != 0)
|
|
|
goto out;
|
|
|
- status = decode_sequence(&xdr, &res->seq_res, rqstp);
|
|
|
+ status = decode_sequence(xdr, &res->seq_res, rqstp);
|
|
|
if (status != 0)
|
|
|
goto out;
|
|
|
- status = decode_getdeviceinfo(&xdr, res->pdev);
|
|
|
+ status = decode_getdeviceinfo(xdr, res->pdev);
|
|
|
out:
|
|
|
return status;
|
|
|
}
|
|
@@ -6136,31 +6042,44 @@ out:
|
|
|
/*
|
|
|
* Decode LAYOUTGET response
|
|
|
*/
|
|
|
-static int nfs4_xdr_dec_layoutget(struct rpc_rqst *rqstp, uint32_t *p,
|
|
|
+static int nfs4_xdr_dec_layoutget(struct rpc_rqst *rqstp,
|
|
|
+ struct xdr_stream *xdr,
|
|
|
struct nfs4_layoutget_res *res)
|
|
|
{
|
|
|
- struct xdr_stream xdr;
|
|
|
struct compound_hdr hdr;
|
|
|
int status;
|
|
|
|
|
|
- xdr_init_decode(&xdr, &rqstp->rq_rcv_buf, p);
|
|
|
- status = decode_compound_hdr(&xdr, &hdr);
|
|
|
+ status = decode_compound_hdr(xdr, &hdr);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- status = decode_sequence(&xdr, &res->seq_res, rqstp);
|
|
|
+ status = decode_sequence(xdr, &res->seq_res, rqstp);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- status = decode_putfh(&xdr);
|
|
|
+ status = decode_putfh(xdr);
|
|
|
if (status)
|
|
|
goto out;
|
|
|
- status = decode_layoutget(&xdr, rqstp, res);
|
|
|
+ status = decode_layoutget(xdr, rqstp, res);
|
|
|
out:
|
|
|
return status;
|
|
|
}
|
|
|
#endif /* CONFIG_NFS_V4_1 */
|
|
|
|
|
|
-__be32 *nfs4_decode_dirent(struct xdr_stream *xdr, struct nfs_entry *entry,
|
|
|
- struct nfs_server *server, int plus)
|
|
|
+/**
|
|
|
+ * nfs4_decode_dirent - Decode a single NFSv4 directory entry stored in
|
|
|
+ * the local page cache.
|
|
|
+ * @xdr: XDR stream where entry resides
|
|
|
+ * @entry: buffer to fill in with entry data
|
|
|
+ * @plus: boolean indicating whether this should be a readdirplus entry
|
|
|
+ *
|
|
|
+ * Returns zero if successful, otherwise a negative errno value is
|
|
|
+ * returned.
|
|
|
+ *
|
|
|
+ * This function is not invoked during READDIR reply decoding, but
|
|
|
+ * rather whenever an application invokes the getdents(2) system call
|
|
|
+ * on a directory already in our cache.
|
|
|
+ */
|
|
|
+int nfs4_decode_dirent(struct xdr_stream *xdr, struct nfs_entry *entry,
|
|
|
+ int plus)
|
|
|
{
|
|
|
uint32_t bitmap[2] = {0};
|
|
|
uint32_t len;
|
|
@@ -6172,9 +6091,9 @@ __be32 *nfs4_decode_dirent(struct xdr_stream *xdr, struct nfs_entry *entry,
|
|
|
if (unlikely(!p))
|
|
|
goto out_overflow;
|
|
|
if (!ntohl(*p++))
|
|
|
- return ERR_PTR(-EAGAIN);
|
|
|
+ return -EAGAIN;
|
|
|
entry->eof = 1;
|
|
|
- return ERR_PTR(-EBADCOOKIE);
|
|
|
+ return -EBADCOOKIE;
|
|
|
}
|
|
|
|
|
|
p = xdr_inline_decode(xdr, 12);
|
|
@@ -6203,7 +6122,8 @@ __be32 *nfs4_decode_dirent(struct xdr_stream *xdr, struct nfs_entry *entry,
|
|
|
if (decode_attr_length(xdr, &len, &p) < 0)
|
|
|
goto out_overflow;
|
|
|
|
|
|
- if (decode_getfattr_attrs(xdr, bitmap, entry->fattr, entry->fh, server, 1) < 0)
|
|
|
+ if (decode_getfattr_attrs(xdr, bitmap, entry->fattr, entry->fh,
|
|
|
+ entry->server, 1) < 0)
|
|
|
goto out_overflow;
|
|
|
if (entry->fattr->valid & NFS_ATTR_FATTR_FILEID)
|
|
|
entry->ino = entry->fattr->fileid;
|
|
@@ -6215,17 +6135,11 @@ __be32 *nfs4_decode_dirent(struct xdr_stream *xdr, struct nfs_entry *entry,
|
|
|
if (verify_attr_len(xdr, p, len) < 0)
|
|
|
goto out_overflow;
|
|
|
|
|
|
- p = xdr_inline_peek(xdr, 8);
|
|
|
- if (p != NULL)
|
|
|
- entry->eof = !p[0] && p[1];
|
|
|
- else
|
|
|
- entry->eof = 0;
|
|
|
-
|
|
|
- return p;
|
|
|
+ return 0;
|
|
|
|
|
|
out_overflow:
|
|
|
print_overflow_msg(__func__, xdr);
|
|
|
- return ERR_PTR(-EAGAIN);
|
|
|
+ return -EAGAIN;
|
|
|
}
|
|
|
|
|
|
/*
|
|
@@ -6301,8 +6215,8 @@ nfs4_stat_to_errno(int stat)
|
|
|
#define PROC(proc, argtype, restype) \
|
|
|
[NFSPROC4_CLNT_##proc] = { \
|
|
|
.p_proc = NFSPROC4_COMPOUND, \
|
|
|
- .p_encode = (kxdrproc_t) nfs4_xdr_##argtype, \
|
|
|
- .p_decode = (kxdrproc_t) nfs4_xdr_##restype, \
|
|
|
+ .p_encode = (kxdreproc_t)nfs4_xdr_##argtype, \
|
|
|
+ .p_decode = (kxdrdproc_t)nfs4_xdr_##restype, \
|
|
|
.p_arglen = NFS4_##argtype##_sz, \
|
|
|
.p_replen = NFS4_##restype##_sz, \
|
|
|
.p_statidx = NFSPROC4_CLNT_##proc, \
|
|
@@ -6310,50 +6224,50 @@ nfs4_stat_to_errno(int stat)
|
|
|
}
|
|
|
|
|
|
struct rpc_procinfo nfs4_procedures[] = {
|
|
|
- PROC(READ, enc_read, dec_read),
|
|
|
- PROC(WRITE, enc_write, dec_write),
|
|
|
- PROC(COMMIT, enc_commit, dec_commit),
|
|
|
- PROC(OPEN, enc_open, dec_open),
|
|
|
- PROC(OPEN_CONFIRM, enc_open_confirm, dec_open_confirm),
|
|
|
- PROC(OPEN_NOATTR, enc_open_noattr, dec_open_noattr),
|
|
|
- PROC(OPEN_DOWNGRADE, enc_open_downgrade, dec_open_downgrade),
|
|
|
- PROC(CLOSE, enc_close, dec_close),
|
|
|
- PROC(SETATTR, enc_setattr, dec_setattr),
|
|
|
- PROC(FSINFO, enc_fsinfo, dec_fsinfo),
|
|
|
- PROC(RENEW, enc_renew, dec_renew),
|
|
|
- PROC(SETCLIENTID, enc_setclientid, dec_setclientid),
|
|
|
- PROC(SETCLIENTID_CONFIRM, enc_setclientid_confirm, dec_setclientid_confirm),
|
|
|
- PROC(LOCK, enc_lock, dec_lock),
|
|
|
- PROC(LOCKT, enc_lockt, dec_lockt),
|
|
|
- PROC(LOCKU, enc_locku, dec_locku),
|
|
|
- PROC(ACCESS, enc_access, dec_access),
|
|
|
- PROC(GETATTR, enc_getattr, dec_getattr),
|
|
|
- PROC(LOOKUP, enc_lookup, dec_lookup),
|
|
|
- PROC(LOOKUP_ROOT, enc_lookup_root, dec_lookup_root),
|
|
|
- PROC(REMOVE, enc_remove, dec_remove),
|
|
|
- PROC(RENAME, enc_rename, dec_rename),
|
|
|
- PROC(LINK, enc_link, dec_link),
|
|
|
- PROC(SYMLINK, enc_symlink, dec_symlink),
|
|
|
- PROC(CREATE, enc_create, dec_create),
|
|
|
- PROC(PATHCONF, enc_pathconf, dec_pathconf),
|
|
|
- PROC(STATFS, enc_statfs, dec_statfs),
|
|
|
- PROC(READLINK, enc_readlink, dec_readlink),
|
|
|
- PROC(READDIR, enc_readdir, dec_readdir),
|
|
|
- PROC(SERVER_CAPS, enc_server_caps, dec_server_caps),
|
|
|
- PROC(DELEGRETURN, enc_delegreturn, dec_delegreturn),
|
|
|
- PROC(GETACL, enc_getacl, dec_getacl),
|
|
|
- PROC(SETACL, enc_setacl, dec_setacl),
|
|
|
- PROC(FS_LOCATIONS, enc_fs_locations, dec_fs_locations),
|
|
|
- PROC(RELEASE_LOCKOWNER, enc_release_lockowner, dec_release_lockowner),
|
|
|
+ PROC(READ, enc_read, dec_read),
|
|
|
+ PROC(WRITE, enc_write, dec_write),
|
|
|
+ PROC(COMMIT, enc_commit, dec_commit),
|
|
|
+ PROC(OPEN, enc_open, dec_open),
|
|
|
+ PROC(OPEN_CONFIRM, enc_open_confirm, dec_open_confirm),
|
|
|
+ PROC(OPEN_NOATTR, enc_open_noattr, dec_open_noattr),
|
|
|
+ PROC(OPEN_DOWNGRADE, enc_open_downgrade, dec_open_downgrade),
|
|
|
+ PROC(CLOSE, enc_close, dec_close),
|
|
|
+ PROC(SETATTR, enc_setattr, dec_setattr),
|
|
|
+ PROC(FSINFO, enc_fsinfo, dec_fsinfo),
|
|
|
+ PROC(RENEW, enc_renew, dec_renew),
|
|
|
+ PROC(SETCLIENTID, enc_setclientid, dec_setclientid),
|
|
|
+ PROC(SETCLIENTID_CONFIRM, enc_setclientid_confirm, dec_setclientid_confirm),
|
|
|
+ PROC(LOCK, enc_lock, dec_lock),
|
|
|
+ PROC(LOCKT, enc_lockt, dec_lockt),
|
|
|
+ PROC(LOCKU, enc_locku, dec_locku),
|
|
|
+ PROC(ACCESS, enc_access, dec_access),
|
|
|
+ PROC(GETATTR, enc_getattr, dec_getattr),
|
|
|
+ PROC(LOOKUP, enc_lookup, dec_lookup),
|
|
|
+ PROC(LOOKUP_ROOT, enc_lookup_root, dec_lookup_root),
|
|
|
+ PROC(REMOVE, enc_remove, dec_remove),
|
|
|
+ PROC(RENAME, enc_rename, dec_rename),
|
|
|
+ PROC(LINK, enc_link, dec_link),
|
|
|
+ PROC(SYMLINK, enc_symlink, dec_symlink),
|
|
|
+ PROC(CREATE, enc_create, dec_create),
|
|
|
+ PROC(PATHCONF, enc_pathconf, dec_pathconf),
|
|
|
+ PROC(STATFS, enc_statfs, dec_statfs),
|
|
|
+ PROC(READLINK, enc_readlink, dec_readlink),
|
|
|
+ PROC(READDIR, enc_readdir, dec_readdir),
|
|
|
+ PROC(SERVER_CAPS, enc_server_caps, dec_server_caps),
|
|
|
+ PROC(DELEGRETURN, enc_delegreturn, dec_delegreturn),
|
|
|
+ PROC(GETACL, enc_getacl, dec_getacl),
|
|
|
+ PROC(SETACL, enc_setacl, dec_setacl),
|
|
|
+ PROC(FS_LOCATIONS, enc_fs_locations, dec_fs_locations),
|
|
|
+ PROC(RELEASE_LOCKOWNER, enc_release_lockowner, dec_release_lockowner),
|
|
|
#if defined(CONFIG_NFS_V4_1)
|
|
|
- PROC(EXCHANGE_ID, enc_exchange_id, dec_exchange_id),
|
|
|
- PROC(CREATE_SESSION, enc_create_session, dec_create_session),
|
|
|
- PROC(DESTROY_SESSION, enc_destroy_session, dec_destroy_session),
|
|
|
- PROC(SEQUENCE, enc_sequence, dec_sequence),
|
|
|
- PROC(GET_LEASE_TIME, enc_get_lease_time, dec_get_lease_time),
|
|
|
- PROC(RECLAIM_COMPLETE, enc_reclaim_complete, dec_reclaim_complete),
|
|
|
- PROC(GETDEVICEINFO, enc_getdeviceinfo, dec_getdeviceinfo),
|
|
|
- PROC(LAYOUTGET, enc_layoutget, dec_layoutget),
|
|
|
+ PROC(EXCHANGE_ID, enc_exchange_id, dec_exchange_id),
|
|
|
+ PROC(CREATE_SESSION, enc_create_session, dec_create_session),
|
|
|
+ PROC(DESTROY_SESSION, enc_destroy_session, dec_destroy_session),
|
|
|
+ PROC(SEQUENCE, enc_sequence, dec_sequence),
|
|
|
+ PROC(GET_LEASE_TIME, enc_get_lease_time, dec_get_lease_time),
|
|
|
+ PROC(RECLAIM_COMPLETE, enc_reclaim_complete, dec_reclaim_complete),
|
|
|
+ PROC(GETDEVICEINFO, enc_getdeviceinfo, dec_getdeviceinfo),
|
|
|
+ PROC(LAYOUTGET, enc_layoutget, dec_layoutget),
|
|
|
#endif /* CONFIG_NFS_V4_1 */
|
|
|
};
|
|
|
|