aboutsummaryrefslogtreecommitdiffstats
path: root/fs/nfs/nfs4xdr.c
diff options
context:
space:
mode:
authorChuck Lever <chuck.lever@oracle.com>2012-03-01 17:01:57 -0500
committerTrond Myklebust <Trond.Myklebust@netapp.com>2012-03-02 17:18:09 -0500
commit81934ddb8eb62a85b8015c0f2b824a88510965a2 (patch)
treedb5988884f8a0309b488cba6623b1ed2c31af983 /fs/nfs/nfs4xdr.c
parentbb4dae5e5b5a92f0ffbcc6ac10c5e8afcd87934d (diff)
NFS: Introduce NFS_ATTR_FATTR_V4_LOCATIONS
The Linux NFS client must distinguish between referral events (which it currently supports) and migration events (which it does not yet support). In both types of events, an fs_locations array is returned. But upper layers, not the XDR layer, should make the distinction between a referral and a migration. There really isn't a way for an XDR decoder function to distinguish the two, in general. Slightly adjust the FATTR flags returned by decode_fs_locations() to set NFS_ATTR_FATTR_V4_LOCATIONS only if a non-empty locations array was returned from the server. Then have logic in nfs4proc.c distinguish whether the locations array is for a referral or something else. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'fs/nfs/nfs4xdr.c')
-rw-r--r--fs/nfs/nfs4xdr.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/fs/nfs/nfs4xdr.c b/fs/nfs/nfs4xdr.c
index 48f539314f25..a6fb55da874c 100644
--- a/fs/nfs/nfs4xdr.c
+++ b/fs/nfs/nfs4xdr.c
@@ -3660,7 +3660,7 @@ static int decode_attr_fs_locations(struct xdr_stream *xdr, uint32_t *bitmap, st
3660 res->nlocations++; 3660 res->nlocations++;
3661 } 3661 }
3662 if (res->nlocations != 0) 3662 if (res->nlocations != 0)
3663 status = NFS_ATTR_FATTR_V4_REFERRAL; 3663 status = NFS_ATTR_FATTR_V4_LOCATIONS;
3664out: 3664out:
3665 dprintk("%s: fs_locations done, error = %d\n", __func__, status); 3665 dprintk("%s: fs_locations done, error = %d\n", __func__, status);
3666 return status; 3666 return status;