|
@@ -1772,12 +1772,19 @@ static __be32 nfsd4_encode_fs_locations(struct svc_rqst *rqstp,
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static u32 nfs4_ftypes[16] = {
|
|
|
- NF4BAD, NF4FIFO, NF4CHR, NF4BAD,
|
|
|
- NF4DIR, NF4BAD, NF4BLK, NF4BAD,
|
|
|
- NF4REG, NF4BAD, NF4LNK, NF4BAD,
|
|
|
- NF4SOCK, NF4BAD, NF4LNK, NF4BAD,
|
|
|
-};
|
|
|
+static u32 nfs4_file_type(umode_t mode)
|
|
|
+{
|
|
|
+ switch (mode & S_IFMT) {
|
|
|
+ case S_IFIFO: return NF4FIFO;
|
|
|
+ case S_IFCHR: return NF4CHR;
|
|
|
+ case S_IFDIR: return NF4DIR;
|
|
|
+ case S_IFBLK: return NF4BLK;
|
|
|
+ case S_IFLNK: return NF4LNK;
|
|
|
+ case S_IFREG: return NF4REG;
|
|
|
+ case S_IFSOCK: return NF4SOCK;
|
|
|
+ default: return NF4BAD;
|
|
|
+ };
|
|
|
+}
|
|
|
|
|
|
static __be32
|
|
|
nfsd4_encode_name(struct svc_rqst *rqstp, int whotype, uid_t id, int group,
|
|
@@ -1966,7 +1973,7 @@ nfsd4_encode_fattr(struct svc_fh *fhp, struct svc_export *exp,
|
|
|
if (bmval0 & FATTR4_WORD0_TYPE) {
|
|
|
if ((buflen -= 4) < 0)
|
|
|
goto out_resource;
|
|
|
- dummy = nfs4_ftypes[(stat.mode & S_IFMT) >> 12];
|
|
|
+ dummy = nfs4_file_type(stat.mode);
|
|
|
if (dummy == NF4BAD)
|
|
|
goto out_serverfault;
|
|
|
WRITE32(dummy);
|