diff options
Diffstat (limited to 'fs/nfs/nfs3xdr.c')
-rw-r--r-- | fs/nfs/nfs3xdr.c | 37 |
1 files changed, 17 insertions, 20 deletions
diff --git a/fs/nfs/nfs3xdr.c b/fs/nfs/nfs3xdr.c index 6cdeacffde46..e6a1932c7110 100644 --- a/fs/nfs/nfs3xdr.c +++ b/fs/nfs/nfs3xdr.c | |||
@@ -91,19 +91,15 @@ | |||
91 | /* | 91 | /* |
92 | * Map file type to S_IFMT bits | 92 | * Map file type to S_IFMT bits |
93 | */ | 93 | */ |
94 | static struct { | 94 | static const umode_t nfs_type2fmt[] = { |
95 | unsigned int mode; | 95 | [NF3BAD] = 0, |
96 | unsigned int nfs2type; | 96 | [NF3REG] = S_IFREG, |
97 | } nfs_type2fmt[] = { | 97 | [NF3DIR] = S_IFDIR, |
98 | { 0, NFNON }, | 98 | [NF3BLK] = S_IFBLK, |
99 | { S_IFREG, NFREG }, | 99 | [NF3CHR] = S_IFCHR, |
100 | { S_IFDIR, NFDIR }, | 100 | [NF3LNK] = S_IFLNK, |
101 | { S_IFBLK, NFBLK }, | 101 | [NF3SOCK] = S_IFSOCK, |
102 | { S_IFCHR, NFCHR }, | 102 | [NF3FIFO] = S_IFIFO, |
103 | { S_IFLNK, NFLNK }, | ||
104 | { S_IFSOCK, NFSOCK }, | ||
105 | { S_IFIFO, NFFIFO }, | ||
106 | { 0, NFBAD } | ||
107 | }; | 103 | }; |
108 | 104 | ||
109 | /* | 105 | /* |
@@ -148,13 +144,12 @@ static __be32 * | |||
148 | xdr_decode_fattr(__be32 *p, struct nfs_fattr *fattr) | 144 | xdr_decode_fattr(__be32 *p, struct nfs_fattr *fattr) |
149 | { | 145 | { |
150 | unsigned int type, major, minor; | 146 | unsigned int type, major, minor; |
151 | int fmode; | 147 | umode_t fmode; |
152 | 148 | ||
153 | type = ntohl(*p++); | 149 | type = ntohl(*p++); |
154 | if (type >= NF3BAD) | 150 | if (type > NF3FIFO) |
155 | type = NF3BAD; | 151 | type = NF3NON; |
156 | fmode = nfs_type2fmt[type].mode; | 152 | fmode = nfs_type2fmt[type]; |
157 | fattr->type = nfs_type2fmt[type].nfs2type; | ||
158 | fattr->mode = (ntohl(*p++) & ~S_IFMT) | fmode; | 153 | fattr->mode = (ntohl(*p++) & ~S_IFMT) | fmode; |
159 | fattr->nlink = ntohl(*p++); | 154 | fattr->nlink = ntohl(*p++); |
160 | fattr->uid = ntohl(*p++); | 155 | fattr->uid = ntohl(*p++); |
@@ -177,7 +172,7 @@ xdr_decode_fattr(__be32 *p, struct nfs_fattr *fattr) | |||
177 | p = xdr_decode_time3(p, &fattr->ctime); | 172 | p = xdr_decode_time3(p, &fattr->ctime); |
178 | 173 | ||
179 | /* Update the mode bits */ | 174 | /* Update the mode bits */ |
180 | fattr->valid |= (NFS_ATTR_FATTR | NFS_ATTR_FATTR_V3); | 175 | fattr->valid |= NFS_ATTR_FATTR_V3; |
181 | return p; | 176 | return p; |
182 | } | 177 | } |
183 | 178 | ||
@@ -233,7 +228,9 @@ xdr_decode_wcc_attr(__be32 *p, struct nfs_fattr *fattr) | |||
233 | p = xdr_decode_hyper(p, &fattr->pre_size); | 228 | p = xdr_decode_hyper(p, &fattr->pre_size); |
234 | p = xdr_decode_time3(p, &fattr->pre_mtime); | 229 | p = xdr_decode_time3(p, &fattr->pre_mtime); |
235 | p = xdr_decode_time3(p, &fattr->pre_ctime); | 230 | p = xdr_decode_time3(p, &fattr->pre_ctime); |
236 | fattr->valid |= NFS_ATTR_WCC; | 231 | fattr->valid |= NFS_ATTR_FATTR_PRESIZE |
232 | | NFS_ATTR_FATTR_PREMTIME | ||
233 | | NFS_ATTR_FATTR_PRECTIME; | ||
237 | return p; | 234 | return p; |
238 | } | 235 | } |
239 | 236 | ||