Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Open sidebar
Bricked
flo
Commits
ab19b481
Commit
ab19b481
authored
13 years ago
by
Trond Myklebust
Browse files
Options
Download
Email Patches
Plain Diff
NFSv4: Add a encode op helper
Signed-off-by:
Trond Myklebust
<
Trond.Myklebust@netapp.com
>
parent
4ade9821
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
32 additions
and
129 deletions
+32
-129
fs/nfs/nfs4xdr.c
fs/nfs/nfs4xdr.c
+32
-129
No files found.
fs/nfs/nfs4xdr.c
View file @
ab19b481
...
...
@@ -935,6 +935,15 @@ static void encode_compound_hdr(struct xdr_stream *xdr,
*
p
=
cpu_to_be32
(
hdr
->
nops
);
}
static
void
encode_op_hdr
(
struct
xdr_stream
*
xdr
,
enum
nfs_opnum4
op
,
uint32_t
replen
,
struct
compound_hdr
*
hdr
)
{
encode_uint32
(
xdr
,
op
);
hdr
->
nops
++
;
hdr
->
replen
+=
replen
;
}
static
void
encode_nops
(
struct
compound_hdr
*
hdr
)
{
BUG_ON
(
hdr
->
nops
>
NFS4_MAX_OPS
);
...
...
@@ -1086,14 +1095,9 @@ static void encode_access(struct xdr_stream *xdr, u32 access, struct compound_hd
static
void
encode_close
(
struct
xdr_stream
*
xdr
,
const
struct
nfs_closeargs
*
arg
,
struct
compound_hdr
*
hdr
)
{
__be32
*
p
;
p
=
reserve_space
(
xdr
,
4
);
*
p
=
cpu_to_be32
(
OP_CLOSE
);
encode_op_hdr
(
xdr
,
OP_CLOSE
,
decode_close_maxsz
,
hdr
);
encode_nfs4_seqid
(
xdr
,
arg
->
seqid
);
encode_nfs4_stateid
(
xdr
,
arg
->
stateid
);
hdr
->
nops
++
;
hdr
->
replen
+=
decode_close_maxsz
;
}
static
void
encode_commit
(
struct
xdr_stream
*
xdr
,
const
struct
nfs_writeargs
*
args
,
struct
compound_hdr
*
hdr
)
...
...
@@ -1172,8 +1176,7 @@ encode_getattr_three(struct xdr_stream *xdr,
{
__be32
*
p
;
p
=
reserve_space
(
xdr
,
4
);
*
p
=
cpu_to_be32
(
OP_GETATTR
);
encode_op_hdr
(
xdr
,
OP_GETATTR
,
decode_getattr_maxsz
,
hdr
);
if
(
bm2
)
{
p
=
reserve_space
(
xdr
,
16
);
*
p
++
=
cpu_to_be32
(
3
);
...
...
@@ -1190,8 +1193,6 @@ encode_getattr_three(struct xdr_stream *xdr,
*
p
++
=
cpu_to_be32
(
1
);
*
p
=
cpu_to_be32
(
bm0
);
}
hdr
->
nops
++
;
hdr
->
replen
+=
decode_getattr_maxsz
;
}
static
void
encode_getfattr
(
struct
xdr_stream
*
xdr
,
const
u32
*
bitmask
,
struct
compound_hdr
*
hdr
)
...
...
@@ -1217,23 +1218,13 @@ static void encode_fs_locations(struct xdr_stream *xdr, const u32* bitmask, stru
static
void
encode_getfh
(
struct
xdr_stream
*
xdr
,
struct
compound_hdr
*
hdr
)
{
__be32
*
p
;
p
=
reserve_space
(
xdr
,
4
);
*
p
=
cpu_to_be32
(
OP_GETFH
);
hdr
->
nops
++
;
hdr
->
replen
+=
decode_getfh_maxsz
;
encode_op_hdr
(
xdr
,
OP_GETFH
,
decode_getfh_maxsz
,
hdr
);
}
static
void
encode_link
(
struct
xdr_stream
*
xdr
,
const
struct
qstr
*
name
,
struct
compound_hdr
*
hdr
)
{
__be32
*
p
;
p
=
reserve_space
(
xdr
,
4
);
*
p
=
cpu_to_be32
(
OP_LINK
);
encode_op_hdr
(
xdr
,
OP_LINK
,
decode_link_maxsz
,
hdr
);
encode_string
(
xdr
,
name
->
len
,
name
->
name
);
hdr
->
nops
++
;
hdr
->
replen
+=
decode_link_maxsz
;
}
static
inline
int
nfs4_lock_type
(
struct
file_lock
*
fl
,
int
block
)
...
...
@@ -1323,24 +1314,14 @@ static void encode_locku(struct xdr_stream *xdr, const struct nfs_locku_args *ar
static
void
encode_release_lockowner
(
struct
xdr_stream
*
xdr
,
const
struct
nfs_lowner
*
lowner
,
struct
compound_hdr
*
hdr
)
{
__be32
*
p
;
p
=
reserve_space
(
xdr
,
4
);
*
p
=
cpu_to_be32
(
OP_RELEASE_LOCKOWNER
);
encode_op_hdr
(
xdr
,
OP_RELEASE_LOCKOWNER
,
decode_release_lockowner_maxsz
,
hdr
);
encode_lockowner
(
xdr
,
lowner
);
hdr
->
nops
++
;
hdr
->
replen
+=
decode_release_lockowner_maxsz
;
}
static
void
encode_lookup
(
struct
xdr_stream
*
xdr
,
const
struct
qstr
*
name
,
struct
compound_hdr
*
hdr
)
{
__be32
*
p
;
p
=
reserve_space
(
xdr
,
4
);
*
p
=
cpu_to_be32
(
OP_LOOKUP
);
encode_op_hdr
(
xdr
,
OP_LOOKUP
,
decode_lookup_maxsz
,
hdr
);
encode_string
(
xdr
,
name
->
len
,
name
->
name
);
hdr
->
nops
++
;
hdr
->
replen
+=
decode_lookup_maxsz
;
}
static
void
encode_share_access
(
struct
xdr_stream
*
xdr
,
fmode_t
fmode
)
...
...
@@ -1371,8 +1352,6 @@ static inline void encode_openhdr(struct xdr_stream *xdr, const struct nfs_opena
* opcode 4, seqid 4, share_access 4, share_deny 4, clientid 8, ownerlen 4,
* owner 4 = 32
*/
p
=
reserve_space
(
xdr
,
4
);
*
p
=
cpu_to_be32
(
OP_OPEN
);
encode_nfs4_seqid
(
xdr
,
arg
->
seqid
);
encode_share_access
(
xdr
,
arg
->
fmode
);
p
=
reserve_space
(
xdr
,
32
);
...
...
@@ -1481,6 +1460,7 @@ static inline void encode_claim_delegate_cur(struct xdr_stream *xdr, const struc
static
void
encode_open
(
struct
xdr_stream
*
xdr
,
const
struct
nfs_openargs
*
arg
,
struct
compound_hdr
*
hdr
)
{
encode_op_hdr
(
xdr
,
OP_OPEN
,
decode_open_maxsz
,
hdr
);
encode_openhdr
(
xdr
,
arg
);
encode_opentype
(
xdr
,
arg
);
switch
(
arg
->
claim
)
{
...
...
@@ -1496,55 +1476,33 @@ static void encode_open(struct xdr_stream *xdr, const struct nfs_openargs *arg,
default:
BUG
();
}
hdr
->
nops
++
;
hdr
->
replen
+=
decode_open_maxsz
;
}
static
void
encode_open_confirm
(
struct
xdr_stream
*
xdr
,
const
struct
nfs_open_confirmargs
*
arg
,
struct
compound_hdr
*
hdr
)
{
__be32
*
p
;
p
=
reserve_space
(
xdr
,
4
);
*
p
=
cpu_to_be32
(
OP_OPEN_CONFIRM
);
encode_op_hdr
(
xdr
,
OP_OPEN_CONFIRM
,
decode_open_confirm_maxsz
,
hdr
);
encode_nfs4_stateid
(
xdr
,
arg
->
stateid
);
encode_nfs4_seqid
(
xdr
,
arg
->
seqid
);
hdr
->
nops
++
;
hdr
->
replen
+=
decode_open_confirm_maxsz
;
}
static
void
encode_open_downgrade
(
struct
xdr_stream
*
xdr
,
const
struct
nfs_closeargs
*
arg
,
struct
compound_hdr
*
hdr
)
{
__be32
*
p
;
p
=
reserve_space
(
xdr
,
4
);
*
p
=
cpu_to_be32
(
OP_OPEN_DOWNGRADE
);
encode_op_hdr
(
xdr
,
OP_OPEN_DOWNGRADE
,
decode_open_downgrade_maxsz
,
hdr
);
encode_nfs4_stateid
(
xdr
,
arg
->
stateid
);
encode_nfs4_seqid
(
xdr
,
arg
->
seqid
);
encode_share_access
(
xdr
,
arg
->
fmode
);
hdr
->
nops
++
;
hdr
->
replen
+=
decode_open_downgrade_maxsz
;
}
static
void
encode_putfh
(
struct
xdr_stream
*
xdr
,
const
struct
nfs_fh
*
fh
,
struct
compound_hdr
*
hdr
)
{
__be32
*
p
;
p
=
reserve_space
(
xdr
,
4
);
*
p
=
cpu_to_be32
(
OP_PUTFH
);
encode_op_hdr
(
xdr
,
OP_PUTFH
,
decode_putfh_maxsz
,
hdr
);
encode_string
(
xdr
,
fh
->
size
,
fh
->
data
);
hdr
->
nops
++
;
hdr
->
replen
+=
decode_putfh_maxsz
;
}
static
void
encode_putrootfh
(
struct
xdr_stream
*
xdr
,
struct
compound_hdr
*
hdr
)
{
__be32
*
p
;
p
=
reserve_space
(
xdr
,
4
);
*
p
=
cpu_to_be32
(
OP_PUTROOTFH
);
hdr
->
nops
++
;
hdr
->
replen
+=
decode_putrootfh_maxsz
;
encode_op_hdr
(
xdr
,
OP_PUTROOTFH
,
decode_putrootfh_maxsz
,
hdr
);
}
static
void
encode_open_stateid
(
struct
xdr_stream
*
xdr
,
const
struct
nfs_open_context
*
ctx
,
const
struct
nfs_lock_context
*
l_ctx
,
int
zero_seqid
)
...
...
@@ -1564,17 +1522,13 @@ static void encode_read(struct xdr_stream *xdr, const struct nfs_readargs *args,
{
__be32
*
p
;
p
=
reserve_space
(
xdr
,
4
);
*
p
=
cpu_to_be32
(
OP_READ
);
encode_op_hdr
(
xdr
,
OP_READ
,
decode_read_maxsz
,
hdr
);
encode_open_stateid
(
xdr
,
args
->
context
,
args
->
lock_context
,
hdr
->
minorversion
);
p
=
reserve_space
(
xdr
,
12
);
p
=
xdr_encode_hyper
(
p
,
args
->
offset
);
*
p
=
cpu_to_be32
(
args
->
count
);
hdr
->
nops
++
;
hdr
->
replen
+=
decode_read_maxsz
;
}
static
void
encode_readdir
(
struct
xdr_stream
*
xdr
,
const
struct
nfs4_readdir_arg
*
readdir
,
struct
rpc_rqst
*
req
,
struct
compound_hdr
*
hdr
)
...
...
@@ -1622,35 +1576,20 @@ static void encode_readdir(struct xdr_stream *xdr, const struct nfs4_readdir_arg
static
void
encode_readlink
(
struct
xdr_stream
*
xdr
,
const
struct
nfs4_readlink
*
readlink
,
struct
rpc_rqst
*
req
,
struct
compound_hdr
*
hdr
)
{
__be32
*
p
;
p
=
reserve_space
(
xdr
,
4
);
*
p
=
cpu_to_be32
(
OP_READLINK
);
hdr
->
nops
++
;
hdr
->
replen
+=
decode_readlink_maxsz
;
encode_op_hdr
(
xdr
,
OP_READLINK
,
decode_readlink_maxsz
,
hdr
);
}
static
void
encode_remove
(
struct
xdr_stream
*
xdr
,
const
struct
qstr
*
name
,
struct
compound_hdr
*
hdr
)
{
__be32
*
p
;
p
=
reserve_space
(
xdr
,
4
);
*
p
=
cpu_to_be32
(
OP_REMOVE
);
encode_op_hdr
(
xdr
,
OP_REMOVE
,
decode_remove_maxsz
,
hdr
);
encode_string
(
xdr
,
name
->
len
,
name
->
name
);
hdr
->
nops
++
;
hdr
->
replen
+=
decode_remove_maxsz
;
}
static
void
encode_rename
(
struct
xdr_stream
*
xdr
,
const
struct
qstr
*
oldname
,
const
struct
qstr
*
newname
,
struct
compound_hdr
*
hdr
)
{
__be32
*
p
;
p
=
reserve_space
(
xdr
,
4
);
*
p
=
cpu_to_be32
(
OP_RENAME
);
encode_op_hdr
(
xdr
,
OP_RENAME
,
decode_rename_maxsz
,
hdr
);
encode_string
(
xdr
,
oldname
->
len
,
oldname
->
name
);
encode_string
(
xdr
,
newname
->
len
,
newname
->
name
);
hdr
->
nops
++
;
hdr
->
replen
+=
decode_rename_maxsz
;
}
static
void
encode_renew
(
struct
xdr_stream
*
xdr
,
clientid4
clid
,
...
...
@@ -1668,12 +1607,7 @@ static void encode_renew(struct xdr_stream *xdr, clientid4 clid,
static
void
encode_restorefh
(
struct
xdr_stream
*
xdr
,
struct
compound_hdr
*
hdr
)
{
__be32
*
p
;
p
=
reserve_space
(
xdr
,
4
);
*
p
=
cpu_to_be32
(
OP_RESTOREFH
);
hdr
->
nops
++
;
hdr
->
replen
+=
decode_restorefh_maxsz
;
encode_op_hdr
(
xdr
,
OP_RESTOREFH
,
decode_restorefh_maxsz
,
hdr
);
}
static
void
...
...
@@ -1681,8 +1615,7 @@ encode_setacl(struct xdr_stream *xdr, struct nfs_setaclargs *arg, struct compoun
{
__be32
*
p
;
p
=
reserve_space
(
xdr
,
4
);
*
p
=
cpu_to_be32
(
OP_SETATTR
);
encode_op_hdr
(
xdr
,
OP_SETATTR
,
decode_setacl_maxsz
,
hdr
);
encode_nfs4_stateid
(
xdr
,
&
zero_stateid
);
p
=
reserve_space
(
xdr
,
2
*
4
);
*
p
++
=
cpu_to_be32
(
1
);
...
...
@@ -1691,30 +1624,18 @@ encode_setacl(struct xdr_stream *xdr, struct nfs_setaclargs *arg, struct compoun
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
;
}
static
void
encode_savefh
(
struct
xdr_stream
*
xdr
,
struct
compound_hdr
*
hdr
)
{
__be32
*
p
;
p
=
reserve_space
(
xdr
,
4
);
*
p
=
cpu_to_be32
(
OP_SAVEFH
);
hdr
->
nops
++
;
hdr
->
replen
+=
decode_savefh_maxsz
;
encode_op_hdr
(
xdr
,
OP_SAVEFH
,
decode_savefh_maxsz
,
hdr
);
}
static
void
encode_setattr
(
struct
xdr_stream
*
xdr
,
const
struct
nfs_setattrargs
*
arg
,
const
struct
nfs_server
*
server
,
struct
compound_hdr
*
hdr
)
{
__be32
*
p
;
p
=
reserve_space
(
xdr
,
4
);
*
p
=
cpu_to_be32
(
OP_SETATTR
);
encode_op_hdr
(
xdr
,
OP_SETATTR
,
decode_setattr_maxsz
,
hdr
);
encode_nfs4_stateid
(
xdr
,
&
arg
->
stateid
);
hdr
->
nops
++
;
hdr
->
replen
+=
decode_setattr_maxsz
;
encode_attrs
(
xdr
,
arg
->
iap
,
server
);
}
...
...
@@ -1753,9 +1674,7 @@ static void encode_write(struct xdr_stream *xdr, const struct nfs_writeargs *arg
{
__be32
*
p
;
p
=
reserve_space
(
xdr
,
4
);
*
p
=
cpu_to_be32
(
OP_WRITE
);
encode_op_hdr
(
xdr
,
OP_WRITE
,
decode_write_maxsz
,
hdr
);
encode_open_stateid
(
xdr
,
args
->
context
,
args
->
lock_context
,
hdr
->
minorversion
);
...
...
@@ -1765,30 +1684,18 @@ static void encode_write(struct xdr_stream *xdr, const struct nfs_writeargs *arg
*
p
=
cpu_to_be32
(
args
->
count
);
xdr_write_pages
(
xdr
,
args
->
pages
,
args
->
pgbase
,
args
->
count
);
hdr
->
nops
++
;
hdr
->
replen
+=
decode_write_maxsz
;
}
static
void
encode_delegreturn
(
struct
xdr_stream
*
xdr
,
const
nfs4_stateid
*
stateid
,
struct
compound_hdr
*
hdr
)
{
__be32
*
p
;
p
=
reserve_space
(
xdr
,
4
);
*
p
=
cpu_to_be32
(
OP_DELEGRETURN
);
encode_op_hdr
(
xdr
,
OP_DELEGRETURN
,
decode_delegreturn_maxsz
,
hdr
);
encode_nfs4_stateid
(
xdr
,
stateid
);
hdr
->
nops
++
;
hdr
->
replen
+=
decode_delegreturn_maxsz
;
}
static
void
encode_secinfo
(
struct
xdr_stream
*
xdr
,
const
struct
qstr
*
name
,
struct
compound_hdr
*
hdr
)
{
__be32
*
p
;
p
=
reserve_space
(
xdr
,
4
);
*
p
=
cpu_to_be32
(
OP_SECINFO
);
encode_op_hdr
(
xdr
,
OP_SECINFO
,
decode_secinfo_maxsz
,
hdr
);
encode_string
(
xdr
,
name
->
len
,
name
->
name
);
hdr
->
nops
++
;
hdr
->
replen
+=
decode_secinfo_maxsz
;
}
#if defined(CONFIG_NFS_V4_1)
...
...
@@ -2132,12 +2039,8 @@ static void encode_free_stateid(struct xdr_stream *xdr,
struct
nfs41_free_stateid_args
*
args
,
struct
compound_hdr
*
hdr
)
{
__be32
*
p
;
p
=
reserve_space
(
xdr
,
4
);
*
p
=
cpu_to_be32
(
OP_FREE_STATEID
);
encode_op_hdr
(
xdr
,
OP_FREE_STATEID
,
decode_free_stateid_maxsz
,
hdr
);
encode_nfs4_stateid
(
xdr
,
args
->
stateid
);
hdr
->
nops
++
;
hdr
->
replen
+=
decode_free_stateid_maxsz
;
}
#endif
/* CONFIG_NFS_V4_1 */
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment