aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/fs/nfsd/nfsfh.c
diff options
context:
space:
mode:
authorJeff Layton <jlayton@primarydata.com>2014-06-17 07:44:14 -0400
committerJ. Bruce Fields <bfields@redhat.com>2014-06-23 11:31:37 -0400
commit94ec938b612eb877bb6622847972dd739ef738b8 (patch)
tree031f1e13f33fc8a437f0a3e95ece9ff628da6430 /fs/nfsd/nfsfh.c
parentnfsd: nfsd_splice_read and nfsd_readv should return __be32 (diff)
downloadwireguard-linux-94ec938b612eb877bb6622847972dd739ef738b8.tar.xz
wireguard-linux-94ec938b612eb877bb6622847972dd739ef738b8.zip
nfsd: add appropriate __force directives to filehandle generation code
The filehandle structs all use host-endian values, but will sometimes stuff big-endian values into those fields. This is OK since these values are opaque to the client, but it confuses sparse. Add __force to make it clear that we are doing this intentionally. Signed-off-by: Jeff Layton <jlayton@primarydata.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: J. Bruce Fields <bfields@redhat.com>
Diffstat (limited to 'fs/nfsd/nfsfh.c')
-rw-r--r--fs/nfsd/nfsfh.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/fs/nfsd/nfsfh.c b/fs/nfsd/nfsfh.c
index 6f5cc76a6c6e..e883a5868be6 100644
--- a/fs/nfsd/nfsfh.c
+++ b/fs/nfsd/nfsfh.c
@@ -162,7 +162,14 @@ static __be32 nfsd_set_fh_dentry(struct svc_rqst *rqstp, struct svc_fh *fhp)
/* deprecated, convert to type 3 */
len = key_len(FSID_ENCODE_DEV)/4;
fh->fh_fsid_type = FSID_ENCODE_DEV;
- fh->fh_fsid[0] = new_encode_dev(MKDEV(ntohl(fh->fh_fsid[0]), ntohl(fh->fh_fsid[1])));
+ /*
+ * struct knfsd_fh uses host-endian fields, which are
+ * sometimes used to hold net-endian values. This
+ * confuses sparse, so we must use __force here to
+ * keep it from complaining.
+ */
+ fh->fh_fsid[0] = new_encode_dev(MKDEV(ntohl((__force __be32)fh->fh_fsid[0]),
+ ntohl((__force __be32)fh->fh_fsid[1])));
fh->fh_fsid[1] = fh->fh_fsid[2];
}
data_left -= len;