From 748b8fbd349650ee79da3fc7f28c720c22fc3805 Mon Sep 17 00:00:00 2001 From: Trond Myklebust Date: Wed, 11 Mar 2009 14:10:28 -0400 Subject: [PATCH] --- yaml --- r: 139519 b: refs/heads/master c: 69aaaae18f7027d9594bce100378f102926cc0be h: refs/heads/master i: 139517: 3dcfcf719e6bb9a326d6baed7e95afe0f324f1c1 139515: 11d2d2fba3b3b86bf5d8018fdc42d87c6ecf6af7 139511: fcbfd593d5822a770678606eb7e85fd394bd1718 139503: 82459ac4c80396474166d265e9468cc42ccbd688 139487: fd109495841768d9fbeccdfb2c6ec0a3e88df1ef 139455: c7549e292a618931466a33759e332d65fc93cc5f 139391: 0254053a22d7b40a345d92a428fa46183b922123 139263: 78d0ae86fae40371c332f42aaab3a939df3e8856 v: v3 --- [refs] | 2 +- trunk/fs/nfs/nfs4proc.c | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 5babdf09cdb9..e1a47809266c 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 409924e4c943072a63c43bb6b77576bf12f1896b +refs/heads/master: 69aaaae18f7027d9594bce100378f102926cc0be diff --git a/trunk/fs/nfs/nfs4proc.c b/trunk/fs/nfs/nfs4proc.c index 8dde84b988d9..aa433d077945 100644 --- a/trunk/fs/nfs/nfs4proc.c +++ b/trunk/fs/nfs/nfs4proc.c @@ -3678,6 +3678,19 @@ ssize_t nfs4_listxattr(struct dentry *dentry, char *buf, size_t buflen) return len; } +static void nfs_fixup_referral_attributes(struct nfs_fattr *fattr) +{ + if (!((fattr->valid & NFS_ATTR_FATTR_FILEID) && + (fattr->valid & NFS_ATTR_FATTR_FSID) && + (fattr->valid & NFS_ATTR_FATTR_V4_REFERRAL))) + return; + + fattr->valid |= NFS_ATTR_FATTR_TYPE | NFS_ATTR_FATTR_MODE | + NFS_ATTR_FATTR_NLINK; + fattr->mode = S_IFDIR | S_IRUGO | S_IXUGO; + fattr->nlink = 2; +} + int nfs4_proc_fs_locations(struct inode *dir, const struct qstr *name, struct nfs4_fs_locations *fs_locations, struct page *page) { @@ -3704,6 +3717,7 @@ int nfs4_proc_fs_locations(struct inode *dir, const struct qstr *name, fs_locations->server = server; fs_locations->nlocations = 0; status = rpc_call_sync(server->client, &msg, 0); + nfs_fixup_referral_attributes(&fs_locations->fattr); dprintk("%s: returned status = %d\n", __func__, status); return status; }