Patch "nfs: Fix ugly referral attributes" has been added to the 4.4-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
nfs: Fix ugly referral attributes
to the 4.4-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:
nfs-fix-ugly-referral-attributes.patch
and it can be found in the queue-4.4 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
c05cefcc72416a37eba5a2b35f0704ed758a9145Mon Sep 17 00:00:00 2001
From: Chuck Lever <[email protected]>
Date: Sun, 5 Nov 2017 15:45:22 -0500
Subject: nfs: Fix ugly referral attributes
From: Chuck Lever <[email protected]>
commit c05cefcc72416a37eba5a2b35f0704ed758a9145 upstream.
Before traversing a referral and performing a mount, the mounted-on directory looks strange:
dr-xr-xr-x. 2 4294967294 4294967294 0 Dec 31 1969 dir.0
nfs4_get_referral is wiping out any cached attributes with what was returned via GETATTR(fs_locations), but the bit mask for that operation does not request any file attributes.
Retrieve owner and timestamp information so that the memcpy in nfs4_get_referral fills in more attributes.
Changes since v1:
- Don't request attributes that the client unconditionally replaces
- Request only MOUNTED_ON_FILEID or FILEID attribute, not both
- encode_fs_locations() doesn't use the third bitmask word
--- fs/nfs/nfs4proc.c | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-)
fs/nfs/nfs4proc.c +8 -10
@@ -242,15 +242,12 @@ const u32 nfs4_fsinfo_bitmap[3] = { FATT };const u32 nfs4_fs_locations_bitmap[3 ] = { -FATTR4_WORD0_TYPE - |FATTR4_WORD0_CHANGE +FATTR4_WORD0_CHANGE |FATTR4_WORD0_SIZE |FATTR4_WORD0_FSID |FATTR4_WORD0_FILEID |FATTR4_WORD0_FS_LOCATIONS , -FATTR4_WORD1_MODE - |FATTR4_WORD1_NUMLINKS - |FATTR4_WORD1_OWNER +FATTR4_WORD1_OWNER |FATTR4_WORD1_OWNER_GROUP |FATTR4_WORD1_RAWDEV |FATTR4_WORD1_SPACE_USED
@@ -6351,9 +6348,7 @@ static int _nfs4_proc_fs_locations(struc struct page *page) {struct nfs_server *server =NFS_SERVER (dir); -u32 bitmask[3 ] = { - [0 ] =FATTR4_WORD0_FSID |FATTR4_WORD0_FS_LOCATIONS , - }; +u32 bitmask[3 ];struct nfs4_fs_locations_arg args = { .dir_fh =NFS_FH (dir), .name = name,
@@ -6372,12 +6367,15 @@ static int _nfs4_proc_fs_locations(strucdprintk ("%s: start\n" , __func__); + bitmask[0 ] = nfs4_fattr_bitmap[0 ] |FATTR4_WORD0_FS_LOCATIONS ; + bitmask[1 ] = nfs4_fattr_bitmap[1 ]; +/* Ask for the fileid of the absent filesystem if mounted_on_fileid * is not supported */ if (NFS_SERVER (dir)->attr_bitmask[1 ] &FATTR4_WORD1_MOUNTED_ON_FILEID ) - bitmask[1 ] |=FATTR4_WORD1_MOUNTED_ON_FILEID ; + bitmask[0 ] &= ~FATTR4_WORD0_FILEID ;else - bitmask[0 ] |=FATTR4_WORD0_FILEID ; + bitmask[1 ] &= ~FATTR4_WORD1_MOUNTED_ON_FILEID ;nfs_fattr_init (&fs_locations->fattr); fs_locations->server = server;
Patches currently in stable-queue which might be from [email protected] are
queue-4.4/nfs-fix-ugly-referral-attributes.patch