linux/fs/nfs
Chuck Lever c05cefcc72 nfs: Fix ugly referral attributes
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

Fixes: 6b97fd3da1 ("NFSv4: Follow a referral")
Suggested-by: Pradeep Thomas <pradeepthomas@gmail.com>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Cc: stable@vger.kernel.org
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
2017-11-17 16:43:52 -05:00
..
blocklayout block: replace bi_bdev with a gendisk pointer and partitions index 2017-08-23 12:49:55 -06:00
filelayout fs, nfs: convert nfs_client.cl_count from atomic_t to refcount_t 2017-11-17 13:48:01 -05:00
flexfilelayout fs, nfs: convert nfs_client.cl_count from atomic_t to refcount_t 2017-11-17 13:48:01 -05:00
cache_lib.c fs, nfs: convert nfs_cache_defer_req.count from atomic_t to refcount_t 2017-11-17 13:48:00 -05:00
cache_lib.h fs, nfs: convert nfs_cache_defer_req.count from atomic_t to refcount_t 2017-11-17 13:48:00 -05:00
callback_proc.c NFS: Fix bool initialization/comparison 2017-11-17 16:43:43 -05:00
callback_xdr.c Chuck's RDMA update overhauls the "call receive" side of the 2017-07-13 13:56:24 -07:00
callback.c nfs: remove net pointer from messages 2017-11-17 16:43:51 -05:00
callback.h nfs: don't cast callback decode/proc/encode routines 2017-07-13 15:57:56 -04:00
client.c fs, nfs: convert nfs_client.cl_count from atomic_t to refcount_t 2017-11-17 13:48:01 -05:00
delegation.c NFSv4: Retry CLOSE and DELEGRETURN on NFS4ERR_OLD_STATEID. 2017-11-17 16:43:47 -05:00
delegation.h NFSv4: Retry CLOSE and DELEGRETURN on NFS4ERR_OLD_STATEID. 2017-11-17 16:43:47 -05:00
dir.c NFS: Fix a typo in nfs_rename() 2017-11-17 16:43:46 -05:00
direct.c NFSv4: Use a mutex to protect the per-inode commit lists 2017-08-15 11:54:47 -04:00
dns_resolve.c
dns_resolve.h
export.c nfs: add export operations 2017-07-13 17:12:04 -04:00
file.c NFS: various changes relating to reporting IO errors. 2017-09-11 22:28:56 -04:00
fscache-index.c fscache: remove unused ->now_uncached callback 2017-09-06 17:27:26 -07:00
fscache.c
fscache.h
getroot.c
inode.c nfs client: exit_net cleanup check added 2017-11-17 16:43:50 -05:00
internal.h NFS: various changes relating to reporting IO errors. 2017-09-11 22:28:56 -04:00
io.c
iostat.h
Kconfig pnfs/blocklayout: require 64-bit sector_t 2017-08-11 14:10:13 -04:00
Makefile nfs: add export operations 2017-07-13 17:12:04 -04:00
mount_clnt.c nfs: count correct array for mnt3_counts array size 2017-07-21 08:49:57 -04:00
namespace.c NFS: Use ERR_CAST() to avoid cross-structure cast 2017-05-28 10:11:47 -07:00
netns.h
nfs2super.c
nfs2xdr.c NFS: convert flags to bool 2017-07-13 15:58:04 -04:00
nfs3_fs.h
nfs3acl.c
nfs3client.c
nfs3proc.c NFS: Don't compare apples to elephants to determine access bits 2017-10-16 13:51:27 -04:00
nfs3super.c
nfs3xdr.c NFS: convert flags to bool 2017-07-13 15:58:04 -04:00
nfs4_fs.h NFSv4: Replace closed stateids with the "invalid special stateid" 2017-11-17 16:43:49 -05:00
nfs4client.c NFS: Fix bool initialization/comparison 2017-11-17 16:43:43 -05:00
nfs4file.c
nfs4getroot.c
nfs4idmap.c NFS: Cleanup error handling in nfs_idmap_request_key() 2017-10-01 18:51:30 -04:00
nfs4idmap.h
nfs4namespace.c
nfs4proc.c nfs: Fix ugly referral attributes 2017-11-17 16:43:52 -05:00
nfs4renewd.c
nfs4session.c
nfs4session.h
nfs4state.c NFSv4: Replace closed stateids with the "invalid special stateid" 2017-11-17 16:43:49 -05:00
nfs4super.c
nfs4sysctl.c
nfs4trace.c
nfs4trace.h NFSv4: Add a tracepoint to document open stateid updates 2017-11-17 16:43:45 -05:00
nfs4xdr.c NFSv4: Replace closed stateids with the "invalid special stateid" 2017-11-17 16:43:49 -05:00
nfs42.h
nfs42proc.c NFSv4.2 fix size storage for nfs42_proc_copy 2017-07-13 16:00:14 -04:00
nfs42xdr.c nfs: fix decoder callback prototypes 2017-07-13 15:57:56 -04:00
nfs.h
nfsroot.c
nfstrace.c
nfstrace.h NFS: Add static NFS I/O tracepoints 2017-09-11 22:20:38 -04:00
pagelist.c NFS: various changes relating to reporting IO errors. 2017-09-11 22:28:56 -04:00
pnfs_dev.c
pnfs_nfs.c fs, nfs: convert nfs4_pnfs_ds.ds_count from atomic_t to refcount_t 2017-11-17 13:47:59 -05:00
pnfs.c pNFS: Retry NFS4ERR_OLD_STATEID errors in layoutreturn-on-close 2017-11-17 16:43:47 -05:00
pnfs.h pNFS: Retry NFS4ERR_OLD_STATEID errors in layoutreturn-on-close 2017-11-17 16:43:47 -05:00
proc.c NFS: convert flags to bool 2017-07-13 15:58:04 -04:00
read.c NFS: Add static NFS I/O tracepoints 2017-09-11 22:20:38 -04:00
super.c NFS: super: mark expected switch fall-throughs 2017-11-17 16:43:51 -05:00
symlink.c
sysctl.c
unlink.c NFS: nfs_rename() - revalidate directories on -ERESTARTSYS 2017-07-13 15:58:04 -04:00
write.c nfs/write: Use common error handling code in nfs_lock_and_join_requests() 2017-11-17 16:43:50 -05:00