Patch "nfsd: Fix an FS_LAYOUT_TYPES/LAYOUT_TYPES encode bug" has been added to the 4.1-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
nfsd: Fix an FS_LAYOUT_TYPES/LAYOUT_TYPES encode bug
to the 4.1-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
nfsd-fix-an-fs_layout_types-layout_types-encode-bug.patch
and it can be found in the queue-4.1 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
6896f15aabde505b35888039af93d1d182a0108aMon Sep 17 00:00:00 2001
From: Kinglong Mee <[email protected]>
Date: Thu, 30 Jul 2015 21:52:44 +0800
Subject: nfsd: Fix an FS_LAYOUT_TYPES/LAYOUT_TYPES encode bug
From: Kinglong Mee <[email protected]>
commit 6896f15aabde505b35888039af93d1d182a0108a upstream.
Currently we'll respond correctly to a request for either FS_LAYOUT_TYPES or LAYOUT_TYPES, but not to a request for both attributes simultaneously.
--- fs/nfsd/nfs4xdr.c | 45 +++++++++++++++++++++++++++++++-------------- 1 file changed, 31 insertions(+), 14 deletions(-)
fs/nfsd/nfs4xdr.c +31 -14
@@ -2139,6 +2139,27 @@ nfsd4_encode_aclname(struct xdr_stream *return nfsd4_encode_user (xdr, rqstp, ace->who_uid); } +static inline __be32 +nfsd4_encode_layout_type (struct xdr_stream *xdr,enum pnfs_layouttype layout_type) +{ +__be32 *p; + +if (layout_type) { + p =xdr_reserve_space (xdr,8 ); +if (!p) +return nfserr_resource; + *p++ =cpu_to_be32 (1 ); + *p++ =cpu_to_be32 (layout_type); + }else { + p =xdr_reserve_space (xdr,4 ); +if (!p) +return nfserr_resource; + *p++ =cpu_to_be32 (0 ); + } + +return 0 ; +} +#define WORD0_ABSENT_FS_ATTRS (FATTR4_WORD0_FS_LOCATIONS | FATTR4_WORD0_FSID | \ FATTR4_WORD0_RDATTR_ERROR)#define WORD1_ABSENT_FS_ATTRS FATTR4_WORD1_MOUNTED_ON_FILEID
@@ -2692,20 +2713,16 @@ out_acl: p =xdr_encode_hyper (p, stat.ino); }#ifdef CONFIG_NFSD_PNFS -if ((bmval1 &FATTR4_WORD1_FS_LAYOUT_TYPES ) || - (bmval2 &FATTR4_WORD2_LAYOUT_TYPES )) { -if (exp->ex_layout_type) { - p =xdr_reserve_space (xdr,8 ); -if (!p) - goto out_resource; - *p++ =cpu_to_be32 (1 ); - *p++ =cpu_to_be32 (exp->ex_layout_type); - }else { - p =xdr_reserve_space (xdr,4 ); -if (!p) - goto out_resource; - *p++ =cpu_to_be32 (0 ); - } +if (bmval1 &FATTR4_WORD1_FS_LAYOUT_TYPES ) { + status =nfsd4_encode_layout_type (xdr, exp->ex_layout_type); +if (status) + goto out; + } + +if (bmval2 &FATTR4_WORD2_LAYOUT_TYPES ) { + status =nfsd4_encode_layout_type (xdr, exp->ex_layout_type); +if (status) + goto out; }if (bmval2 &FATTR4_WORD2_LAYOUT_BLKSIZE ) {
Patches currently in stable-queue which might be from [email protected] are
queue-4.1/nfsd-fix-an-fs_layout_types-layout_types-encode-bug.patch